انتقل إلى المحتوى الرئيسي

الفصل 9.2 - تكوين sudo

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم sudo ودوره
  • تكوين sudo بشكل آمن
  • إنشاء الأسماء المستعارة والمجموعات
  • تقييد الأوامر المسموح بها
  • تسجيل إجراءات sudo
  • فهم أفضل الممارسات

ما هو sudo؟​

sudo (Super User DO) يسمح بتنفيذ الأوامر بامتيازات مستخدم آخر (عادةً root).

المزايا:

  • لا حاجة لحساب root
  • تسجيل الإجراءات
  • تحكم دقيق
  • أكثر أمانًا من su

ملف /etc/sudoers​

التحرير الآمن​

# لا تقم أبدًا بالتحرير مباشرة!
# استخدم visudo (يتحقق من بناء الجملة)
sudo visudo

# أو التحرير مع التحقق
sudo visudo -f /etc/sudoers

visudo:

  • يتحقق من بناء الجملة قبل الحفظ
  • يتجنب أخطاء التكوين
  • يقفل الملف أثناء التحرير

التنسيق الأساسي​

# /etc/sudoers
# التنسيق: المستخدم host=(runas) الأوامر

# مثال بسيط
user1 ALL=(ALL:ALL) ALL

# مع NOPASSWD
user1 ALL=(ALL:ALL) NOPASSWD: ALL

# أوامر محددة
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

بناء الجملة التفصيلي​

المستخدمون​

# مستخدم محدد
user1 ALL=(ALL:ALL) ALL

# مجموعة (بادئة %)
%developers ALL=(ALL:ALL) ALL

# أسماء مستعارة للمستخدمين
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(ALL:ALL) ALL

Hosts​

# جميع hosts
user1 ALL=(ALL:ALL) ALL

# Host محدد
user1 server1=(ALL:ALL) ALL

# أسماء مستعارة للـ hosts
Host_Alias SERVERS = server1, server2, server3
user1 SERVERS=(ALL:ALL) ALL

Runas (التنفيذ كـ)​

# كـ root
user1 ALL=(ALL:ALL) ALL

# كمستخدم محدد
user1 ALL=(www-data:ALL) ALL

# كأي مستخدم
user1 ALL=(ALL:ALL) ALL

# أسماء مستعارة لـ runas
Runas_Alias WEBSERVERS = www-data, nginx
user1 ALL=(WEBSERVERS:ALL) ALL

الأوامر​

# جميع الأوامر
user1 ALL=(ALL:ALL) ALL

# أوامر محددة
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# دليل (جميع الأوامر داخله)
user1 ALL=(ALL:ALL) /usr/local/bin/

# مع أو بدون كلمة مرور
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl
user1 ALL=(ALL:ALL) PASSWD: /usr/bin/docker

الأسماء المستعارة​

User_Alias​

# تجميع المستخدمين
User_Alias ADMINS = user1, user2
User_Alias DEVELOPERS = dev1, dev2, dev3
User_Alias DEVOPS = ops1, ops2

# الاستخدام
ADMINS ALL=(ALL:ALL) ALL
DEVELOPERS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker

Host_Alias​

# تجميع hosts
Host_Alias SERVERS = server1, server2, 192.168.1.0/24
Host_Alias WORKSTATIONS = ws1, ws2

# الاستخدام
user1 SERVERS=(ALL:ALL) ALL

Cmnd_Alias​

# تجميع الأوامر
Cmnd_Alias NETWORKING = /sbin/ifconfig, /sbin/route, /sbin/ip
Cmnd_Alias SERVICES = /usr/bin/systemctl start, /usr/bin/systemctl stop
Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/yum

# الاستخدام
user1 ALL=(ALL:ALL) NETWORKING, SERVICES

Runas_Alias​

# تجميع المستخدمين runas
Runas_Alias WEBSERVERS = www-data, nginx
Runas_Alias DATABASES = mysql, postgres

# الاستخدام
user1 ALL=(WEBSERVERS:ALL) /usr/bin/systemctl

أمثلة عملية​

مدير كامل​

# وصول كامل
User_Alias ADMINS = admin1, admin2
ADMINS ALL=(ALL:ALL) ALL

مطور محدود​

# أوامر التطوير فقط
User_Alias DEVS = dev1, dev2
DEVS ALL=(ALL:ALL) /usr/bin/git, /usr/bin/docker, /usr/bin/npm

مشرف مواقع​

# إدارة الويب فقط
user1 ALL=(www-data:ALL) /usr/bin/systemctl restart apache2, \
/usr/bin/systemctl reload nginx

مشغل نظام​

# أوامر النظام بدون كلمة مرور
User_Alias OPS = ops1, ops2
Cmnd_Alias SYSTEM = /usr/bin/systemctl, /usr/bin/journalctl
OPS ALL=(ALL:ALL) NOPASSWD: SYSTEM

التسجيل​

التكوين​

# /etc/sudoers
# تسجيل جميع الأوامر
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output

# أو مع syslog
Defaults syslog=auth

عرض السجلات​

# سجلات النظام
sudo grep sudo /var/log/auth.log # Ubuntu/Debian
sudo grep sudo /var/log/secure # Red Hat/CentOS

# ملف مخصص
sudo tail -f /var/log/sudo.log

# عرض أوامر مستخدم
sudo grep "user1" /var/log/auth.log | grep sudo

أفضل الممارسات​

الأمان​

# 1. تقييد الأوامر
user1 ALL=(ALL:ALL) /usr/bin/systemctl, /usr/bin/docker

# 2. تجنب NOPASSWD إلا عند الضرورة
user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status

# 3. استخدام الأسماء المستعارة
User_Alias ADMINS = user1, user2
ADMINS ALL=(ALL:ALL) ALL

# 4. التسجيل
Defaults logfile=/var/log/sudo.log

# 5. مهلة مناسبة
Defaults timestamp_timeout=15 # 15 دقيقة

الصيانة​

# التحقق من التكوين
sudo visudo -c

# اختبار الأذونات
sudo -l # عرض الأذونات الحالية

# عرض السجل
sudo grep sudo /var/log/auth.log

الملفات المضمنة​

/etc/sudoers.d/​

# إنشاء ملف منفصل
sudo visudo -f /etc/sudoers.d/user1

# المحتوى
user1 ALL=(ALL:ALL) /usr/bin/systemctl

# المزايا:
# - التنظيم
# - سهل الإدارة
# - لا تعارض مع sudoers الرئيسي

ملاحظة: الملفات في /etc/sudoers.d/ يتم تضمينها تلقائيًا.


ملخص​

في هذا الفصل، تعلمت:

sudo: تنفيذ الأوامر بامتيازات مرتفعة
visudo: محرر آمن مع التحقق من بناء الجملة
بناء الجملة: المستخدم host=(runas) الأوامر
الأسماء المستعارة: User_Alias، Host_Alias، Cmnd_Alias، Runas_Alias
التسجيل: سجلات إجراءات sudo
الممارسة: تقييد الأوامر، استخدام الأسماء المستعارة، التسجيل


الخطوات التالية​

الفصل 9.3: جدار الحماية (iptables، firewalld، ufw)
الفصل 9.4: التدقيق ومراقبة الأمان


تم إنشاء الفصل في: ديسمبر 2024