sudo در Debian
آموزش نصب، پیکربندی و امنسازی sudo در Debian: دادن دسترسی محدود به کاربران، فایل sudoers و رفع خطاهای رایج.
sudo به کاربران عادی اجازه میدهد دستوراتی را با دسترسی کاربر دیگر (معمولاً root) اجرا کنند، بدون آنکه رمز root را بدانند. در این آموزش با نصب، پیکربندی و امنسازی sudo در Debian آشنا میشوید.
sudo چیست؟
sudo (SuperUser DO) ابزاری است که به مدیر سیستم اجازه میدهد دسترسیهای مدیریتی را بهصورت دقیق و کنترلشده به کاربران عادی بدهد. مزایای sudo نسبت به ورود مستقیم با root:
- ردیابی: تمام دستورات sudo در لاگ ثبت میشوند
- کنترل دقیق: میتوان دستورات مجاز را محدود کرد
- امنیت: نیازی به اشتراک رمز root نیست
- محدودیت زمانی: رمز پس از مدتی منقضی میشود
sudo در برابر su
su به شما اجازه میدهد بهطور کامل به کاربر root تبدیل شوید (با تایپ رمز root). sudo فقط یک دستور را با root اجرا میکند (با تایپ رمز خود کاربر). sudo امنتر و قابل ردیابیتر است.
نصب sudo
در Debian، sudo همیشه بهطور پیشفرض نصب نیست (مثلاً در نصب حداقلی سرور). برای نصب:
# ابتدا با su به root تبدیل شوید
su -
# نصب sudo
apt install sudo
# خروج از root
exitافزودن کاربر به گروه sudo
در Debian، اعضای گروه sudo بهطور پیشفرض دسترسی کامل به sudo دارند:
# افزودن کاربر به گروه sudo
sudo usermod -aG sudo maryam
# یا با adduser
sudo adduser maryam sudoپس از این کار، کاربر باید خارج و دوباره وارد شود.
نصبگر Debian این کار را خودکار میکند
در نصبگر Debian 12، اگر رمز root را خالی بگذارید، اولین کاربر ساختهشده بهصورت خودکار به گروه sudo اضافه میشود. این روش پیشنهادی است؛ زیرا حساب root غیرفعال میشود و امنیت سیستم افزایش مییابد.
استفادهٔ پایه از sudo
# اجرای یک دستور با دسترسی root
sudo apt update
# اجرای شل تعاملی با root
sudo -i
# اجرای دستور بهعنوان کاربر دیگر
sudo -u www-data ls /var/www
# اجرای شل بهعنوان کاربر دیگر
sudo -iu postgres
# مشاهدهٔ دسترسیهای sudo خود
sudo -l
# تمدید زمان sudo (بدون پرسش مجدد رمز)
sudo -vفایل sudoers
فایل /etc/sudoers پیکربندی اصلی sudo است. هرگز آن را مستقیم با ویرایشگر باز نکنید؛ همیشه از visudo استفاده کنید:
# ویرایش امن فایل sudoers
sudo visudoهرگز sudoers را مستقیم ویرایش نکنید
اگر در فایل /etc/sudoers خطای نحوی باشد، ممکن است دسترسی sudo خود را کاملاً از دست بدهید. visudo پیش از ذخیره، فایل را اعتبارسنجی میکند. اگر خطایی باشد، ذخیره نمیکند.
ساختار فایل sudoers
خط اصلی فایل sudoers به این شکل است:
user host=(runas) command| فیلد | توضیح |
|---|---|
| user | نام کاربر یا گروه (با %) |
| host | نام میزبان (معمولاً ALL) |
| runas | کاربری که دستور بهعنوان او اجرا میشود |
| command | دستور مجاز (ALL یعنی همه) |
مثالهای رایج
# کاربر maryam میتواند همهٔ دستورات را اجرا کند
maryam ALL=(ALL:ALL) ALL
# اعضای گروه sudo میتوانند همهٔ دستورات را اجرا کنند
%sudo ALL=(ALL:ALL) ALL
# کاربر ali فقط میتواند apt را اجرا کند
ali ALL=(root) /usr/bin/apt
# کاربر ali میتواند apt را بدون رمز اجرا کند
ali ALL=(root) NOPASSWD: /usr/bin/apt
# گروه webadmin میتواند سرویس apache را مدیریت کند
%webadmin ALL=(root) /bin/systemctl restart apache2فایلهای sudoers.d
برای پیکربندیهای اضافی، بهتر است از فایلهای جداگانه در /etc/sudoers.d/ استفاده کنید:
# ساخت فایل برای یک کاربر یا گروه
sudo visudo -f /etc/sudoers.d/developers
# محتوا:
# گروه developers میتواند docker را اجرا کند
%developers ALL=(root) /usr/bin/docker, /usr/bin/docker-compose# فایل اصلی sudoers این خط را دارد که فایلهای sudoers.d را شامل میشود:
# @includedir /etc/sudoers.dهر کاربر یک فایل
بهترین روش، ساختن یک فایل جداگانه در /etc/sudoers.d/ برای هر کاربر یا گروه است. این کار مدیریت را ساده میکند و در صورت بروز مشکل، فقط همان فایل را حذف میکنید.
امنسازی sudo
محدودکردن دستورات
# کاربر deploy فقط میتواند systemctl و journalctl را اجرا کند
deploy ALL=(root) /bin/systemctl, /bin/journalctlرمز بعد از مدت زمان خاص منقضی شود
# پیشفرض: 5 دقیقه
Defaults timestamp_timeout=5
# برای ایمنی بیشتر: 2 دقیقه
Defaults timestamp_timeout=2
# برای همیشه پرسیدن رمز در هر دستور
Defaults timestamp_timeout=0نمایش پیام هشدار
# نمایش پیام در هر بار اجرای sudo
Defaults lecture=always
Defaults lecture_file=/etc/sudo.lectureecho "این سیستم تحت نظارت است. تمام دستورات ثبت میشوند." | sudo tee /etc/sudo.lectureلاگگذاری sudo
تمام دستورات sudo بهطور پیشفرض در /var/log/auth.log ثبت میشوند:
# مشاهدهٔ تمام دستورات sudo
sudo grep sudo /var/log/auth.log
# یا با journalctl
journalctl -t sudo
# یا
journalctl -g sudoخطاهای رایج
۱. "user is not in the sudoers file"
sudo apt update
[sudo] password for maryam:
maryam is not in the sudoers file. This incident will be reported.راهحل: کاربر را به گروه sudo اضافه کنید. اما برای این کار، باید بهنوعی به root دسترسی داشته باشید:
# اگر رمز root را دارید
su -
usermod -aG sudo maryam
exit
# اگر نه، باید از طریق recovery mode یا live USB بوت کنید
# و در chroot، کاربر را به گروه sudo اضافه کنید۲. "sudo: unable to resolve host"
sudo: unable to resolve host debian-pc: Name or service not knownراهحل: نام میزبان را به /etc/hosts اضافه کنید:
echo "127.0.1.1 $(hostname)" | sudo tee -a /etc/hosts۳. "sudo: no tty present and no askpass program specified"
این خطا معمولاً در اسکریپتهای cron یا SSH بدون tty رخ میدهد. راهحل: در فایل sudoers، برای آن کاربر گزینهٔ NOPASSWD را تنظیم کنید:
# /etc/sudoers.d/backup
backup ALL=(root) NOPASSWD: /usr/local/bin/backup.sh۴. sudo قفل شده است
اگر اشتباهاً کاربر خود را از گروه sudo حذف کردید و رمز root هم ندارید:
# بوت به recovery mode از منوی GRUB
# انتخاب "root - Drop to root shell prompt"
mount -o remount,rw /
usermod -aG sudo your-username
rebootهمیشه رمز root یا یک کاربر sudo دیگر داشته باشید
برای جلوگیری از قفل شدن کامل، همیشه یا رمز root را تنظیم کنید یا حداقل دو کاربر با دسترسی sudo داشته باشید.
خلاصه و مرحلهٔ بعد
sudo ابزار قدرتمندی برای دادن دسترسیهای مدیریتی محدود و قابل ردیابی به کاربران است. در Debian، اضافهکردن کاربر به گروه sudo سادهترین راه است. برای کنترل دقیقتر، از فایلهای /etc/sudoers.d/ با visudo استفاده کنید.
بهعنوان گام بعدی:
- آموزش مدیریت کاربران را برای افزودن و حذف کاربران ببینید
- آموزش SSH را برای ورود از راه دور بخوانید
- آموزش نصب سرور را برای نصب اولیه مرور کنید
این صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.