سایبریت

تفاوت su و sudo در لینوکس

برای بررسی تفاوت su و sudo در لینوکس باید بدانید که این دستورات چه کاری انجام می دهند:

su – از دستور su برای جابجایی به یک کاربر دیگر (Switch User) استفاده می شود، اما همچنین می توانید با اجرای دستور su بدون هیچ پارامتر به کاربر root بروید. دستور su پس از اجرا شدن از شما رمزعبور کاربر وارد شده را برای سوئیچ به محیط کاربری آن می خواهد.

su cybrit

sudo – دستور sudo برای اجرای یک دستور با امتیازات کاربر root است. اما برخلاف su، رمزعبور کاربر فعلی را از شما می خواهد. لازمه اجرای دستور sudo این است که نام کاربر باید در فایل sudoers باشد (یا یک گروهی که در فایل sudoers است). به طور پیش فرض، لینوکس رمز عبور شما را به مدت 15 دقیقه به خاطر می سپارد، بنابراین لازم نیست برای هر بار اجرای این دستور رمز عبور خود را تایپ کنید.

sudo ifconfig

bash – یک محیط متنی است که از آن برای تعامل با کامپیوتر استفاده می‌شود. شناخت تفاوت بین شل های لاگین، غیر لاگین و تعاملی و غیر تعاملی بسیار مهم است.

shell – شل یک مفسر خط فرمان (command-line) است که دسترسی به سرویس های سیستم عامل را امکان پذیر می‌کند. شل ها از رابط خط فرمان (CLI) یا رابط کاربری گرافیکی (GUI) استفاده می کنند. به طور خلاصه شل محیطی است که در آن می‌توانیم دستورات را اجرا کنیم.

انواع shell ها:

login shell: شل ورود به سیستم، شما را به عنوان یک کاربر مشخص وارد سیستم می کند که برای اینکار به نام کاربری و رمز عبور نیاز دارد. هنگامی که برای ورود به یک ترمینال مجازی کلیدهای ctrl + alt + F1 را می زنید، بعد از ورود موفقیت آمیز یک شل ورود به سیستم دریافت می کنید.

non-login shell: شلی که بدون ورود به سیستم اجرا می شود، و تنها برای کاربری است که در حال حاضر وارد سیستم شده است. هنگامی در محیط گرافیکی gnome یک ترمینال باز می کنید، آن یک شل غیر-ورود به سیستم است.

interactive shell: شل تعاملی یک شلی (login یا non-login) است که می توانید در آن دستورات را به صورت تعاملی تایپ یا متوقف کنید. برای مثال یک ترمینال gnome.

non-interactive shell: شل غیر-تعامی یک شل (فرعی) است که احتمالاً از یک فرآیند خودکار اجرا می شود. نه ورودی خواهید دید و نه خروجی.

مطالعه کنید
اتصال به شبکه وایرلس از طریق ترمینال لینوکس

برای بررسی اینکه آیا در شل login هستید یا نه دستور زیر را اجرا کنید:

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

تفاوت su و sudo در لینوکس

sudo su دستور sudo را به همراه su فراخوانی می کند. در اینجا Bash به عنوان شل interactive non-login نامیده می شود. بنابراین bash فقط فایل ‎.bashrc را اجرا می کند. می بینید که پس از تغییر به کاربر root هنوز در همان دایرکتوری هستید:

[email protected]:~$ sudo su
[email protected]:/home/user#

ترکیب sudo su که اغلب استفاده می شود به شرح است که ابتدا sudo از شما رمز عبور شما را می پرسد و اگر اجازه داشتید به عنوان یک کاربر super-user دستور بعدی (su) را فراخوانی می کند. از آنجا که su توسط امتیازات root فراخوانی می شود، نیازی به وارد کردن رمز ورود کاربر هدف نیست. بنابراین sudo su به شما امکان می دهد شل را به عنوان کاربر دیگر (از جمله کاربر root) باز کنید، اما درصورتی که در فایل ‎/etc/sudoers دسترسی لازم را داشته باشید.

sudo su -‎ این یک شل login است، بنابراین ‎/etc/profile, .profile و ‎.bashrc اجرا می شوند و شما خود را در دایرکتوری home کاربر root خواهید یافت.

