Sudo & Least Privilege في Linux: منح أقل صلاحية ممكنة

في أمن Linux، أكبر المخاطر غالبًا تأتي من الصلاحيات الزائدة. لذلك مبدأ Least Privilege أساسي في أي بيئة احترافية.

في هذا الدرس ستتعلم كيف تستخدم sudo بطريقة آمنة وتمنح أقل صلاحية ممكنة.

ما هو sudo ولماذا نستخدمه بدل root دائمًا؟

  • يسمح بتنفيذ أوامر إدارية محددة بدون تسجيل دخول root مباشر
  • يسجل العمليات الإدارية لسهولة المراجعة
  • يدعم سياسات دقيقة حسب المستخدم والمجموعة والأمر

مبدأ Least Privilege في Linux

  • امنح فقط الصلاحية المطلوبة للمهمة
  • قلل مدة واستخدام الصلاحيات العالية
  • راجع الصلاحيات دوريًا واحذف غير الضروري

فحص صلاحيات sudo الحالية

sudo -l
id
groups

هذا يوضح الأوامر المسموح بها ومجموعات المستخدم.

إدارة ملف sudoers بشكل آمن عبر visudo

sudo visudo
تحذير: لا تعدل /etc/sudoers بمحرر عادي مباشرة. استخدم visudo دائمًا.

صيغة قواعد sudoers الأساسية

user  host=(runas)  command

مثال:

rachid ALL=(ALL) /usr/bin/systemctl restart nginx

هذا يسمح للمستخدم rachid فقط بإعادة تشغيل nginx وليس أي أمر آخر.

استخدام ملفات /etc/sudoers.d لتنظيم الصلاحيات

sudo visudo -f /etc/sudoers.d/deploy-user

مثال محتوى:

deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx
deploy ALL=(root) /usr/bin/journalctl -u nginx

هذا أفضل من حشر كل القواعد داخل ملف sudoers الرئيسي.

متى تستخدم NOPASSWD ومتى تتجنبه؟

  • مفيد للأتمتة الموثوقة والمحددة جدًا
  • خطر إذا طُبق على أوامر عامة أو كثيرة
  • تجنب مثلًا إعطاء NOPASSWD: ALL

أمثلة صلاحيات دقيقة بدل صلاحيات واسعة

غير آمن أفضل
dev ALL=(ALL) ALL dev ALL=(root) /usr/bin/systemctl restart myapp
ops ALL=(ALL) NOPASSWD: ALL ops ALL=(root) NOPASSWD: /usr/bin/journalctl -u myapp

مراجعة وتدقيق استخدام sudo

sudo grep sudo /var/log/auth.log
sudo journalctl _COMM=sudo -n 100

راقب من نفذ ماذا ومتى، خاصة على الأنظمة المشتركة.

أخطاء شائعة تكسر مبدأ أقل صلاحية

  • منح فريق كامل صلاحيات root كاملة بدون مبرر
  • ترك مستخدمين قدامى ضمن مجموعة sudo
  • إعطاء أوامر واسعة يمكن استغلالها لتجاوز القيود
  • عدم مراجعة sudoers بعد تغيّر الأدوار

Checklist سريع لتطبيق Least Privilege

  1. راجع أعضاء مجموعة sudo
  2. استبدل الصلاحيات العامة بقواعد دقيقة
  3. استخدم sudoers.d لكل فريق/خدمة
  4. فعّل logging ومراجعة دورية

تمرين عملي: منح صلاحية محددة لمستخدم deploy

sudo useradd -m deploy
sudo visudo -f /etc/sudoers.d/deploy

# أضف:
# deploy ALL=(root) /usr/bin/systemctl restart nginx

sudo -l -U deploy

إذا ظهر أمر واحد فقط مسموح للمستخدم deploy، فأنت طبقت Least Privilege بشكل صحيح.

FAQ: أسئلة شائعة حول sudo وLeast Privilege

ما هو مبدأ أقل صلاحية في Linux؟

هو منح المستخدم أو الخدمة أقل صلاحيات لازمة فقط لتنفيذ المهمة المطلوبة دون امتيازات إضافية.

لماذا نستخدم visudo بدل تعديل /etc/sudoers مباشرة؟

لأن visudo يتحقق من صحة الصياغة ويمنع حفظ ملف sudoers مع أخطاء قد تمنع الوصول الإداري.

كيف أعرف صلاحيات sudo الحالية للمستخدم؟

استخدم sudo -l لعرض الأوامر المسموح بها للمستخدم الحالي عبر sudo.

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

في الدرس القادم سنؤمّن SSH بشكل أعمق (Hardening).

التالي: SSH Hardening
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن