الفصل 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