پیکربندی sudo در Arch Linux
آشنایی کامل با sudo، پیکربندی فایل sudoers، مدیریت دسترسیهای مدیریتی و امنیت در Arch Linux.
sudo ابزاری است که به کاربران عادی اجازه میدهد دستورات را با امتیازات مدیر اجرا کنند، بدون نیاز به ورود بهعنوان root. در این آموزش، نصب، پیکربندی و بهترین روشهای امنیتی sudo را مرور میکنیم.
sudo چیست؟
sudo مخفف substitute user do (یا بهاشتباه superuser do) است. این ابزار به کاربران اجازه میدهد دستورات مشخصی را بهعنوان root یا کاربر دیگر اجرا کنند. مزایا نسبت به su:
- لاگگذاری کامل از همهٔ دستورات
- کنترل دقیق دسترسیها (چه کاربری، چه دستوری)
- عدم نیاز به اشتراکگذاری رمز root
- محدودیت زمانی (پس از چند دقیقه، رمز دوباره پرسیده میشود)
نصب sudo
اگر در زمان نصب Arch، sudo را نصب نکردهاید:
# نصب بهعنوان root
pacman -S sudoپیکربندی پایه
فعالسازی دسترسی برای گروه wheel
در Arch، گروه wheel سنتی برای کاربران مدیریتی است. برای فعالسازی:
# ویرایش فایل sudoers با visudo
EDITOR=nano visudoخط زیر را پیدا کرده و علامت # ابتدای آن را حذف کنید:
%wheel ALL=(ALL:ALL) ALLسپس کاربران مدیریتی را به گروه wheel اضافه کنید:
usermod -aG wheel usernameهمیشه از visudo استفاده کنید
فایل /etc/sudoers را هرگز با ویرایشگر معمولی ویرایش نکنید. visudo سینتکس فایل را بررسی میکند و اگر خطایی باشد، از ذخیرهسازی جلوگیری میکند. اگر فایل sudoers خراب شود، ممکن است دسترسی sudo را کاملاً از دست بدهید.
بدون رمز برای گروه wheel (غیر امن)
اگر میخواهید کاربران wheel بدون پرسیدن رمز sudo را اجرا کنند:
%wheel ALL=(ALL:ALL) NOPASSWD: ALLNOPASSWD خطرناک است
تنظیم NOPASSWD: ALL امنیت سیستم را بهشدت تضعیف میکند. اگر حساب کاربری هک شود، مهاجم بهراحتی به root دسترسی پیدا میکند. فقط در محیطهای ایزوله مانند containerها استفاده کنید.
ساختار فایل sudoers
user host=(runas:group) commandsتوضیح:
user— کاربر یا گروه (با پیشوند%)host— هاستی که قاعده روی آن اعمال میشود (معمولاًALL)(runas:group)— کاربر و گروهی که دستور بهعنوان آن اجرا میشودcommands— فهرست دستورات (معمولاًALL)
نمونهها
# کاربر alice میتواند همهٔ دستورات را اجرا کند
alice ALL=(ALL:ALL) ALL
# گروه developers میتواند فقط systemctl restart را اجرا کند
%developers ALL=(ALL) /bin/systemctl restart
# کاربر bob بدون رمز میتواند apt را اجرا کند
bob ALL=(root) NOPASSWD: /usr/bin/pacman
# گروه admin میتواند بهعنوان کاربر www-data دستور اجرا کند
%admin ALL=(www-data) ALLفایلهای /etc/sudoers.d/
بهجای ویرایش فایل اصلی sudoers، توصیه میشود قواعد سفارشی را در /etc/sudoers.d/ بسازید:
sudo nano /etc/sudoers.d/alicealice ALL=(ALL) ALLاین فایل باید پرمیشن ۴۴۰ داشته باشد:
sudo chmod 440 /etc/sudoers.d/aliceمزیت sudoers.d
- پیکربندی ماژولار و سازمانیافته
- آسانتر برای اتوماسیون (Ansible, Puppet)
- جلوگیری از تداخل با فایل اصلی sudoers
استفاده از sudo
اجرای دستور
# اجرای یک دستور بهعنوان root
sudo pacman -Syu
# اجرای چند دستور
sudo sh -c "command1 && command2"
# اجرای دستور بهعنوان کاربر دیگر
sudo -u www-data php script.phpباز کردن shell بهعنوان root
# باز کردن shell تعاملی بهعنوان root
sudo -i
# باز کردن shell با حفظ محیط کاربر
sudo -sتازهسازی تایماوت
# تمدید زمان sudo بدون اجرای دستور
sudo -vلیست دسترسیها
# نمایش دسترسیهای فعلی کاربر
sudo -l
# نمایش دسترسیهای کاربر دیگر (بهعنوان root)
sudo -l -U usernameپیکربندی پیشرفته
تنظیم تایماوت رمز
بهطور پیشفرض، sudo به مدت ۵ دقیقه رمز را بهخاطر میسپارد. میتوانید این زمان را تغییر دهید:
Defaults timestamp_timeout=10برای غیرفعالکردن کامل بهخاطر سپاری:
Defaults timestamp_timeout=0اضافه کردن PATH
اگر دستورات در مسیر غیراستانداردی هستند:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"لاگگذاری
برای ارسال لاگهای sudo به فایل جداگانه:
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_outputتنظیمات به ازای کاربر
# فقط برای کاربر alice
Defaults:alice timestamp_timeout=20
# فقط برای گروه developers
Defaults:%developers !requirettyامنیت sudo
نکات امنیتی
- هرگز
NOPASSWD: ALLرا برای کاربران عادی فعال نکنید - دسترسیها را به حداقل برسانید (اصل least privilege)
- از مسیرهای مطلق برای دستورات استفاده کنید (مثلاً
/usr/bin/pacman) - لاگها را بهطور منظم بررسی کنید
- هرگز فایل sudoers را با ویرایشگر معمولی ویرایش نکنید
خطر دستورات خطرناک
برخی دستورات میتوانند امنیت sudo را دور بزنند. مثلاً اگر به کاربر دسترسی به sudo vim بدهید، او میتواند با :!command در vim هر دستوری را بهعنوان root اجرا کند. راهحل: از sudoedit استفاده کنید:
alice ALL=(root) sudoedit /etc/somefileمحدود کردن پارامترها
# فقط دستور pacman -Syu مجاز است
alice ALL=(root) /usr/bin/pacman -Syu
# کاربر میتواند هر سرویسی را restart کند، اما نه stop
bob ALL=(root) /bin/systemctl restart *بررسی لاگهای sudo
# مشاهدهٔ لاگهای sudo (اگر logfile تنظیم شده)
sudo cat /var/log/sudo.log
# یا از journal
journalctl -t sudoنمونهٔ لاگ:
Jun 30 14:23:01 myarch alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ;
COMMAND=/usr/bin/pacman -Syuبازیابی sudo خراب شده
اگر فایل sudoers را خراب کردید و دسترسی sudo را از دست دادید:
# ۱. با su به root وارد شوید (نیاز به رمز root)
su -
# ۲. فایل را با visudo ویرایش کنید
visudo
# یا اگر visudo کار نکرد
nano /etc/sudoersپشتیبانگیری از sudoers
قبل از هر تغییر، از فایل sudoers نسخهٔ پشتیبان تهیه کنید:
sudo cp /etc/sudoers /etc/sudoers.bakخلاصه
در این آموزش:
- sudo را نصب و پیکربندی کردید
- گروه wheel را برای دسترسی مدیریتی فعال کردید
- ساختار فایل sudoers را یاد گرفتید
- با
/etc/sudoers.d/کار کردید - تنظیمات پیشرفته و امنیتی را مرور کردید
sudo ابزار قدرتمندی است اما مسئولیت زیادی دارد. همیشه اصل least privilege را رعایت کنید.
در آموزش بعدی، با پیکربندی SSH آشنا میشوید.
پرسشهای رایج
چرا sudo رمز من نمیپرسد؟
ممکن است NOPASSWD برای کاربر یا گروه شما فعال باشد. با sudo -l بررسی کنید چه قواعدی اعمال میشود.
چگونه یک کاربر را به sudoers اضافه کنم؟
سادهترین راه: او را به گروه wheel اضافه کنید:
sudo usermod -aG wheel usernameاگر قواعد پیشفرض sudoers فعال باشد، کاربر پس از لاگاوت و لاگین مجدد میتواند sudo را استفاده کند.
آیا میتوانم sudo را برای کاربر خاص غیرفعال کنم؟
بله، با اضافه کردن خط زیر به /etc/sudoers.d/username:
username ALL=(ALL) ALL
Defaults:username !authenticateیا بهسادگی او را از گروه wheel حذف کنید.
این صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.