</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

پیکربندی 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: ALL

NOPASSWD خطرناک است

تنظیم 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/alice
alice 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 حذف کنید.

اشتراک‌گذاری:

این صفحه در تاریخ ۹ تیر ۱۴۰۵ به‌روزرسانی شده است.