به صورت ساده، sudo راهیه برای اجرای یک یا چند دستور با اجازه مدیر سیستم با ریشه یا سایر کاربران را اجرا کرد. با رمز ریشه یا رمز کاربر مورد نظر، موقتا یا تا پایان عمر سیتم، برای یک ترمینال یا همه ترمینال ها، برای یک کاربر یا یک گروه از کاربرها.
دستور Sudo راهی امن و راهت رو فراهم میکنه تا دسترسیها رو مثل پله برقی تنظیم کنیم، بطور مثال به یه کاربر معمولی اجازه بدیم تا یک یا جند دستور کاربردی رو اجرا کنه.وقتی شما میخواین تا بعصی از کاربران یه سری از قدمهای مدیر سیستم رو انجام بدن،بدون اینکه بهشون اجازه دسترسی کل سیستم رو بدین. با sudo شما کاربرا رو کنترل میکنین و میگین کی چیکار کنه.
SUDO به مدیر سیستم اجازه میده تا به یک کاربر معمولی یا به گروهی از کاربران اختیار نمایندگی بده و توانایی اجرای دستورات رو به عنوان کاربر ریشه داشته باشن.
SUDO جایگزینی برای SU برای اجرایدستورات به صورت ریشه است.بر خلاف su که یک شل ریشه اجرا میکنه که اجازه میده تااجازه دسترسی اجرای فراتر از تمام دستورات را میدهد، SUDO دسترسی موقتی را برای اجرای یک دستور اعطا میکند.
با فعال کردن دسترسی ریشه فقط در زمانی که لازمه، sudo کاهش احتمال خرابی در اثر اشتباهات طایپی یا یه باگ که باعث میشه سیستم خراب کنه رو موجب میشه.
sudo همچنین دستوری رو به عنوان کاربر دیگه ای انجام بده،بعلاوه همه دستورات اجرا شده و دسترسی های ناکام رو بسته به روابط امنیتی ثبت و کتب کنه.
سیستمهای گنو/لینوکس بر اساس دسترسیهای مدیر بنا شده.بدون دسترسیهای بلند و بالای ریشه، خیلی از دستورات اجرا نمیشن.
برای توزیعهایی مثل ردهت، افزایش دسترسی کاربر یعنی تغییر کاربر به کاربر ریشه با دستور su. برای توزیع های دیگه مثل اوبونتو، انتحاب برای یک مسیر متفاوت است. مسیر sudo. با بهره گیری از سیستم sudo مدیرکنترل بسیار بیشتری بر آنچه که در یک سیستم انجام میشود دارد. مزیت استفاده از دستورsudo ثبت اتفاقات انجام شده است.آمار سیستمهای مبتنی بر ردهت در var/log/secure/ ثبت میشه در حالی که در سیستمهای مبتنی بر دبیان در var/log/auth.log ذخیره میشود.
بطور مثال اجازه بدیم یه یوزر خاصیه دسترسی بدیم تا دستور خاص رو اجرا کنه،بدون اینکه مجبور باشن رمز sudoشون رو وارد کنن. sudo میتونه اینکار رو براتون انجام بده.شما حتی میتونین یوزیر رو وارد گروه کنیم، تا کنترل کنیم که کی چه کاری رو راحتتر انجام بده.
خب الان که من علاقه مند شدم. چطور sudo رو در سیستم مدیریت یا تنظیم کنم؟ چواب ساده است... sudoers. در پرونده etc/sudoers/ شما همه چیز مورد نیاز برای کنترل sudo را دارید.
خب تمام حرفهای بالا این معنی رو میده:
sudo راهیه برای امنیت بیشتر سیستم.
و این خیلی مهمه.
یک کلمه احتیاط!
تغییرات در پرونده sudoers باید با احتیاط انجام شود.
شما هرگز نیابد این پرونده رو با یه ویرایشگر استاندارد (مثل nano یا vi
)ویرایش کنید. در عوض باید با visudo اون رو ویرایش کنیم. این ابزار پرونده
رو تجزیه میکنه تا ببینه که مشکلی هست. همین که تغییرات رو توی پرونده
انجام دادین،برای اطمینان میتونین با دستور sudo visudo -c رو اجرا کنین
تا برای بار دوم پرونده رو تایید کنه. visudo حتما باید مشکلی رو پیدا کنه و
بلا فاصله قبل از اینکه ترمینال رو ببندین مشکل رو برطرف کنین. در غیر اینصورت تمام دستوراتی که نیاز به sudo دارن قفل شدن و شما دیگه نمیتونین کاری بکنین(مخصوصا اگه کاربر ریشه root رو غیر فعال کرده باشن). یه بار دیگه امتحانش کنین تا هیچ مشکلی نباشه.
- sudo باینری setuid ریشه است، یعنی اینکه هر کاربری دستوری رو از طریق sudo اجرا میکنه،به اونها دسترسی ریشه داده شده.به همین خاطر، شما باید مراقب باشین که دارین با پرونده sudoers چیکار میکنین و توش چی مینویسین.
- دستور sudo پرونده sudoers رو به ترتیب از بالا به پایین میخونه. به عبارت دیگه اخرین خط در پرونده sudoers تنظیمات قبلی رو با جدیدا جایگزین یا مخلوط میکنه. پس شما جتما باید مواظب باشن خط به خطش چی کار انجام میده.
- دستور sudo شامل یه سری پیشفرضهاست که میتونن با پرونده sudoers تنظیم بشن. برای دیدن لیست این پیش فرضها دستور sudo -L رو اجرا کنید.
خب حالا که شما به طور واضح متوجه شدید اهمیت ویرایش etc/sudoers/ با visudo شدید، بزارید ببینیم که چیکار میتونیم بکینم.
فایل:
فقط چند قسمت از پرونده sudoers رو نیاز دارید تا راجع بهشون بخونید.
- پیشفرضها: متغیرهای پیشفرض برای sudo ( یادآوری، sudo -L دوست شماست).
- اسم مستعار، شما میتونید برای کاربران، هاست و دستورات نام مستعار مشخص کنید.
- امتیازهای کاربر: شما در این قسمت میتونید امتیازکاربران رو تعیین کنید.
-
گروهها: در این قسمت شما گروهها رو مشخص میکنید.
فرم کلی امتیازها به صورت زیر است:
user host=(accounts) commands
user : اکانتی که به اون امتیاز میدین. البته میتونید جاش گروه تعریف شده در سیستم رو جاش بزارین.
host : میزبان سیستمی که حساب کاربر میتونه از اون دستور sudo رو اجرا کنه.(sudoers میتونه بین سیستمها مشترک باشه)
accounts : کاربرایی میتونن که برای این اکانت دستور sudo رو اجرا کنه.
commands : برنامههایی که کاربر میتونه اجرا کنه.
اگه شما دستور sudo visudo رو اجرا کنین، پرونده پیشفرض etc/sudoers/ باز خواهد شد که فقط یه امتیاز داره و اونم اینه:
root ALL=(ALL:ALL) ALL
که بر اساس این توضیحات اینمعنا رو میده که:
کاربر root یا ریشه، از هر میزبانی، از هر حساب دیگهای ، هر دستوری رو اجرا کنه.
اسم مستعار:
قبل از اینکه شروع به اضافه کردن امتیاز و دیترسی کاربران به sudoers کنیم این مهمه که بدونیم چطور نام مشتعار برای کار میکند. مستعارها برای sudoers به شکلهای زیر تعریف میشود.
- User_Alias : نام مستعار برای گروهی از کاربران.
- Host_Alias : نام مستعار برای گروهی از میزبانها.
- Runas_Alias : نام مستعار برای گروهی از کاربران با UIDهاشون.
- Cmnd_Alias : نام مستعار برای گروهی از دستورات.
یه نام مستعار معمولی برای کاربران به صورت زیر است:
به طور مثال محمد و علی و رضا و حمید جزء کاربران کامپیوتر هستند و شما میخواهین بجز حمید بقیه جزء این گروه باشند.
User_Alias pwch = ali , muhammad , reza
شما میتوانید همچنین از گروههای بزگ توی کامپیتر هم استفاده کنین:
User_Alias pwch = %users , !hamid
علامت ! به معنای نه، یا "غیر از" است.
و علامت ٪ مشخص کننده یک گروه سیستمی است.
به طور مثال در همین سیستم فقط علی و رضا میتونن پسوردهای همه رو عوض کنن و ما اسمشو chpw میزاریم:
User_Alias CHPW = ali , reza
CHPW ALL = (ALL) /usr/sbin/chpasswd
در خط بالا توضیح داده شده که گروه chpw یعنی علی و رضا میتونن روی هر هاستی دستور chpasswd رو اجرا و پسورد همه رو عض کنن البته بجز root و به عنوان هر کاربری.
chpw ALL = (ALL) /usr/sbin/chpasswd
نام مستعار برای دستورات:
Cmnd_Alias PASS = /usr/sbin/chpasswd
در نهایت دستور بالا به پایین تبدیل میشود:
CHPW ALL = (ALL) PASS
توجه:
تمام نامهای مستعار باید با جروف بزرگ باشند.نامها باید با حرف بزرگ شروع و میتونن شامل اعداد و کاراکتر "_"باشند.
همچنین میتونین چند نام مستعار تو یه خط تعریف کنین:
User_Alias CHPW1 = ali , reza : User_Alias CHPW2 = ali , muhammad
بطور مثال گروه CHPW2 میتونن از دستور مونت استفاده کنن:
CHPW ALL = (ALL) /usr/sbin/mount
البته بگم اموزشه خیلی زیاده منم فرصت کافی رو واسه کامل کردنش در حال حاضر ندارم. در اینده یعنی بعد امتحانات کاملش میکنم.
منابع:
man یا همون منوئل توی سیستم خودتون