دستور sudo چیست؟ چه تفاوتی با دستور su دارد؟
دستورهای sudo و su دو دستور متداول در سیستمعاملهای Unix و Linux هستند که در محیط خط فرمان قابل استفاده هستند. این دو دستور در مورد مدیریت دسترسیها و اجازههای کاربران در سیستم عامل تفاوتهایی دارند. در این مقاله، به بررسی دستور sudo و تفاوت آن با دستور su میپردازیم.
su: به شما اجازه می دهد تا یک دستور را به صورت root اجرا کنید اما نیاز به دانستن رمز عبور root دارد. تمام دستورات اجرا شده با su ثبت نمی شوند. sudo: به شما اجازه می دهد تا یک دستور را به صورت root اجرا کنید. بسته به پیکربندی، دستور نیازی به رمز عبور root ندارد.
دستور sudo در لینوکس به کاربران امکان میدهد برای اجرای دستورات با دسترسی مدیریتی یا دسترسیهای خاص، حقوق مدیریتی موقتی را بدست آورند. با استفاده از sudo، کاربران عادی میتوانند به صورت موقت به عنوان مدیر سیستم عمل کنند و دستوراتی را اجرا کنند که در غیر این صورت برایشان قابل دسترسی نیست.
دستور su نیز به کاربران اجازه میدهد به صورت کامل و دائمی به حساب کاربری ریشه یا مدیر سیستم عامل تغییر دهند. با استفاده از دستور su، کاربران میتوانند با ورود به حساب کاربری ریشه دسترسی کامل به سیستم را کسب کنند و دستوراتی را اجرا کنند که نیاز به دسترسی مدیریتی دارند.
تفاوت اصلی بین دستور sudo و su در این است که با استفاده از sudo، کاربر میتواند به صورت موقت و برای یک دستور خاص دسترسی مدیریتی را بدست آورد، در حالی که با استفاده از su، کاربر به صورت دائمی و با تغییر حساب کاربری به حساب ریشه، دسترسی کامل به سیستم را به دست میآورد.
در ادامه مطالعه این مقاله، ما به بررسی مزیتها و محدودیتهای هر دستور و مواردی که در انتخاب بین استفاده از sudo یا su باید مد نظر قرار داده شود، خواهیم پرداخت.
این مواردی که در اینجا بیان می کنیم چه در سیستم لینوکسی و چه در سرور لینوکسی جواب میدهد. در صورتی ک از طرفداران سیستم عامل لینوکس هستید، می توانید آن را در سرور خودتان هم داشته باشید. برای این کار می توانید به صفحه خرید سرور مجازی لینوکس سر بزنید.
sudo چیست
sudo، که مخفف superuser do یا substitute user do است، یک دستور است که یک پرامت فوقالعاده بالا را اجرا میکند بدون اینکه نیازی به تغییر هویت داشته باشد.
با استفاده از دستور sudo قبل از دستوری که میخواهید اجرا کنید، میتوانید آن دستور را با دسترسیهای مدیریتی بالا اجرا کنید بدون اینکه نیازی به تغییر هویت خود داشته باشید. به عبارت دیگر، با استفاده از sudo میتوانید به عنوان کاربر عادی دستوراتی را با دسترسیهای مدیریتی اجرا کنید.
بسته به تنظیمات شما در فایل /etc/sudoers، میتوانید دستورهای تکی را به عنوان root یا یک کاربر دیگر صادر کنید. برای ادامه اجرای دستورات با قدرت root، همیشه باید از دستور sudo استفاده کنید. به عنوان مثال، اگر میخواهید بسته Nginx را نصب کنید، اجرا میکنید:
$ dnf install nginx
اما اگر شما root یا در گروه sudo نباشید، خطایی خواهید دید. در عوض، اگر این دستور را اجرا کنید:
$ sudo dnf install nginx
خواسته میشود رمز عبور خود را وارد کنید و سپس میتوانید دستور را اجرا کنید اگر عضو گروه sudo باشید.
روش سادهای برای تغییر به یک نشست تعاملی به عنوان کاربر root عبارت است از:
$ sudo –i
تئوری پشت استفاده از sudo این است که عمل صدور دستور sudo قبل از هر فرمانی که اجرا میکنید باعث میشود بیشتر درباره کاری که انجام میدهید فکر کنید و امیدواریم با حسابی که قدرت نامحدودی دارد اشتباهات کمتری انجام دهید.
دستور su
از طرف دیگر،su مخفف switch user یا substitute user (کاربر جایگزین) است. به طور اصولی، شما به یک کاربر خاص تغییر میدهید و نیازمند یک رمز عبور کاربری هستید که به آن تغییر میدهید. بیشتر اوقات، حساب کاربری که به آن تغییر میدهید حساب root است اما میتواند هر حسابی در سیستم باشد.
به عنوان مثال، اگر شما تایپ کنید:
$ su –
در مثال بالا، شما به حساب root تغییر میدهید و نیاز به رمز عبور root دارید. سوئیچ (-) محیط root را به شما ارائه میدهد (مسیر و متغیرهای پوسته) به جای اینکه فقط قدرت کاربر root را برای یک دستور تنها بدون تغییر محیط خودتان ارائه دهد.
$ su Bryant
در مثال دوم، شما به bryant تغییر میدهید، بنابراین نیاز به رمز عبور bryant دارید مگر اینکه root باشید.
اگر میخواهید به حساب کاربری bryant تغییر دهید که شامل مسیر و متغیرهای محیط bryant است، از سوئیچ (-) استفاده کنید:
$ su – bryant سوئیچ (-) تأثیر مشابهی با ورود مستقیم به سیستم با آن حساب کاربری دارد. در واقع، شما به آن کاربر تبدیل میشوید.
چرا sudo بهتر از جایگزینهای خود است؟
sudo بهترین و ایمنترین روش برای ارتقا دسترسی است. بیایید نگاهی به یک راه دیگر برای انجام کارها بیندازیم. دستور تغییر کاربر “su” شما رمز عبور روت را میپرسد و به شما یک دستور کاربر فوقالعاده را میدهد که با نماد # نشان داده میشود. این نماد # یعنی “خطر! شما به عنوان روت وارد شدهاید!”. اولین دستوری که صادر میکنید ممکن است خوب پیش برود. اما فراموشی شما باعث میشود که به عنوان روت وارد شده باقی بمانید. یک اشتباه تایپی بد و اتفاقی که نباید بیوفتد می افتد! شما کل درایو سخت را به جای آن MP3 جعلی که دانلود کردهاید، پاک کردهاید.
با استفاده از دستور sudo، شما باید قبل از هر دستور “sudo” را وارد کنید. این بدان معنی است که نیازی به یادآوری برای بازگشت به حالت کاربر عادی ندارید و تعداد تصادفات کمتری رخ خواهد داد.
فایل sudoers
این فایل قسمت تاریک و مخفی sudo است. این فایل کنترل میکند که چه کسی میتواند از دستور sudo برای به دست آوردن دسترسی بالا استفاده کند. این فایل معمولاً در مسیر /etc/sudoers قرار دارد. بهترین و ایمنترین روش برای ویرایش این فایل استفاده از دستور visudo است. این دستور ویرایشگر vi را با دسترسی بالا برای شما باز میکند تا بتوانید فایل را ویرایش و ذخیره کنید. همچنین، فایل sudoers را قفل میکند تا هیچ کس دیگری نتواند آن را ویرایش کند.
بعد از اتمام ویرایش، این دستور فایل را برای یافتن خطاهای ساده بررسی میکند. این روشی ایمنتر برای ویرایش فایل sudo است نسبت به استفاده از هر ویرایشگر متنی سادهای. این فایل شامل بسیاری از پارامترهاست. شما میتوانید مشخص کنید کدام کاربران از کدام گروهها میتوانند چه دستوراتی را اجرا کنند. ما به سادگی قصد داریم با اضافه کردن موارد زیر در پایین، دسترسی خودمان را به sudo اعطا کنیم:
username ALL=(ALL) ALL //gives user "username" sudo access%wheel ALL=(ALL) ALL //Gives all users that belong to the wheel group sudo access
اکنون نام کاربری مشخص شده قادر خواهد بود از تمام امتیازات root استفاده کند. همچنین می توانید به کاربر یا گروه اجازه دهید به جای پارامتر ALL فقط به سرویس ها یا سرورهای خاص دسترسی sudo داشته باشد.
تفاوت بین sudo و su
وقتی به کار با لینوکس میپردازید، دو روش برای اجرای برنامههای مدیریتی وجود دارد. میتوانید با استفاده از دستور “su” به کاربر روت سوئیچ کنید یا از دستور “sudo” استفاده کنید. کدام یک را استفاده میکنید، بستگی به نوع لینوکسی که دارید دارد. بعضی از توزیع های لینوکس مانند مانند Fedora، Red Hat و openSuSE اجازه دسترسی به حساب روت را فعال میکنند، در حالی که بعضی دیگر مانند Ubuntu و Debian این امکان را ندارند. در این بلاگ به Ubuntu ارجاع میدهم.
دستور یونیکس su مخفف عبارت «substitute user» ،«super user» یا «switch user» است و به شما این امکان را می دهد که به عنوان root وارد سیستم شوید و هر کاری که می خواهید با سیستم انجام دهید.
Sudo مخفف «substitute user do» یا «super user do» است و به شما اجازه می دهد تا به طور موقت حساب کاربری فعلی خود را بالا ببرید تا از امتیازات root برخوردار شوید.
با «sudo» شما همچنان از حساب کاربری خود استفاده میکنید، اما با دسترسی روت، در حالی که در «su» واقعاً به حساب روت وارد شدهاید. همچنین، دسترسی روت در «sudo» فقط برای مدت زمان محدودی معتبر است. پس از انقضای آن زمان، باید دوباره رمز عبور خود را وارد کنید تا دسترسی روت را به دست آورید.
با استفاده از «sudo»، تقریباً همان کارهایی که با «su» میتوانید انجام دهید، را میتوانید اجرا کنید. برای استفاده از آن، فقط باید «sudo» را در ابتدای تمامی دستورات روت اضافه کنید. داشتن دسترسی کاربر روت میتواند خطرناک باشد، اما استفاده از sudo به جای su میتواند به شما در امنیت سیستم کمک کند. اگر از لینوکس استفاده میکنید و میخواهید اقدامات خود را به صورت امن انجام دهید، باید این دو دستور را بشناسید و درک کنید.
استفاده از دستورات sudo و su
هشدار: در اینجا باید به شما هشدار دهم که پیکربندی sudo برای اجازه دادن به یک کاربر برای انجام یک عملیات، معادل اعطای مجوزهای روت به آن کاربر است. به شما توصیه میشود قبل از ارائه قدرت sudo به یک کاربر، اطمینان حاصل کنید که این کار برای نیازهای امنیتی شما مناسب است.
استفاده از فرم اصلی sudo بسیار ساده است. تصور کنید که باید دستور dpkg را برای نصب نرمافزار جدید روی کامپیوتر خود اجرا کنید. اگر به عنوان کاربر عادی فقط دستورdpkg -i software.deb
را صادر کنید، یک پیام خطا دریافت خواهید کرد که به شما اطلاع میدهد که کاربر دسترسی مناسب برای اجرای این دستور را ندارد. این به این دلیل است که کاربران عادی به طور پیش فرض نمیتوانند برنامهها را در یک ماشین لینوکس نصب کنند. برای نصب یک برنامه روی یک ماشین لینوکس، باید دسترسی سوپرکاربر را داشته باشید. بنابراین، برای موفقیت در اجرای نصب، به جای آن دستورsudo dpkg -i software.deb
را صادر خواهید کرد.
اجازه دسترسی کاربر روت با استفاده از دستور sudo
در محیطهایی که امنیت یک نگرانی قابل توجه است، توصیه میکنم دسترسی به حساب کاربری و رمز عبور روت را محدود کنید. با استفاده از sudo، مدیران سیستم شما قادر خواهند بود برای کاربران خاصی (یا گروههای کاربری) فعال کردن دسترسی روت به یوزر در اوبونتو را انجام دهند. مهم این است که تمامی دستورات و آرگومانها به عنوان بخشی از پروتکل امنیتی و رفتار سازگاری شما ثبت خواهند شد. مطمئن شوید که سیاست امنیتی sudo خود را برای ثبت فعالیت پیکربندی کنید. شما میتوانید این کار را با استفاده از فایل/etc/sudoers
انجام دهید. درون فایل sudoers، گروههای کاربری خود و مجموعه دستورات خود را برای سادهتر و بررسی دسترسی به سرور با دستورات sudo پیکربندی کنید.
چگونگی ایجاد یک کاربر sudo در اوبونتو
دستور sudo به شما امکان میدهد از بخشی از کاربران عادی به طور معمول فقط برای کاربر روت دسترسی مدیریتی را به کاربران منظم بدهید. در زیر سادهترین روش ایجاد یک کاربر جدید در لینوکس با دسترسی sudo را به شما نشان میدهم – بدون نیاز به اصلاح فایل sudoers سرور خود. اگر فقط نیاز به پیکربندی sudo برای یک کاربر موجود دارید، به مرحله 3 بروید.
مراحل ایجاد یک کاربر جدید با دسترسی sudo:
۱. با حساب کاربری روت به سرور Ubuntu خود وارد شوید.
ssh root@server_ip_address
۲. از دستور «adduser» برای اضافه کردن یک کاربر جدید به سیستم استفاده کنید.
(مطمئن شوید که «asam» را با کاربری که میخواهید ایجاد کنید، جایگزین کنید – مگر اینکه بخواهید ما در حسابهای شما باشیم!)
adduser asam
رمز عبور جدید کاربر را در صفحه فرمان وارد کنید و تایید کنید. به شدت توصیه میشود که وقتی این کار را انجام میدهید، از یک رمز عبور امن استفاده کنید.
- رمز عبور را وارد کنید:
- رمز عبور جدید را دوباره وارد کنید:
- پسورد: رمز عبور با موفقیت به روز شد
دستورات را برای تنظیم اطلاعات کاربر جدید دنبال کنید. میتوانید تنظیمات پیش فرض را بپذیرید تا همه این اطلاعات را خالی بگذارید.
اطلاعات کاربری را وارد کنید:
تغییر اطلاعات کاربر برای نام کاربری:
(مقدار جدید را وارد کنید یا برای پیش فرض، ENTER را فشار دهید)
۳. از دستور «usermod» برای اضافه کردن کاربر به گروه sudo استفاده کنید.
usermod -aG sudo asam
به طور پیش فرض در Ubuntu، اعضای گروه sudo دسترسی sudo دارند.
۴. دسترسی sudo را در حساب کاربری جدید تست کنید.
از دستور su استفاده کنید تا به حساب کاربری جدید تغییر کنید.
su – username
به عنوان کاربر جدید، بررسی کنید که میتوانید از sudo با افزودن “sudo” در ابتدای دستوری که میخواهید با اجازه سوپرکاربری اجرا کنید، استفاده کنید.
sudo command_to_run
در اولین باری که از sudo در یک نشست استفاده میکنید، سیستم از شما رمز عبور حساب کاربری را درخواست خواهد کرد. رمز عبور را وارد کنید تا ادامه یابد.
خروجی:
[sudo] password for asam:
اگر کاربر (asam) به گروه صحیح اختصاص داده شده و شما رمز عبور را به درستی وارد کرده باشید، دستور صادر شده توسط sudo با دسترسی روت اجرا خواهد شد.
مراحل حذف یک کاربر sudo
وقتی asam از حساب کاربری استفاده کردید، شما میتوانید او را (من) از حساب کاربری حذف کنید، بدون حذف هیچ یک از فایلهای او، با این دستور روت:
deluser asam
اگر با حساب کاربری غیر روت دیگری که دسترسی sudo دارد وارد شده باشید، میتوانید به جای آن عبارت زیر را تایپ کنید:
sudo deluser asam
اگر ترجیح میدهید که دایرکتوری خانه asam حذف شود هنگامی که ” asam ” حذف میشود، میتوانید دستور زیر را به عنوان روت صادر کنید:
deluser --remove-home asam
اگر این دستور را به عنوان یک کاربر غیر روت با دسترسی sudo اجرا میکنید، به جای آن میتوانید تایپ کنید:
sudo deluser --remove-home asam
اگر قبلاً دسترسی sudo را برای کاربر حذف کردید و میخواهید خط مربوطه را دوباره حذف کنید، میتوانید با تایپ عبارت زیر آن را حذف کنید:
visudo
یا اگر شما یک کاربر غیر روت با دسترسی sudo هستید، میتوانید از این دستور استفاده کنید:
sudo visudo
root ALL=(ALL:ALL) ALL
derek ALL=(ALL:ALL) ALL # DELETE THIS LINE
این مرحله از جلوگیری میکند که یک کاربر جدید با همان نام به طور تصادفی دسترسی sudo داشته باشد.
چرا sudo کافی نیست؟
خوب، حالا که به شما مقدمهای مختصر در مورد su و sudo ارائه دادهام و شما باید ایدهای از این دستور داشته باشید و چقدر قدرتمند است. اما اکنون متاسفانه باید شما را ناامید کنم. ببینید، در حالی که sudo به شما یک روش «مناسب» برای مدیریت دسترسیهای مجازیت (PAM) ارائه میدهد، فرایند آن کارساز است و میتواند منجر به افزایش خطر در هنگام کنترل دسترسی در محیط شما شود، به خصوص اگر محیط شما بزرگ و متنوع باشد.
برای استفاده صحیح از sudo، نیاز به مدیران سیستم بسیار ماهر (و بسیار پردرآمد) است که وقت زیادی را صرف ساخت و توزیع فایلهای sudoers میکنند. sudo همچنین شما را مجبور به وابستگی به تخصص فردی مدیر سیستم خود میکند تا آن را به گونهای برنامهریزی و اجرا کند که «کمترین امتیازها» را فراهم کند.
راهحلهای مدیریت دسترسی مجازیت (PAM) Unix/Linux موجود در بازار امروز، جایگزینهای بسیار کارآمد و موثری برای sudo ارائه میدهند. با استفاده از این رویکردهای مدرن، میتوانید خطر تقلب داخلی را کاهش دهید، مطابقت با مقررات را بهبود بخشید و تلاش مورد نیاز برای مدیریت سرورهای خود را به شدت کاهش دهید.
۵ مشکل رایج در استفاده از دستور sudo
در اینجا 5 تا از مشکلاتی که sudo دارد را برایتان آورده ایم.
- sudo از مدیریت مؤثر و متمرکز برخوردار نیست، که باعث میشود مدیران سیستم وقت زیادی را برای ساخت و توزیع فایلهای سودو در سرور صرف کنند.
- sudo ریسک امنیتی را به وجود میآورد زیرا تحت کنترل فایلهای محلی است. مدیران امنیتی باید این فایلها را به درستی توزیع کنند. همچنین، فایل پیکربندی سودو به گونهای ذخیره میشود که مدیران محلی به راحتی تغییراتی اعمال کنند که یک ریسک امنیتی بزرگ است.
- sudo ممکن است مشکل تطبیق با استانداردها را به وجود آورد. بازرسان از فایلهای پیکربندی sudo توزیع شده راضی نیستند؛ زیرا از «static trust» استفاده میکنند. به همین دلیل، استفاده شما از سودو ممکن است باعث مشکلاتی در گذراندن بازرسیها شود.
- سازمانهایی که از sudo استفاده میکنند باید قادر باشند فایل را توزیع کنند، بنابراین یک روش توزیع خوب باید حفظ شود که منجر به هزینههای بیشتر برای سازمان شما خواهد شد.
- sudo به طور ذاتی قابلیت اتصال به احراز هویت چند عاملی (MFA) را به عنوان بخشی از فرآیند اعتبارسنجی کاربران مجاز را فراهم نمیکند.
بطور تئوری، sudo ابزاری قابل قبول است، اما نکات ضعف خود را دارد. من توصیه میکنم از یک سیستم مدیریت دسترسی مجاز خودکار استفاده کنید. راهحلهای مدیریت دسترسی مجاز Unix/Linux که در بازار امروز موجود است، جایگزینهای بسیار کارآمد و مؤثری برای سودو ارائه میدهند. با استفاده از یک سیستم PAM مناسب، شما قادر خواهید بود امنیت سرور Unix/Linux را به طور قابل توجهی بهبود بخشید، تطبیق با تجزیههای نظارتی را سادهتر نمایید و همچنین از طریق سادهسازی مدیریت، بهبودهای درز از طریق بهبود بهرهوری را تجربه کنید. مدیریت مناسب امتیاز کاربران به شما امکان میدهد تا کاربران را جدا کنید و تنها دسترسی مورد نیاز آنها را برای انجام وظایفشان به آنها ارائه دهید.
سخن آخر
دستور sudo به کاربران اجازه میدهد تا با استفاده از هویت کاربری خود دستورات را با دسترسی مدیریتی (root) اجرا کنند. با استفاده از sudo، کاربران میتوانند دستورات خاصی را با دسترسی Administrator اجرا کنند، بدون اینکه نیاز به ورود به حساب کاربری root داشته باشند. این مکانیزم امنیتی برای کنترل دسترسی کاربران به منابع سیستمی استفاده میشود.
در مقابل، دستور su (به معنای تغییر کاربر) به کاربران اجازه میدهد که به حساب کاربری root یا حساب دیگری با دسترسی مدیریتی تغییر کنند. با استفاده از دستور su، کاربران وارد یک حساب کاربری دیگر میشوند و تمام دستورات را با دسترسی root اجرا میکنند. این نوع تغییر کاربر ممکن است به دلایل امنیتی محدود شود و فقط به کاربرانی که اجازه دسترسی به حساب root را دارند محدود شود.
بنابراین، تفاوت اصلی بین sudo و su در این است که sudo به کاربران اجازه میدهد تا بدون نیاز به ورود به حساب root دستورات با دسترسی مدیریتی را اجرا کنند، در حالی که su به کاربران امکان تغییر به حساب root را میدهد. در مورد استفاده sudo و su، بهتر است از sudo استفاده شود زیرا به جای به اشتراک گذاشتن رمزعبور حساب root، کاربران میتوانند دستورات مورد نیاز را با استفاده از هویت خود اجرا کنند و این میتواند امنیت سیستم را بهبود بخشد.
ما تمامی موارد مربوط به sudo و su را در اختیار شما قرار دادیم و تفاوت های آن ها را هم بیان کردیم. در صورتی که سوالی در این زمینه داشتید، با ما در قسمت نظرات به اشتراک بگذارید.
سوالات متداول:
آیا استفاده از دستور sudo برای تمام دستورات مناسب است؟
خیر، استفاده از دستور sudo برای تمام دستورات مناسب نیست. به عنوان اصلیترین دلیل، استفاده از دستور sudo برای دستوراتی که نیاز به مجوز خاصی ندارند، توصیه نمیشود و میتواند ریسک امنیتی ایجاد کند. در صورت امکان، بهتر است دستورات عمومی را با حساب کاربری استاندارد اجرا کرده و فقط برای دستورات خاصی که نیاز به مجوز اداری دارند، از sudo استفاده کنید.