التحكم في الوصول الإلزامي (MAC) باستخدام SELinux أو AppArmor
أهلاً بكم يا مهندسي أنظمة Linux! اليوم بنتكلم عن موضوع مهم جداً لأمن أي نظام: التحكم في الوصول الإلزامي (MAC). غالبية الناس متعودين على التحكم في الوصول الاختياري (DAC) اللي هو صلاحيات الملفات العادية (rwx) والمستخدمين والمجموعات. لكن DAC فيه ثغرات، وهنا يجي دور MAC عشان يقوي الأمن.
الفرق الأساسي: DAC يسمح للمالك بتحديد الصلاحيات، بينما MAC يفرض سياسات أمنية محددة من قبل مسؤول النظام، ولا يمكن للمالك تجاوزها. يعني حتى لو المستخدم root، ممكن MAC يمنعه من فعل شيء معين إذا كانت السياسة تمنع ذلك.
ما هو SELinux؟
SELinux (Security-Enhanced Linux) هو آلية أمنية على مستوى kernel توفر إطار عمل للتحكم في الوصول الإلزامي (MAC). تم تطويره بواسطة وكالة الأمن القومي الأمريكية (NSA). الفكرة الأساسية في SELinux هي "كل شيء ممنوع ما لم يُسمح به صراحةً".
أوضاع SELinux
Enforcing: يفرض السياسات الأمنية ويمنع أي انتهاكات.Permissive: يسجل الانتهاكات لكن لا يمنعها. مفيد جداً للتصحيح.Disabled: SELinux معطل تماماً.
كيف تشوف حالة SELinux؟
sestatus
كيف تغير الوضع؟ (تحتاج صلاحيات root)
sudo setenforce 0 # لتحويله إلى Permissive
sudo setenforce 1 # لتحويله إلى Enforcing
تغيير الوضع باستخدامsetenforceهو تغيير مؤقت. لتغيير دائم، لازم تعدل ملف/etc/selinux/config.
سياقات SELinux (SELinux Contexts)
كل ملف، عملية، ومنفذ في نظامك له "سياق" خاص به في SELinux. هذا السياق هو اللي يحدد سياسات الوصول. السياق شكله كذا: user:role:type:level.
مثلاً، عشان تشوف سياق ملفاتك:
ls -Z /var/www/html/index.html
ps -efZ | grep httpd
إذا نقلت ملفات لمكان غير مخصص لها، ممكن SELinux يمنع الوصول. مثلاً، لو حطيت ملفات موقعك في /home/user/website وحاولت تخلي Apache يخدمها، SELinux بيمنع. الحل هو تغيير السياق.
أول شيء، شوف السياق الصحيح للمسار اللي تبغاه (مثلاً، مسار الويب الافتراضي):
ls -Z /var/www/html
بعدين، طبق السياق على ملفاتك الجديدة:
sudo chcon -R -t httpd_sys_content_t /home/user/website
chconيغير السياق مؤقتاً. بعد إعادة تسمية الملفات أو إعادة تهيئة نظام الملفات، ممكن يرجع السياق الأصلي. عشان تخلي التغيير دائم، استخدمsemanage fcontextثمrestorecon.
sudo semanage fcontext -a -t httpd_sys_content_t "/home/user/website(/.*)?"
sudo restorecon -Rv /home/user/website
البوليانات (Booleans) في SELinux
البوليانات تسمح لك بتشغيل أو إيقاف ميزات محددة في سياسة SELinux بدون الحاجة لكتابة سياسات معقدة. مثلاً، هل تسمح لـ Apache بالوصول لمشاركات NFS؟
شوف البوليانات المتاحة:
getsebool -a | grep httpd
لتشغيل أو إيقاف بوليان (مثلاً، السماح لـ Apache بالاتصال بالشبكة):
sudo setsebool -P httpd_can_network_connect on
الخيار -P يجعل التغيير دائم بعد إعادة التشغيل.
تصحيح أخطاء SELinux باستخدام audit2allow
أكثر مشكلة تواجهك مع SELinux هي انه يمنع شيء أنت تبغاه. الرسائل تظهر في سجلات التدقيق (audit logs)، غالباً في /var/log/audit/audit.log.
إذا واجهت مشكلة، أول شيء سويه هو تحويل SELinux إلى Permissive ( sudo setenforce 0 )، حاول تسوي العملية اللي كانت ممنوعة، بعدين رجعه Enforcing ( sudo setenforce 1 ). هذا بيسجل كل الانتهاكات بدون ما يمنعها.
بعدين، استخدم audit2allow عشان تشوف ايش اللي انمنع وتقترح حلول:
sudo grep "denied" /var/log/audit/audit.log | audit2allow -M my_custom_policy
هذا الأمر بيسوي ملفين: my_custom_policy.te (ملف تعريف السياسة) و my_custom_policy.pp (ملف السياسة المترجمة). عشان تطبقها:
sudo semodule -i my_custom_policy.pp
استخدام audit2allow بكثرة ممكن يضعف أمن نظامك. استخدمه بحذر وفقط لما تكون متأكد إنك تحتاج هذا الاستثناء. الأفضل دائماً هو ضبط السياقات والبوليانات أولاً.
ما هو AppArmor؟
AppArmor (Application Armor) هو نظام تحكم في الوصول الإلزامي (MAC) آخر، لكنه يعمل بطريقة مختلفة قليلاً عن SELinux. بدلاً من سياقات لكل شيء، AppArmor يعتمد على "ملفات تعريف" (profiles) تحدد ما يمكن للبرامج الفردية فعله. هو أسهل في الفهم والإدارة لكثير من الناس.
AppArmor منتشر أكثر في توزيعات مثل Ubuntu و openSUSE.
أوضاع AppArmor
Enforce: يفرض السياسات ويمنع الانتهاكات.Complain: يسجل الانتهاكات لكن لا يمنعها (مثلPermissiveفي SELinux).Unconfined: لا يوجد ملف تعريف مطبق على البرنامج.
كيف تشوف حالة AppArmor وملفات التعريف المحملة؟
sudo aa-status
لتغيير وضع ملف تعريف معين (مثلاً، لـ usr.sbin.nginx):
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
إنشاء وتعديل ملفات تعريف AppArmor
هنا تبرز سهولة AppArmor. يمكنك إنشاء ملف تعريف جديد أو تحديث ملف موجود بناءً على سلوك البرنامج.
لإنشاء ملف تعريف لبرنامج جديد (مثلاً، my_custom_app):
sudo aa-genprof my_custom_app
بعد تشغيل الأمر، AppArmor بيطلب منك تشغيل البرنامج اللي تبغى تسوي له ملف تعريف، وتنفذ كل العمليات اللي المفروض يسويها. بعدين، ارجع للطرفية، AppArmor بيحلل السجلات ويقترح قواعد لملف التعريف. بتمر على كل قاعدة وتحدد إذا كنت تسمح بها أو ترفضها.
لتحديث ملف تعريف موجود (مثلاً، usr.sbin.apache2):
sudo aa-logprof
هذا الأمر بيفحص سجلات AppArmor ويقترح تعديلات على ملفات التعريف الموجودة بناءً على أي انتهاكات حدثت. نفس الطريقة، بتمر على كل اقتراح وتقرر. بعد الانتهاء، بيتم تحديث ملف التعريف.
ملفات تعريف AppArmor غالباً ما توجد في /etc/apparmor.d/. هي ملفات نصية عادية تقدر تعدلها يدوياً إذا كنت فاهم صيغتها.
SELinux مقابل AppArmor: أيهما تختار؟
- SELinux:
- القوة: أكثر شمولية وتفصيلاً. يطبق سياسات على كل الموارد.
- التعقيد: منحنى تعلم حاد. يتطلب فهم عميق للسياقات والسياسات.
- المرونة: يمكن أن يكون مرناً جداً بمجرد إتقانه.
- التوزيعات: Red Hat, CentOS, Fedora.
- AppArmor:
- القوة: أسهل في الإعداد والإدارة. يعتمد على ملفات تعريف للبرامج.
- التعقيد: أقل تعقيداً، منحنى تعلم أسهل.
- المرونة: أقل شمولية من SELinux لكنه فعال جداً في حماية البرامج الفردية.
- التوزيعات: Ubuntu, openSUSE.
الخيار يعتمد على توزيعة Linux اللي تستخدمها، وخبرتك، ومتطلبات الأمان. إذا كنت على Red Hat/CentOS، غالباً ستستخدم SELinux. إذا كنت على Ubuntu، فـ AppArmor هو الخيار الطبيعي.
خاتمة
سواء اخترت SELinux أو AppArmor، التحكم في الوصول الإلزامي (MAC) هو طبقة أمنية حيوية لا غنى عنها في أي نظام إنتاجي. بتطبيق MAC، أنت تقلل بشكل كبير من سطح الهجوم وتجعل نظامك أكثر مقاومة للاختراقات، حتى لو تمكن المهاجم من الوصول إلى حساب بصلاحيات عالية. استثمر وقتك في فهم هذه التقنيات، وستكون مهندس أنظمة Linux أفضل وأكثر أماناً!