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
- راجع أعضاء مجموعة sudo
- استبدل الصلاحيات العامة بقواعد دقيقة
- استخدم sudoers.d لكل فريق/خدمة
- فعّل 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.