فصل هفتم — قسمت شصت و نهم 🐧
پیاده سازی su و sudo
————————————
در این قسمت دو مفهوم خیلی مهم برای مدیریت دسترسی کاربران داریم:
su
↓
تغییر کاربر
sudo
↓
اجرای یک دستور با دسترسی کاربر دیگر، معمولاً root
——————
1️⃣ su چیست؟
su مخفف Switch User است.
یعنی از یک User وارد User دیگری شویم.
مثلاً:
su ali
→ وارد حساب ali میشوی و Password او را میخواهد.
برای رفتن به root:
su -
→ وارد root میشوی و محیط Login مربوط به root را هم دریافت میکنی.
🧠 تفاوت مهم:
su
→ تغییر User
sudo
→ اجرای یک دستور با دسترسی User دیگر
—————————
2️⃣ sudo چیست؟
sudo یعنی:
مثلاً کاربر ali کاربر معمولی است:
whoami
ali
ولی میخواهد یک Package نصب کند:
sudo dnf install nginx
دستور با دسترسی root اجرا میشود، ولی خود User تبدیل به root نمیشود.
مثلاً:
sudo systemctl restart sshd
فقط همان دستور با دسترسی مناسب اجرا میشود.
————————
3️⃣ چرا sudo بهتر از استفاده دائمی از root است؟
فرض کن:
ali → User معمولی
فقط زمانی که نیاز دارد:
sudo command
اجرا میکند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.
————————
4️⃣ sudoers چیست؟
قوانین sudo در این قسمت مدیریت میشوند:
/etc/sudoers
اما ❌ نباید معمولاً با nano مستقیماً فایل را ویرایش کنیم.
از:
visudo
استفاده میکنیم.
visudo فایل sudoers را با بررسی Syntax ویرایش میکند.
———————-
5️⃣ ساختار یک قانون sudoers
مثلاً:
admin1 ALL=(ALL) NOPASSWD: ALL
یعنی:
admin1
↓
نام کاربر
ALL
↓
از هر Host
(ALL)
↓
میتواند به عنوان Userهای مجاز اجرا کند
NOPASSWD
↓
Password نمیخواهد
ALL
↓
تمام دستورات
پس:
admin1
⚠️ این دسترسی بسیار قدرتمند است و عملاً تقریباً معادل دسترسی کامل مدیریتی است.
——————
6️⃣ یک مثال محدودتر
مثلاً فقط اجازه بدهیم ali سرویس SSH را Restart کند:
ali ALL=(root) /usr/bin/systemctl restart sshd
یعنی:
ali
↓
sudo
↓
فقط systemctl restart sshd
↓
با دسترسی root
کاربر نمیتواند با همین Rule مثلاً این را اجرا کند:
sudo dnf install nginx
————-
7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر backup فقط اجازه داشته باشد Backup را اجرا کند:
backup ALL=(root) /usr/local/bin/backup.sh
پس:
sudo /usr/local/bin/backup.sh
مجاز است، اما مثلاً:
sudo rm -rf /important
مجاز نیست.
🧠 این همان اصل Least Privilege است:
————-
8️⃣ مثال برای dnf
Rule خودت:
admin2 ALL=(root) /usr/bin/dnf update
یعنی admin2 اجازه دارد:
sudo /usr/bin/dnf update
را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر dnf متفاوت باشد.
با:
which dnf
مسیر واقعی را پیدا کن.
مثلاً:
/usr/bin/dnf
و همان را در sudoers بنویس.
—————
9️⃣ wheel در Red Hat
در خانواده Red Hat:
RHEL
Fedora
AlmaLinux
Rocky Linux
گروه معروف مدیریتی:
wheel
است.
مثلاً:
usermod -aG wheel ali
یعنی ali را عضو wheel کن.
بعد اگر sudoers سیستم اجازه داده باشد، ali میتواند از sudo استفاده کند.
————-
🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
sudo
است.
مثلاً:
usermod -aG sudo ali
پیاده سازی su و sudo
————————————
در این قسمت دو مفهوم خیلی مهم برای مدیریت دسترسی کاربران داریم:
su
↓
تغییر کاربر
sudo
↓
اجرای یک دستور با دسترسی کاربر دیگر، معمولاً root
——————
1️⃣ su چیست؟
su مخفف Switch User است.
یعنی از یک User وارد User دیگری شویم.
مثلاً:
su ali
→ وارد حساب ali میشوی و Password او را میخواهد.
برای رفتن به root:
su -
→ وارد root میشوی و محیط Login مربوط به root را هم دریافت میکنی.
🧠 تفاوت مهم:
su
→ تغییر User
sudo
→ اجرای یک دستور با دسترسی User دیگر
—————————
2️⃣ sudo چیست؟
sudo یعنی:
این دستور را با دسترسی مدیریتی اجرا کن.
مثلاً کاربر ali کاربر معمولی است:
whoami
ali
ولی میخواهد یک Package نصب کند:
sudo dnf install nginx
دستور با دسترسی root اجرا میشود، ولی خود User تبدیل به root نمیشود.
مثلاً:
sudo systemctl restart sshd
فقط همان دستور با دسترسی مناسب اجرا میشود.
————————
3️⃣ چرا sudo بهتر از استفاده دائمی از root است؟
فرض کن:
ali → User معمولی
فقط زمانی که نیاز دارد:
sudo command
اجرا میکند.
بنابراین لازم نیست دائماً داخل root باشی.
این موضوع از نظر امنیت و Audit هم بهتر است.
————————
4️⃣ sudoers چیست؟
قوانین sudo در این قسمت مدیریت میشوند:
/etc/sudoers
اما ❌ نباید معمولاً با nano مستقیماً فایل را ویرایش کنیم.
از:
visudo
استفاده میکنیم.
visudo فایل sudoers را با بررسی Syntax ویرایش میکند.
———————-
5️⃣ ساختار یک قانون sudoers
مثلاً:
admin1 ALL=(ALL) NOPASSWD: ALL
یعنی:
admin1
↓
نام کاربر
ALL
↓
از هر Host
(ALL)
↓
میتواند به عنوان Userهای مجاز اجرا کند
NOPASSWD
↓
Password نمیخواهد
ALL
↓
تمام دستورات
پس:
admin1
میتواند تمام دستورات sudo را بدون درخواست Password اجرا کند.
⚠️ این دسترسی بسیار قدرتمند است و عملاً تقریباً معادل دسترسی کامل مدیریتی است.
——————
6️⃣ یک مثال محدودتر
مثلاً فقط اجازه بدهیم ali سرویس SSH را Restart کند:
ali ALL=(root) /usr/bin/systemctl restart sshd
یعنی:
ali
↓
sudo
↓
فقط systemctl restart sshd
↓
با دسترسی root
کاربر نمیتواند با همین Rule مثلاً این را اجرا کند:
sudo dnf install nginx
————-
7️⃣ یک مثال کاربردی دیگر
فرض کنیم کاربر backup فقط اجازه داشته باشد Backup را اجرا کند:
backup ALL=(root) /usr/local/bin/backup.sh
پس:
sudo /usr/local/bin/backup.sh
مجاز است، اما مثلاً:
sudo rm -rf /important
مجاز نیست.
🧠 این همان اصل Least Privilege است:
هر User فقط به اندازهای که لازم دارد دسترسی داشته باشد.
————-
8️⃣ مثال برای dnf
Rule خودت:
admin2 ALL=(root) /usr/bin/dnf update
یعنی admin2 اجازه دارد:
sudo /usr/bin/dnf update
را با دسترسی root اجرا کند.
اما یک نکته مهم:
⚠️ مسیر Binary را دقیق بررسی کن
ممکن است در سیستم مسیر dnf متفاوت باشد.
با:
which dnf
مسیر واقعی را پیدا کن.
مثلاً:
/usr/bin/dnf
و همان را در sudoers بنویس.
—————
9️⃣ wheel در Red Hat
در خانواده Red Hat:
RHEL
Fedora
AlmaLinux
Rocky Linux
گروه معروف مدیریتی:
wheel
است.
مثلاً:
usermod -aG wheel ali
یعنی ali را عضو wheel کن.
بعد اگر sudoers سیستم اجازه داده باشد، ali میتواند از sudo استفاده کند.
————-
🔟 در Debian/Ubuntu
در Debian و Ubuntu معمولاً گروه:
sudo
است.
مثلاً:
usermod -aG sudo ali