sudo su -‎

sudo -i تقریباً مشابه sudo su -‎ است. گزینه ‎-i (شبیه ساز ورود) شل login را با توجه به پسورد موجود کاربر در دیتابیس اجرا می کند. این بدان معنی است که فایل های ورود به سیستم مانند ‎.profile، .bashrc یا ‎.login توسط شل خوانده و اجرا می شوند. پس محیط کاربر root را بدست می آورید.

sudo -i

sudo /bin/bash به این معنی است که شما sudo را به همراه دستور ‎/bin/bash فراخوانی می کنید. فایل ‎/bin/bash با عنوان شل non-login اجرا می شود بنابراین تمام فایلهای dot (فایل های مخفی) اجرا نمی شوند، اما خود bash فایل ‎.bashrc کاربر را اجرا می کند. پس محیط شما ثابت می ماند و دایرکتوری home شما root نخواهد بود. بنابراین شما دسترسی root دارید، اما در محیط کاربری خودتان هستید.

sudo /bin/bash

sudo -s پارامتر ‎$SHELL را می خواند و محتوا را اجرا می کند. اگر ‎$SHELL شامل ‎/bin/bash باشد، sudo /bin/bash را اجرا می کند. اگر می خواهید شل دیگری را به جای آنچه در فایل passwd تعریف شده است اجرا کنید، از گزینه ‎-s استفاده کنید. برای مثال، برای اجرای شل zsh با امتیازات کاربر root دستور زیر را اجرا کنید:

su -s /usr/bin/zsh

برای اطلاعات بیشتر در مورد فایل فایل sudoers مقاله اضافه کردن کاربر به گروه sudo را مطالعه کنید.

مطالعه کنید
آموزش اجرای برنامه های ویندوز در لینوکس

نتیجه گیری

تفاوت این دو دستور در این است که su به رمز ورود حساب کاربر هدف نیاز دارد و به شما امکان می دهد کاربر دیگری شوید و دستورات را با آن کاربر اجرا کنید. در حالی که sudo به رمز ورود کاربر فعلی نیاز دارد و به کاربر فعلی فقط برای دستور مشخص شده امتیاز root داده می شود و مزیت استفاده از آن این است که نیازی به اشتراک گذاشتن رمزعبور حساب کاربر root را ندارید.

بنابراین توصیه می شود هنگام انجام کارهایی که به امتیازات root نیاز دارند تنها از sudo استفاده کنید. با این کار به کاربر فعلی فقط برای دستور مشخص شده امتیاز root داده می شود. از طرف دیگر با su کاملاً به کاربر root تغییر می کنید و کل سیستم را در معرض تغییرات تصادفی قرار می دهد.

لینوکس استفاده از حساب کاربر root را پیشنهاد نمی‌کند زیرا ممکن است باعث ایجاد تغییرات ناخواسته در سطح سیستم شود و پیشنهاد می کند به جای آن از sudo استفاده کنید. به همین دلیل، در برخی از توزیع های لینوکس مانند اوبونتو، حساب کاربر root به دلایل امنیتی به طور پیش فرض غیرفعال هستند. این بدان معنی است که هیچ رمز عبوری برای root تنظیم نشده است و شما نمی توانید از su برای تغییر به root استفاده کنید. اما برای فعال کردن حساب کاربر root کافیست یک رمزعبور برای آن تعریف کنید:

sudo passwd root

و برای غیرفعال کردن رمز ورود حساب root از دستور زیر استفاده کنید:

sudo passwd -l root

به پایان آموزش تفاوت su و sudo در لینوکس رسیدیم. یادگیری لینوکس اولین قدم برای شروع تست نفوذ و هک قانونی است پس مطمئن شوید که قسمت‌های سری آموزش لینوکس برای هکرهای اخلاقی را نگاه کردید و اگر سؤالی دارید، در نظرات زیر بپرسید.

دانلود PDF مقاله
3+

دیدگاه‌ها (0)

  • بخش دیدگاه محیط تعامل میان ما و شما است
  • سوالات، پیشنهادات و انتقادات خود را با ما در میان بگذارید
  • شما در بیان نظر خود آزاد هستید و تمامی کامنت ها منتشر می‌شوند، به جز کامنت های تکراری!

*
*