کمتر کاربر سیستم عامل گنو/لینوکس را می توان یافت که هر روز از دستورات sudo و su در ترمینال استفاده نکند. به طور کلی، sudo فقط یک دستور با سطح دسترسی ریشه (Root Privilege) را اجرا میکند در صورتی که دستور su اقدام به ساخت یک Shell به صورت موقتی با سطح دسترسی های مد نظر ایجاد می کند و این در حالی است که هم sudo و هم su، هر دو امتیازات روت را به طرق مختلف به کاربرها منتقل می کنند. ولی واقعا تفاوت این دو در چیست؟
کاربران لینوکس به خصوص آن هایی که معمولاً اقدام به نصب پکیج، مدیریت سیستم و ... می کنند با دستورات sudo و su زیاد سر و کار دارند. اگر به تازگی به جمع کاربران لینوکس اضافه شدهاید، احتمالاً از قابلیتهای sudo و su شگفت زده میشوید. sudo و su سطوح دسترسی روت -بالاترین سطح دسترسی در لینوکس- را به ۲ روش مختلف تأمین می کنند.
البته قبل از این که به بیان تفاوتهای این دو بپردازیم بد نیست پیش از هر چیز با مفهوم Root User یا «کاربر روت» بیشتر آشنا شویم. روت یوزر در لینوکس بالاترین حد دسترسی را دارد و میتواند هر کاری که میخواهد در سیستم انجام دهد. پرمیشن ها یا «مجوزهای» کاربر روت به غیر از اجازه نصب یا حذف یک بسته یا برنامه توسط کاربر معمولی، میتوانند خود نیز به عنوان یک لایه ی امنیتی در نظر گرفته شوند.
مهمترین چیزی که باید به آن دقت کرد این است که عملکرد این دو دستور در سیستم عاملهای مبتنی بر لینوکس با یکدیگر متفاوت است. بیشتر چیزهایی که در این جا در موردشان صحبت میکنیم در توزیع Ubuntu و سایر توزیع های برگرفته از آن قابل کاربرد هستند (به عبارت دیگر، ممکن است عملکرد آنها در توزیعهای دیگر لینوکس کمی متفاوت باشد.)
تفاوت اصلی میان sudo و su
دستور su برای سوپر یوزر یا «کاربر ریشه» است. این دستور در لینوکس بدون نیاز به آپشن (پارامتر) خاصی اجرا میشود. کاربر فقط کافی است پسورد اکانت ریشه را وارد کند اما دستور su در ترمینال به شما اجازه میدهد که به اکانت کاربران دیگر دسترسی داشته باشید. به همین دلیل است که su برای کاربرانی که قرار است کاری را به آن ها تفویض کنیم بسیار مناسب است. برای استفاده از su فقط کافی است آن را بعد از نام کاربری اکانت تایپ کنید. مثلاً su sokanacademy. بعد پسورد اکانت را وارد میکنید. در صورت نیاز، میتوانید از Shell روت خارج شوید و برای این کار فقط کافی است دستور exit را در ترمینال تایپ کنید. به طور کلی میتوان گفت که su یک Shell فوری دیگر را با امتیاز کاربر هدف آغاز میکند.
از طرف دیگر sudo یک دستور با مجوز ریشه اجرا میکند. زمانی که یک کاربر یک دستور را با sudo اجرا میکند، باید پسورد اکانت کنونی را برای اجرای آن به صورت کاربر ریشه، وارد کند. sudo از فایل config برای تشخیص پرمیشن ها و میزان دسترسی کاربرهای مختلف استفاده میکند.
با مقایسه این دو میتوان به این نتیجه رسید که sudo به کاربر اجازه میدهد که از پسورد اکانت کاربر برای اجرای دستورهای سیستم استفاده کند ولی su کاربر را مجبور میکند که پسورد روت را با دیگر کاربران به اشتراک بگذارد. به علاوه این که sudo صرفا برای اجرای یک دستور در آن واحد به کار می آید.
استفاده از sudo و su در توزیعهای لینوکسی
توزیع اوبونتو اولین توزیع از لینوکس بود که دستور sudo را به صورت پیش فرض استفاده میکرد. یعنی زمانی که فردی Ubuntu را نصب کند، اکانت ریشه بدون هیچ گونه پسوردی ایجاد میشود. بنابراین خود فرد باید پسورد را برای اکانت ریشه جهت لاگین کردن به صورت روت، تعریف کند. در Ubuntu و بسیاری از توزیعهای دیگر مبتنی بر دبیان، کاربر مجبور است فقط و فقط یک پسورد را به یاد بسپارد. به این صورت Ubuntu کاربر را تشویق میکند که به عنوان کاربر روت وارد نشود. ولی در توزیعهای دیگر مانند فدورا، کاربر باید پسوردهای مختلف برای ریشه و اکانت های کاربری ایجاد کند. برخی از کاربران لینوکس استفاده از ترکیب sudo su را ترجیح میدهند که کاربردهای زیادی دارد. اول sudo از شما پسورد میخواهد. در صورتی که پسورد وارد شود، دستور بعدی به عنوان کاربر ریشه اجرا خواهد شد.
کاربران لینوکس به خصوص آن هایی که معمولاً اقدام به نصب پکیج، مدیریت سیستم و ... می کنند با دستورات sudo و su زیاد سر و کار دارند. اگر به تازگی به جمع کاربران لینوکس اضافه شدهاید، احتمالاً از قابلیتهای sudo و su شگفت زده میشوید. sudo و su سطوح دسترسی روت -بالاترین سطح دسترسی در لینوکس- را به ۲ روش مختلف تأمین می کنند.
البته قبل از این که به بیان تفاوتهای این دو بپردازیم بد نیست پیش از هر چیز با مفهوم Root User یا «کاربر روت» بیشتر آشنا شویم. روت یوزر در لینوکس بالاترین حد دسترسی را دارد و میتواند هر کاری که میخواهد در سیستم انجام دهد. پرمیشن ها یا «مجوزهای» کاربر روت به غیر از اجازه نصب یا حذف یک بسته یا برنامه توسط کاربر معمولی، میتوانند خود نیز به عنوان یک لایه ی امنیتی در نظر گرفته شوند.
مهمترین چیزی که باید به آن دقت کرد این است که عملکرد این دو دستور در سیستم عاملهای مبتنی بر لینوکس با یکدیگر متفاوت است. بیشتر چیزهایی که در این جا در موردشان صحبت میکنیم در توزیع Ubuntu و سایر توزیع های برگرفته از آن قابل کاربرد هستند (به عبارت دیگر، ممکن است عملکرد آنها در توزیعهای دیگر لینوکس کمی متفاوت باشد.)
تفاوت اصلی میان sudo و su
دستور su برای سوپر یوزر یا «کاربر ریشه» است. این دستور در لینوکس بدون نیاز به آپشن (پارامتر) خاصی اجرا میشود. کاربر فقط کافی است پسورد اکانت ریشه را وارد کند اما دستور su در ترمینال به شما اجازه میدهد که به اکانت کاربران دیگر دسترسی داشته باشید. به همین دلیل است که su برای کاربرانی که قرار است کاری را به آن ها تفویض کنیم بسیار مناسب است. برای استفاده از su فقط کافی است آن را بعد از نام کاربری اکانت تایپ کنید. مثلاً su sokanacademy. بعد پسورد اکانت را وارد میکنید. در صورت نیاز، میتوانید از Shell روت خارج شوید و برای این کار فقط کافی است دستور exit را در ترمینال تایپ کنید. به طور کلی میتوان گفت که su یک Shell فوری دیگر را با امتیاز کاربر هدف آغاز میکند.
از طرف دیگر sudo یک دستور با مجوز ریشه اجرا میکند. زمانی که یک کاربر یک دستور را با sudo اجرا میکند، باید پسورد اکانت کنونی را برای اجرای آن به صورت کاربر ریشه، وارد کند. sudo از فایل config برای تشخیص پرمیشن ها و میزان دسترسی کاربرهای مختلف استفاده میکند.
با مقایسه این دو میتوان به این نتیجه رسید که sudo به کاربر اجازه میدهد که از پسورد اکانت کاربر برای اجرای دستورهای سیستم استفاده کند ولی su کاربر را مجبور میکند که پسورد روت را با دیگر کاربران به اشتراک بگذارد. به علاوه این که sudo صرفا برای اجرای یک دستور در آن واحد به کار می آید.
استفاده از sudo و su در توزیعهای لینوکسی
توزیع اوبونتو اولین توزیع از لینوکس بود که دستور sudo را به صورت پیش فرض استفاده میکرد. یعنی زمانی که فردی Ubuntu را نصب کند، اکانت ریشه بدون هیچ گونه پسوردی ایجاد میشود. بنابراین خود فرد باید پسورد را برای اکانت ریشه جهت لاگین کردن به صورت روت، تعریف کند. در Ubuntu و بسیاری از توزیعهای دیگر مبتنی بر دبیان، کاربر مجبور است فقط و فقط یک پسورد را به یاد بسپارد. به این صورت Ubuntu کاربر را تشویق میکند که به عنوان کاربر روت وارد نشود. ولی در توزیعهای دیگر مانند فدورا، کاربر باید پسوردهای مختلف برای ریشه و اکانت های کاربری ایجاد کند. برخی از کاربران لینوکس استفاده از ترکیب sudo su را ترجیح میدهند که کاربردهای زیادی دارد. اول sudo از شما پسورد میخواهد. در صورتی که پسورد وارد شود، دستور بعدی به عنوان کاربر ریشه اجرا خواهد شد.