آشنایی با تفاوت‌های مابین sudo و su در لینوکس

آشنایی با تفاوت‌های مابین sudo و su در لینوکس

کمتر کاربر سیستم‌عامل گنو/لینوکس را می‌توان یافت که هر روز از دستورات 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 را به صورت پیش‌فرض استفاده می‌کرد؛ یعنی زمانی که فردی این سیستم‌عامل را نصب کند، اکانت روت بدون هیچ‌گونه پسوردی ایجاد می‌شود. بنابراین خود فرد باید پسورد را برای اکانت روت جهت لاگین کردن به صورت روت تعریف کند.

در اوبونتو و بسیاری از توزیع‌های دیگر مبتنی بر دبیان، کاربر مجبور است فقط و فقط یک پسورد را به یاد بسپارد. به این صورت اوبونتو کاربر را تشویق می‌کند که به عنوان کاربر روت وارد نشود ولی در توزیع‌های دیگر مانند فدورا، کاربر باید پسوردهای مختلف برای اکانت روت و اکانت‌های کاربری دیگر ایجاد کند. 

منبع