sudo چیست؟

تقریبا هر آموزشی که درباره لینوکس مطالعه می‌کنید با دستورات خط فرمان همراه است که در ترمینال وارد می‌شوند؛ این موضوع به دلایلی مانند قدمت بیشتر رابط خط فرمان در لینوکس نسب به رابط گرافیکی، قدرت بی‌نظیر آن، تمایل بیشتر کاربران لینوکس به استفاده از خط فرمان و … است. و اما در بین دستورات تقریبا جایی نیست که sudo نباشد! اما این دستور چیست، چرا هست و چه عملی انجام می‌دهد بحثی است که در ادامه به آن می‌پردازیم.

در لینوکس کارهایی مانند نصب برنامه‌ها و تغییرات در شاخه‌ها و فایل‌های اصلی لینوکس فقط در دسترس کاربر روت (root) است زیرا این اعمال روی سیستم اثر می‌گذارند و باید از دسترسی غیر مجاز محافظت شوند. پس برای انجام آن‌ها باید با کاربر root وارد شد.

به‌صورت پبش‌فرض تقریبا تمام توزیع‌ها، گروه کاربران ادمین (اسم گروه ادمین چیزی است که برای فهم بهتر موضوع در اینجا می‌گویم و در هر توزیع نام خاص خود را دارد یا اینکه به‌گونه‌ای دیگر پیاده‌سازی می‌شود) دارند که جدا از کاربر root است و در هنگام نصب توزیع، اطلاعات اولین کاربر (از این گروه) را از شما می‌گیرد و این کاربر را برای شما ایجاد می‌کند تا با آن به سیستم وارد شوید. این گروه کاربران، دسترسی‌های خاص خودشان را دارند که نیازهای یک استفاده عادی از سیستم را براورده می‌کند اما برای انجام اعمالی که سطح دسترسی بیشتری می‌خواهند باید با کاربر روت وارد شوید. اعمالی مانند نصب برنامه‌ها یا حتی ساخت یک کاربر دیگر در گروه ادمین.

برای ورود با کاربر root در رابط گرافیکی که باید از همان صفحه ورود (لاگین اسکرین) میزکار خود استفاده کنید و در ترمینال نیز از دستور su استفاده می‌کنیم.

در هر دو مورد باید رمز کاربر روت را بدانید و وارد کنید تا دسترسی روت به شما داده شود. رمز کاربر روت در اکثر توزیع‌ها در هنگام نصب از شما دریافت و ست می‌شود اما در توزیعی مانند ابونتو باید بعد از نصب به روشی که در ادامه می‌گویم ست شود.

در هر صورت با ورود به کاربر روت می‌توانید هر کاری که می‌خواهید در سیستم انجام دهید! اما تمام این اعمال تقریبا روی کاربر روت انجام می‌شود! یعنی اینکه مثلا اگر برنامه‌ای نصب کردید، این برنامه برای کاربر روت نصب شده است. خب اگر بخواهید این اعمال روی کاربر خودتان انجام شود چه؟! و یا اینکه نخواهید رمز روت (که حفظ و نگهداری آن بسیار حیاتی است) برای هر کاری وارد کنید چه باید بکنید؟!

دستور sudo دقیقا برای رفع نیازهای بالا طراحی شده است. وقتی sudo را قبل از هر دستوری بنویسید آن دستور در هنگام اجرا دسترسی روت دارد. همچنین نیاز نیست که رمز روت خود را وارد کنید؛ کافیست رمز کاربری خود را برای اجرای آن دستور با sudo وارد کنید!

البته دستور su را نیز می‌توان به‌گونه‌ای (با آرگومان‌های مناسب) وارد کرد تا دستور برای کاربر خاصی انجام شود؛ اما جدای از استفاده سخت‌تر نسبت به sudo، در هر صورت رمز کاربری روت را باید وارد کنید.

در اکثر توزیع‌ها دستور sudo به‌صورت پیش‌فرض نصب شده است و کاربرانی که در گروه ادمین (معمولا نام گروه wheel است) هستند می‌توانند این دستور را با رمز کاربری خود اجرا کنند.

خب یک مثال. دستور زیر را در ابونتو وارد می‌کنم:

apt-get update

و اما خروجی:

E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

مشاهده می‌کنید که اجرای آن با خطا روبرو می‌شود و می‌گوید باید دسترسی روت داشته باشید!

خب حالا دستور را به‌صورت زیر با sudo وارد می‌کنم.

sudo apt-get update

بعد از وارد کردن دستور رمز کاربری خود را وارد می‌کنم. سپس دستور انجام  و مخازن برنامه‌ها به‌روز می‌شود.

اجرای دستور ls ~ یک مثال ساده برای نشان دادن تفاوت ورود به روت و دستور sudo است که با وارد کردن آن بعد از ورود به کاربر روت، شاخه خانگی کاربر روت لیست می‌شود اما با اجرای دستور sudo ls ~ با کاربری خودتان، شاخه خانگی خودتان لیست می‌شود.

مشابه دستور sudo در میزکارها نیز وجود دارد تا کاربران در محیط گرافیکی اعمالی که نیاز به دسترسی روت دارند را انجام دهند؛ مانند kdesudo برای میزکار کی دی ای و gksudo برای میزکارهای برپایه gtk مانند گنوم. در این برنامه‌ها برای اجرای دستورات با دسترسی روت، کادر محاوری به صورت گرافیکی به شما نشان داده می‌شود تا رمز خود را وارد کنید؛ مانند زمانی که در ابونتو دکمه نصب یک برنامه را در مرکز برنامه‌ها میزنید و کادر برای دریافت رمز نمایش داده می‌شود.

این هم عکسی از سایت andrehonsberg.com در رابطه با قدرت دستور sudo!

sudo

می‌بینید که اول درخواست می‌کنه یک ساندویچ براش درست کنه و جواب میده که خودت درست کن! اما دفعه بعد اول حرفش سودو می‌گه و اون هم میگه باشه!

و این هم روش ست کردن رمز کاربر root در ابونتو بعد از نصب (بعد از اجرای دستور زیر رمز مورد نظرتون رو وارد کنید).

sudo passwd