sudo در Gentoo — اجرای دستورات مدیریتی با امتیاز root
آموزش کامل sudo در Gentoo: نصب، پیکربندی با visudo، گروه wheel، NOPASSWD، sudo timeout، doas جایگزین و خطاهای رایج.
دستور sudo (Superuser DO) به یک کاربر عادی اجازه میدهد دستوری را با امتیازات root (یا کاربر دیگر) اجرا کند، بدون آنکه رمز root را بداند یا بهطور دائم به root تبدیل شود. این لایهٔ امنیتی مزایای زیادی دارد: حسابرسی بهتر، کنترل دسترسی دقیق، محدودسازی دستورات مجاز و کاهش خطر اشتباهات تصادفی. در Gentoo، sudo با بستهٔ app-admin/sudo فراهم است و گروه wheel بهطور پیشفرض اجازهٔ استفاده از آن را دارد.
sudo چیست و چرا بهجای su؟
دستور قدیمی su به شما اجازه میدهد با واردکردن رمز root بهطور کامل به root تبدیل شوید. این روش چند مشکل دارد: باید رمز root را به همه بدهید، کنترلی روی اینکه چه کسی چه دستوری اجرا میکند وجود ندارد و ردپای ضعیفی باقی میماند.
| ویژگی | su | sudo |
|---|---|---|
| رمز لازم | رمز root | رمز خود کاربر |
| دامنه | کل نشست | یک دستور |
| حسابرسی | ضعیف | قوی (/var/log/auth.log) |
| کنترل دسترسی | همهیاهیچ | دقیق (per-command, per-user) |
| انقضای رمز | دائمی | تایماوت قابل تنظیم |
نصب sudo
# نصب بسته sudo
emerge --ask app-admin/sudo
# خروجی:
# [ebuild N ] app-admin/sudo-1.9.15_p5 USE="..."
# Would you like to merge these packages? [Yes/No]: yپس از نصب، فایل پیکربندی در /etc/sudoers قرار دارد. هرگز این فایل را با ویرایشگر معمولی (nano, vim) مستقیماً ویرایش نکنید؛ یک خطای نحوی میتواند شما را برای همیشه از sudo محروم کند.
پیکربندی با visudo
دستور visudo فایل /etc/sudoers را در یک ویرایشگر باز میکند و پس از خروج، نحوی فایل را بررسی میکند. اگر خطایی باشد، از شما میپرسد که آیا میخواهید آن را اصلاح کنید:
visudoویرایشگر پیشفرض vi است. برای تغییر آن به nano:
EDITOR=nano visudo
# یا تنظیم دائمی
echo 'EDITOR="/usr/bin/nano"' >> /etc/env.d/99editor
env-update && source /etc/profileمهمترین خط در فایل sudoers، خط مربوط به گروه wheel است. این خط بهطور پیشفرض کامنت شده است:
# /etc/sudoers
# حذف کامنت از خط زیر تا اعضای wheel بتوانند sudo کنند
%wheel ALL=(ALL:ALL) ALL
# یا نسخه بدون رمز عبور (خطرناکتر):
# %wheel ALL=(ALL:ALL) NOPASSWD: ALLمعنای این خط:
| بخش | معنی |
|---|---|
%wheel | اعضای گروه wheel |
ALL | روی همه میزبانها |
(ALL:ALL) | میتواند بهعنوان همه کاربران/گروهها اجرا شود |
ALL | همه دستورات مجاز است |
چرا wheel؟
گروه wheel در BSD و Gentoo/RedHat سابقهای طولانی دارد؛ نام آن از اصطلاح Big Wheel (شخص مهم) گرفته شده است. اعضای این گروه بهطور سنتی دسترسی مدیریتی دارند. در Gentoo، کاربرانی که در wheel هستند میتوانند هم su و هم sudo کنند (اگر sudoers اجازه دهد).
استفاده از sudo
# اجرای یک دستور بهعنوان root
sudo emerge --ask sys-apps/htop
# باز کردن shell بهعنوان root (شبیه su -)
sudo -i
# اعلان به root# تبدیل میشود و HOME=/root میشود
# اجرای دستور بهعنوان کاربر دیگر
sudo -u ali whoami
# خروجی:
# ali
# مشاهده دستورات مجاز برای کاربر فعلی
sudo -l
# خروجی:
# User ali may run the following commands on gentoo:
# (ALL : ALL) ALL
# تمدید تایماوت بدون اجرای دستور
sudo -v
# مشاهده دستورات قبلی sudo
sudo -k # پاک کردن تایماوتتنظیمات پیشرفته sudoers
مثالهای کاربردی برای فایل /etc/sudoers یا /etc/sudoers.d/:
# دستور خاص بدون رمز عبور (برای اسکریپتها)
ali ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
# مجاز بودن فقط چند دستور
bob ALL=(root) /usr/bin/emerge, /usr/bin/eix-sync
# محدودیت به میزبان خاص
%admin gentoo-server=(ALL) ALL
# تایماوت کوتاهتر (دقیقه)
Defaults timestamp_timeout=5
# اجرای sudo از همان ترمینال فقط (نه piped)
Defaults !tty_tickets
# اضافهکردن لاگ سفارشی
Defaults logfile="/var/log/sudo.log"بهتر است تنظیمات سفارشی را در فایلهای جداگانهای در /etc/sudoers.d/ قرار دهید:
mkdir -p /etc/sudoers.d
echo "ali ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx" > /etc/sudoers.d/ali
chmod 440 /etc/sudoers.d/ali
visudo -c # بررسی نحوی همه فایلهاNOPASSWD خطرناک است
استفاده از NOPASSWD: ALL بهشدت خطرناک است: اگر حساب کاربری هک شود، مهاجم بدون نیاز به رمز دوم به دسترسی کامل root میرسد. فقط برای دستورات خاص و در محیطهای کنترلشده استفاده کنید. برای سرورهای تولیدی همیشه رمز عبور لازم است.
doas — جایگزین سبک sudo
بستهٔ doas (OpenBSD's doas) جایگزین سبکتری برای sudo است که در Gentoo نیز موجود است:
emerge --ask app-admin/doasپیکربندی در /etc/doas.conf:
# /etc/doas.conf
permit :wheel
permit nopass ali cmd /usr/bin/systemctl args restart nginxchmod 0400 /etc/doas.conf
doas emerge --ask htopچه زمانی doas؟
اگر فقط قابلیت پایهٔ sudo را نیاز دارید و گرامر پیچیدهٔ آن را دوست ندارید، doas سبکتر و سادهتر است. اما sudo ویژگیهای پیشرفتهتری مانند حسابرسی دقیق، logging مرکزی و مدیریت پیچیدهٔ دسترسی دارد.
خطاهای رایج
۱. user is not in the sudoers file
ali is not in the sudoers file. This incident will be reported.دلیل: کاربر در گروه wheel نیست یا خط wheel در sudoers کامنت شده است. راهحل:
# (بهعنوان root)
gpasswd -a ali wheel
# بررسی sudoers
visudo
# این خط باید از کامنت خارج باشد:
# %wheel ALL=(ALL:ALL) ALL۲. parse error در visudo
>>> /etc/sudoers: syntax error near line 42 <<<
What now? Options are:
(e)dit again
(x)it without saving
(Q)uit and save changes despite fatal errorدلیل: خطای نحوی. هرگز Q را انتخاب نکنید. همیشه e بزنید و خطا را اصلاح کنید، وگرنه sudo کاملاً غیرقابل استفاده میشود.
۳. sudo کند است (تأخیر چند ثانیهای)
دلیل: ناتوانی در حل hostname. راهحل:
# بررسی hostname
hostname
# افزودن به /etc/hosts
nano /etc/hosts
# 127.0.1.1 your-hostnameخلاصه و مرحله بعد
sudo لایهٔ امنیتی مهمی است که اجازه میدهد کاربران عادی دستورات مدیریتی را با حسابرسی و کنترل دقیق اجرا کنند. در Gentoo، نصب app-admin/sudo، فعالکردن خط %wheel در visudo و افزودن کاربر به گروه wheel کافی است. برای کاربردهای سادهتر، doas جایگزین سبکتری است.
برای ایجاد کاربران و گروهها به آموزش Users و برای دسترسی از راه دور به آموزش SSH مراجعه کنید.
این صفحه در تاریخ ۱ تیر ۱۴۰۵ بهروزرسانی شده است.