در این مقاله، میخواهیم با دستور sudo و کاربردهای آن آشنا شویم. در سیستمعامل لینوکس، دو راه برای اجرای برنامههای مدیریتی وجود دارد که یکی از آنها دستور su و دیگری sudo است. با استفاده از این دو دستور، شما میتوانید به کاربر اصلی یا روت سوییچ کنید. اکثر توزیعهای مختلف لینوکس مانند Fedora، Red Hat یا openSuSE امکان فعالکردن کاربر اصلی را میدهند.
Sudo مخفف عبارات “substitute user do” یا “super user do” است. هیچ منبع دقیقی که بتواند عنوان کند sudo دقیقا مخفف کدام عبارت است، وجود ندارد. این دستور برای بسیاری از انواع توزیعهای لینوکس، بسیار مهم و حیاتی است. با استفاده از sudo کاربران میتوانند به عنوان یک کاربر دیگر (معمولا کاربر اصلی) یک برنامه را اجرا کنند. نظرات مختلفی دربارهی sudo وجود دارد. برخی از کاربران این دستور را مفید میدانند و برخی دیگر بر این باورند که sudo چندان هم کاربردی نیست.
فرقی نمیکند که از چه توزیعی و برای چه کاری استفاده میکنید. در نهایت باید کارکردن با این دستور و کاربردهایش را یاد بگیرید و بدانید که چطور باید آن را پیکربندی کنید. به همین منظور، در این مقاله برخی از مهمترین نکات دربارهی دستور sudo را برایتان شرح میدهیم تا در پایان، شناخت خوبی از آن داشته باشید.
دستور Sudo چیست؟
دستور sudo یک ابزار خط فرمان برای توزیعهای لینوکس، سیستمعامل یونیکس و تمام سیستمعاملهای مبتنی بر آن است که کاربران با استفاده از آن میتوانند به طور موقت به منابع سیستم دسترسی داشته باشند و دستوراتی را اجرا کنند که اجرای آنها در حالت عادی و برای کاربران معمولی امکانپذیر نیست. حتی با استفاده از این دستور میتوان اجرای دستورات را با اکانت ریشه (root account) که قویترین حساب کاربری در سیستمعاملهای شبه یونیکس است، انجام داد. همچنین، sudo میتواند تمام دستورات و آرگومانها را ثبت کرده تا ادمینها آنها را با دقت ردیابی و بررسی کنند.
بسیاری از منابع، دستور sudo را مخفف عبارت “superuser do” میدانستند. با این حال، از 10 سال پیش تاکنون، چندان از این عبارت برای بیان sudo استفاده نمیشود. طبق گفتههای وبسایت sudo، در حال حاضر sudo به این معناست که این دستور، ابزاری را پیشنهاد میدهد که شبیه به دستور su است و قابلیتهای su-مانند را دارد.
Su نیز یک ابزار خط فرمان است و از مخفف عبارات “switch user” یا “substitute user” درست شده است. این ابزار نیز همانند sudo به کاربرانش اجازه میدهد تا دستورات خود را تحت یک حساب دیگر اجرا کنند. با این حال، مزایای sudo نسبت به su بسیار بیشتر است. بهتراست در زمان کار با vps لینوکس یا توزیعهای مختلف آن، با تفاوتهای sudo و su آشنا باشید.
در ادامه، دربارهی این دو دستور صحبت خواهیم کرد.
تفاوت میان sudo و su
در صورتی که به تنظیمات قدیمی و سنتی لینوکس عادت دارید، احتمالاً با مهمترین دستورات لینوکس مانند دستور su آشنا هستید و تابحال از آن برای دسترسی روت استفاده کردهاید. شما میتوانید از این دستور برای واردشدن مستقیم به عنوان کاربر روت و تبدیل سیستم به آن استفاده کنید. با این حال، توصیه میکنیم که هرگز مستقیماً به عنوان کاربر اصلی وارد سیستم نشوید؛ زیرا با انجام برخی از تغییرات، ممکن است به طور ناخواسته باعث نقص در سیستم خود شوید. در صورتی که از توزیعی استفاده میکنید که متکی به دستور su است، بهتراست به جای واردشدن به عنوان کاربر روت، به عنوان یک کاربر استاندارد وارد کابر اصلی شوید. به عبارتی دیگر، به طور غیرمستقیم وارد کاربر اصلی شوید.
اگر با توزیعهای مبتنی بر دستور sudo کار کرده باشید، میدانید که نمیتوانید مستقیماً به عنوان کاربر روت وارد سیستم شوید. در واقع، در چنین توزیعهایی، حساب کاربری ریشه به صورت “disabled” یا غیرفعال تعریف شده است. تنها کاری که میتوانید انجام دهید این است که با کمک sudo دستوراتی را صادر کنید تا بتوانید امتیاز دسترسی مدیر سیستم را بهدست آورید. در زمان خرید vps باید به نوع سیستمعامل، توزیع و دستورات مورد نیاز آن سیستم عامل دقت کنید.
کاربرد دستور sudo
در حالت معمولی و ابتدایی، استفاده از دستور sudo بسیار راحتتر از چیزی است که فکرش را میکنید. به عنوان مثال، فرض کنید که برای نصب یک نرمافزار، نیاز دارید که dpkg را اجرا کنید. در صورتی که به عنوان یک کاربر استاندارد وارد سیستم شده باشید، با اجرای دستور زیر، خطایی را دریافت میکنید که به شما میگوید که مجوزهای کافی و مناسب برای اجرای دستور را ندارید:
dpkg -i software.deb
این پیام خطا به این دلیل صادر شده است که به طور پیشفرض، کاربران استاندارد نمیتوانند برنامهها را بر روی یک سرور مجازی لینوکس نصب کنند. برای اینکه نصب موفقیت آمیزی داشته باشید، ابتدا باید امتیازات ویژهی کاربری را دریافت کنید. برای دریافت امتیازات ویژه نیز فقط کافی است عبارت sudo را به دستور بالا اضافه کنید:
sudo dpkg -i software.deb
نحوه کار دستور sudo
با اضافه کردن دستور sudo، زمانی که کاربر یک دستور را اجرا میکند، یک رمز عبور حساب کاربری از او خواسته میشود. پس از واردکردن رمز عبور، کاربر میتواند دستورات بعدی را بدون واردکردن دوبارهی رمز، اجرا کرده و هیچ محدودیت زمانیای نداشته باشد.
به طور پیش فرض، هر جلسه (session) پس از 5 دقیقه نداشتن فعالیت به پایان میرسد و کاربر پس از به پایان رسیدن جلسه، باید رمز عبور را دوباره وارد کند. البته، کاربران روت میتوانند در زمان پیکربندی sudo، زمان انتظار را روی بیشتر یا کمتر از 5 دقیقه تنظیم کنند.
در دستور su روال کار کمی فرق میکند و بدین صورت است که کاربر میتواند با استفاده از نام و رمز عبور حساب خود، به صورت دستی به حساب روت یا یک حساب ممتاز یا privledged سوییچ کند. تا زمانی که کاربر به حساب اصلی برنگردد، حساب او به صورت فعال باقی میماند. این رویکرد خوب است؛ اما در مواردی نیز ممکن است دردسرساز شود.
به عنوان مثال، فرض کنید یک مدیر از دستور su برای جابجایی حساب اصلی استفاده میکند. سپس، چند دستور سیستمی را اجرا کرده و سپس به سراغ انجام کار دیگری برود و اتصال دارای دسترسی مدیر را فراموش کند. در صورتی که مدیر به کنسول برگردد و سهواً یک دستور بد را اجرا کند، احتمال اینکه به سیستم صدمه بزند و خسارت امنیتی را به وجود بیاورد بسیار زیاد است.
دستور sudo برای به حداقل رساندن چنین خطراتی استفاده میشود و در عین حال به مدیران کمک میکند تا کنترل بیشتری بر روی سیستمشان داشته باشند. با استفاده از این دستور، مدیران میتوانند کارهای زیر را انجام دهند:
- پیکربندی فایل sudoers به گونهای که کاربران یا گروههای خاص، امکان اجرای برخی یا همهی دستورات را در حساب ریشه یا حساب دارای امتیازات ویژه(سطح ممتاز یا priviledge) داشته باشند.
- حفظ کنترل دقیق بر روی دستوراتی که کاربر میتواند روی هر میزبان اجرا کند، بر اساس نام دستورات و مکان دایرکتوری آنها.
- مشاهدهی فعالیتهای ثبت شده که نشان میدهند کدام کاربر sudo چه دستوراتی را و در چه زمانی اجرا کرده است.
- کنترل مدت زمانی که کاربران میتوانند پس از واردکردن رمز عبور حساب کاربریشان، دستورات را در سطح priviledged اجرا کنند.
- پیکربندی تنظیمات مربوط به پلاگینهای sudo، مسیرهای فایل، اشکال زدایی و رابط front-end.
- حفظ و نگهداری یک فایل sudoers که دسترسی چند کاربر را در چندین سیستم کنترل میکند.
نحوهی اجرای دستور sudo در سطح privilege
برای اینکه دستور sudo را در سطح ممتاز یا همان privilege اجرا کنید، فقط کافی است که کلمهی کلیدی sudo را در اول دستور قرار دهید. البته قبل از آن، مدیر سیستم باید امتیازات لازم را در فایل sudoers به شما داده باشد. به عنوان مثال، میتوانید از دستور زیر برای ویرایش فایل میزبان سیستم، استفاده کنید:
sudo vi /etc/hosts
در صورتی که سعی کنید دستور بالا را بدون کلمهی sudo اجرا کنید و یا مجوزهای لازم را نداشته باشید، از طرف سیستم میزبان یک پیغام دریافت خواهید کرد که به شما میگوید دسترسی شما رد شده است. با داشتن مجوزهای لازم و اضافه کردن sudo میتوانید پس از اجرای دستور بالا، محتویات فایل را در سطح priviledge بازیابی و ویرایش کنید.
سخن پایانی
دستور sudo یکی از دستورات مهم در سیستم عاملهای مبتنی بر لینوکس است که با کمک آن، میتوانید از یک حساب کاربری استاندارد به یک حساب ویژه یا حساب ریشه سوییچ کرده و تغییرات مدنظرتان را اعمال کنید.
با اجرای این دستور برخلاف دستور su، برای ماندن در حساب ویژه، یک محدودیت زمانی دارید. این محدودیت زمانی به شما کمک میکند تا از اشتباهات ناخواسته جلوگیری کرده و امنیت سیستم را افزایش دهید.