مقدمة إلى AppArmor وSELinux على لينكس: دليل تقني

مقارنة بين AppArmor و SELinux على نظام لينكس مع أوامر المحطة.

مع تزايد التهديدات السيبرانية تعقيدًا، أصبح ضمان أمان نظام لينكس الخاص بك أمرًا بالغ الأهمية. من بين الأدوات المتاحة لتعزيز أمان لينكس، يُعد AppArmor وSELinux من أقوى الأدوات. توفر هذه الأنظمة التي تعتمد على التحكم الإلزامي في الوصول (MAC) طبقة إضافية من الحماية عن طريق تقييد كيفية تفاعل التطبيقات مع النظام. في هذا الدليل، سنستعرض AppArmor و SELinux، ونفهم الفروقات بينهما، ونقدم دليلًا تقنيًا شاملاً حول كيفية تنفيذ وإدارة هذه الأدوات على أنظمة لينكس الخاصة بك.

فهم AppArmor

AppArmor (حماية التطبيقات) هو وحدة أمان لنواة لينكس تسمح لمسؤول النظام بتقييد قدرات البرامج الفردية. يستخدم AppArmor ملفات تعريف أمان لتحديد الموارد التي يمكن للتطبيقات الوصول إليها، وبالتالي تقليل الضرر المحتمل من الشيفرات الخبيثة.

كيف يعمل AppArmor

يعمل AppArmor عن طريق ربط كل برنامج بملف تعريف أمني يحدد أذوناته. يمكن أن تحدد هذه الملفات ما إذا كان يمكن للتطبيق قراءة، أو كتابة، أو تنفيذ ملفات معينة. يعمل AppArmor في وضعين:

  • وضع الإنفاذ (Enforce): في هذا الوضع، يقوم AppArmor بتنفيذ السياسات المحددة في الملفات ويمنع أي وصول غير مصرح به.
  • وضع الشكوى (Complain): في هذا الوضع، يسجل AppArmor الانتهاكات للسياسات لكنه لا ينفذها، مما يسمح للمسؤولين باختبار الملفات قبل تنفيذها بشكل كامل.

ملفات تعريف AppArmor

ملفات تعريف AppArmor هي ملفات نصية عادية تحدد حقوق الوصول للتطبيقات. يمكن إعداد هذه الملفات للسماح أو حظر إجراءات محددة على الملفات، أو المجلدات، أو حتى موارد النظام مثل الوصول إلى الشبكة.

مثال على ملف تعريف AppArmor

#include <tunables/global>
/usr/sbin/apache2 {
  #include <abstractions/base>
  /var/www/html/** r,
  /etc/apache2/** r,
  /usr/sbin/apache2 mr,
  capability net_bind_service,
  network inet tcp,
}

في الملف التعريفي أعلاه، يُمنح خادم Apache صلاحية القراءة على /var/www/html/، و /etc/apache2/، وصلاحية قراءة الذاكرة (mr) على ملفه التنفيذي. بالإضافة إلى ذلك، يُسمح له بالاتصال بخدمة الشبكة عبر capability net_bind_service والتفاعل مع مكدس الشبكة TCP.

البدء مع AppArmor على لينكس

تثبيت AppArmor

يتوفر AppArmor على معظم توزيعات لينكس، ولكنه قد يحتاج إلى التثبيت والتفعيل. على سبيل المثال، يتم تثبيته افتراضيًا على Ubuntu. ومع ذلك، إذا كنت بحاجة إلى تثبيته، يمكنك القيام بذلك باستخدام الأوامر التالية:

$ sudo apt-get update
$ sudo apt-get install apparmor apparmor-utils

تفعيل وتعطيل AppArmor

للتحقق مما إذا كان AppArmor مفعلاً، استخدم الأمر:

$ sudo aa-status

لتفعيل AppArmor، يمكنك تعديل إعدادات GRUB. قم بتحرير /etc/default/grub وأضف apparmor=1 security=apparmor إلى السطر GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=1 security=apparmor"

ثم قم بتحديث GRUB:

$ sudo update-grub
$ sudo reboot

لتعطيل AppArmor، ما عليك سوى إزالة أو تعليق السطر apparmor=1 security=apparmor من إعدادات GRUB وأعد تشغيل الجهاز.

إدارة ملفات تعريف AppArmor

تُخزن ملفات تعريف AppArmor في المجلد /etc/apparmor.d/. يمكنك إنشاء، تعديل، أو حذف الملفات التعريفية حسب احتياجاتك.

إنشاء ملف تعريف AppArmor جديد

لإنشاء ملف تعريف جديد، يمكنك استخدام أداة aa-genprof. على سبيل المثال، لإنشاء ملف تعريف لتطبيق /usr/bin/evince:

$ sudo aa-genprof /usr/bin/evince

اتبع التعليمات على الشاشة لتحديد الأذونات أثناء تشغيل التطبيق.

تعيين ملف تعريف إلى وضع الإنفاذ

بمجرد إنشاء ملف تعريف، يمكنك تعيينه إلى وضع الإنفاذ:

$ sudo aa-enforce /etc/apparmor.d/usr.bin.evince

تضمن هذه الأداة أن الملف التعريفي يقوم بتطبيق قواعده بنشاط.

تعيين ملف تعريف إلى وضع الشكوى

إذا كنت تفضل اختبار ملف تعريف قبل تطبيقه:

$ sudo aa-complain /etc/apparmor.d/usr.bin.evince

في هذا الوضع، يسجل AppArmor أي انتهاكات دون تطبيق القيود.

فهم SELinux

أمن لينكس المحسن (SELinux) هو إطار عمل MAC آخر يتحكم في الوصول إلى الملفات، والعمليات، وموارد الشبكة استنادًا إلى سياسات أمان محددة. تم تطويره في الأصل بواسطة وكالة الأمن القومي الأمريكية (NSA)، ويشتهر SELinux بتقديمه تحكمًا أمنيًا دقيقًا، مما يجعله مناسبًا للبيئات الحساسة للغاية.

كيف يعمل SELinux

يعمل SELinux عن طريق وضع تسميات (Labels) على الملفات، والعمليات، والموارد الأخرى في النظام. تحدد السياسات ما هي الإجراءات المسموح بها بناءً على هذه التسميات. يمكن لـ SELinux العمل في ثلاثة أوضاع مختلفة:

  • وضع الإنفاذ (Enforcing): يقوم SELinux بتطبيق سياسات الأمان الخاصة به، مما يمنع الوصول حيث لا تسمح السياسات بذلك بشكل صريح.
  • وضع السماح (Permissive): يسجل SELinux انتهاكات السياسات دون تطبيقها، مما يكون مفيدًا للتشخيص.
  • وضع التعطيل (Disabled): يتم إيقاف تشغيل SELinux بالكامل.

سياسات SELinux

تعد سياسات SELinux مجموعة شاملة من القواعد التي تحدد أذونات الوصول لجميع المواضيع والأشياء في النظام. عادةً ما تنقسم السياسات إلى فئتين:

  • السياسات المستهدفة (Targeted): تنطبق هذه السياسات على عمليات محددة، بينما يعمل باقي النظام مع تحكم الوصول التقديري (DAC).
  • السياسات متعددة المستويات الأمنية (MLS): تقدم هذه السياسات إنفاذًا أمنيًا صارمًا لجميع العمليات وتستخدم في البيئات التي تتطلب أمانًا عاليًا، مثل الأنظمة الحكومية.

مثال على سياسة SELinux

allow httpd_t httpd_sys_content_t:file { read open getattr };

في هذا المقطع من السياسة، يُسمح للنطاق httpd_t (يرتبط عادة بخادم Apache) بقراءة، وفتح، والحصول على خصائص الملفات التي تحمل التسمية httpd_sys_content_t.

البدء مع SELinux على لينكس

تثبيت SELinux

على معظم التوزيعات مثل CentOS، وRHEL، وFedora، يتم تثبيت SELinux وتفعيله بشكل افتراضي. بالنسبة للأنظمة المستندة إلى Debian مثل Ubuntu، يمكن تثبيته كما يلي:

$ sudo apt-get install selinux-basics selinux-policy-default auditd
$ sudo selinux-activate
$ sudo reboot

تكوين أوضاع SELinux

يمكنك التحقق من الوضع الحالي لـ SELinux باستخدام الأمر sestatus:

$ sestatus

لتغيير وضع SELinux، قم بتحرير الملف /etc/selinux/config:

SELINUX=enforcing

الخيارات المتاحة هي:

  • enforcing: تطبيق سياسة SELinux.
  • permissive: يسجل SELinux الإجراءات دون تطبيق السياسة.
  • disabled: إيقاف SELinux.

بعد إجراء التغييرات، أعد تشغيل النظام لتطبيقها.

$ sudo reboot

إدارة سياسات SELinux

تُخزن سياسات SELinux في المجلد /etc/selinux/ ويمكن إدارتها باستخدام أدوات مختلفة مثل semanage، وsetsebool، وaudit2allow.

إنشاء وحدة سياسة SELinux جديدة

لإنشاء وحدة سياسة مخصصة، اتبع هذه الخطوات:

  1. كتابة ملف تنفيذ نوعي (TE):
module mymodule 1.0;
require {
  type httpd_t;
  type myapp_exec_t;
}
allow httpd_t
myapp_exec_t:file execute;
  1. قم بتجميع ملف TE:
$ checkmodule -M -m -o mymodule.mod mymodule.te
$ semodule_package -o mymodule.pp -m mymodule.mod
  1. تثبيت وحدة السياسة:
$ sudo semodule -i mymodule.pp

سيتم تحميل السياسة المخصصة في سياسة SELinux النشطة.

إدارة بوولانات SELinux

تمكنك بوولانات SELinux من تشغيل أو إيقاف سياسات محددة. يمكنك عرض جميع البوولانات المتاحة باستخدام الأمر:

$ sudo getsebool -a

لتغيير قيمة بوولان، استخدم الأمر setsebool:

$ sudo setsebool httpd_can_network_connect on

لجعل هذا التغيير دائمًا، أضف الخيار -P:

$ sudo setsebool -P httpd_can_network_connect on

AppArmor vs. SELinux: الفروقات الرئيسية

على الرغم من أن AppArmor وSELinux يوفران كلاهما أمانًا يعتمد على التحكم الإلزامي في الوصول (MAC)، فإنهما يختلفان بشكل كبير مما يؤثر على حالات استخدامهما وإدارتهما.

القائم على الملفات التعريفية vs. القائم على التسمية

يستخدم AppArmor التحكم القائم على الملفات التعريفية، حيث يتم إنشاء ملفات تعريف فردية لكل تطبيق. تحدد هذه الملفات الموارد التي يمكن للتطبيق الوصول إليها. من ناحية أخرى، يعتمد SELinux على التسمية، حيث يتم تصنيف كل ملف، وعملية، وموارد أخرى بتسمية أمان. ثم يتم تطبيق السياسات استنادًا إلى هذه التسميات.

سهولة الاستخدام

غالبًا ما يُعتبر AppArmor أسهل في الاستخدام نظرًا لنظام الملفات التعريفية البسيط، والذي يتطلب معرفة أقل لإنشاء وإدارة. بينما يوفر SELinux تحكمًا أكثر قوة، إلا أنه يتطلب منحنى تعلم أكثر حدة بسبب نظام السياسات والتسمية المعقد.

التوافر الافتراضي

يعد AppArmor النظام MAC الافتراضي في Ubuntu وبعض التوزيعات الأخرى المبنية على Debian. في حين أن SELinux هو النظام الافتراضي على التوزيعات المبنية على Red Hat مثل CentOS، وFedora، وRHEL.

تفاصيل التحكم

يوفر SELinux تحكمًا دقيقًا أكثر مقارنة بـ AppArmor. مما يجعله مناسبًا للبيئات التي تعتبر الأمان فيها أمرًا بالغ الأهمية، مثل الأنظمة الحكومية أو المؤسسات. بينما يوفر AppArmor تحكمًا فعالاً، لكنه لا يقدم نفس المستوى من التحكم التفصيلي.

حالات الاستخدام لـ AppArmor و SELinux

يعتمد اختيارك بين AppArmor وSELinux غالبًا على المتطلبات المحددة لبيئتك.

متى تستخدم AppArmor

  • الأمان الخفيف: إذا كنت بحاجة إلى أداة أمان بسيطة وسهلة الإدارة، فإن AppArmor هو خيار جيد. يوفر تحكمًا فعالاً مع تكوين بسيط.
  • بيئات Ubuntu أو Debian: نظرًا لأن AppArmor هو النظام الافتراضي في هذه الأنظمة، فهو أسهل في التنفيذ والإدارة.

متى تستخدم SELinux

  • البيئات ذات الأمان العالي: بالنسبة للبيئات التي تتطلب ضوابط أمنية صارمة، فإن SELinux مثالي نظرًا لإدارته التفصيلية للسياسات.
  • الأنظمة المبنية على Red Hat: يتم دمج SELinux بعمق في هذه الأنظمة، مما يجعله الخيار الطبيعي.

التكوين المتقدم والتخصيص

يمكن تحسين AppArmor وSELinux لتلبية متطلبات أمان محددة. تغطي هذه القسم تقنيات التكوين المتقدم لكلا الأداتين.

التكوين المتقدم لـ AppArmor

استخدام AppArmor مع الحاويات

يمكن أن يكون AppArmor مفيدًا بشكل خاص في تأمين البيئات الحاوية. على سبيل المثال، يمكنك تعيين ملفات تعريف محددة للحاويات Docker لتقييد قدراتها.

$ docker run --rm -it --security-opt apparmor=docker-default ubuntu

يشغل هذا الأمر حاوية Docker مع ملف التعريف AppArmor docker-default، مما يقيد وصول الحاوية إلى نظام المضيف.

تصحيح أخطاء AppArmor

لتصحيح أخطاء ملفات تعريف AppArmor، يمكنك استخدام أداة aa-logprof، التي تساعد في تحليل السجلات وتحديث الملفات:

$ sudo aa-logprof

سيقوم هذا البرنامج بتحليل السجلات واقتراح تحديثات للملفات التعريفية الحالية استنادًا إلى الأحداث المسجلة.

التكوين المتقدم لـ SELinux

تخصيص تسميات SELinux

يمكن إنشاء تسميات مخصصة وتطبيقها على الملفات أو العمليات لفرض سياسات معينة. على سبيل المثال، لإنشاء تسمية مخصصة:

$ sudo semanage fcontext -a -t my_custom_t "/custom/path(/.*)?"
$ sudo restorecon -Rv /custom/path

هنا، يقوم الأمر semanage بتعريف سياق ملف مخصص للمسار المحدد، و restorecon يطبق التسمية الجديدة.

SELinux في البيئات الافتراضية

يمكن أن يكون SELinux مفيدًا بشكل خاص في البيئات الافتراضية حيث يكون العزل الأمني أمرًا بالغ الأهمية. على سبيل المثال، يمكنك تطبيق سياسات SELinux محددة على الآلات الافتراضية للتحكم في وصولها إلى موارد المضيف.

$ sudo virsh setsebool virt_use_execmem on

يقوم هذا الأمر بتفعيل Boolean virt_use_execmem، مما يسمح للآلات الافتراضية بتنفيذ التعليمات البرمجية في الذاكرة، وهو أمر ضروري لبعض أحمال العمل.

استكشاف الأخطاء وإصلاحها والمشاكل الشائعة

كلاً من AppArmor وSELinux يواجهان مجموعة من التحديات الخاصة بهما. هذه القسم ستتناول المشاكل الشائعة وكيفية حلها.

المشاكل الشائعة مع AppArmor

  • صراعات الملفات التعريفية: إذا كان التطبيق لا يعمل كما هو متوقع، فقد يكون السبب هو ملفات تعريف AppArmor المقيدة. تغيير الملف إلى وضع الشكوى يمكن أن يساعد في تحديد المشكلة.
$ sudo aa-complain /etc/apparmor.d/usr.sbin.mysqld
  • تحليل السجلات: تحليل /var/log/syslog للرسائل الخاصة بـ AppArmor يمكن أن يوفر رؤى حول ما يتم حظره.

المشاكل الشائعة مع SELinux

  • انتهاكات السياسة: يقوم SELinux بتسجيل انتهاكات السياسة في /var/log/audit/audit.log. يمكنك استخدام audit2why لفهم سبب الرفض:
$ sudo cat /var/log/audit/audit.log | audit2why
  • وضع السماح: إذا كنت تواجه رفضات متكررة، فإن تحويل SELinux إلى وضع السماح يمكن أن يساعد في تشخيص المشاكل دون حظر العمليات.
$ sudo setenforce 0

الأسئلة الشائعة

ما الفرق بين AppArmor و SELinux؟
يستخدم AppArmor نهجًا يعتمد على الملفات التعريفية لتحديد سياسات الأمان للتطبيقات، في حين يستخدم SELinux نظامًا يعتمد على التسمية لتطبيق السياسات على النظام بأكمله.

هل AppArmor أسهل في الاستخدام من SELinux؟
نعم، يعتبر AppArmor عمومًا أسهل في الاستخدام لأنه يتطلب معرفة أقل لإنشاء وإدارة الملفات التعريفية مقارنةً بنظام السياسات الأكثر تعقيدًا في SELinux.

هل يمكنني تشغيل AppArmor و SELinux على نفس النظام؟
على الرغم من أنه من الممكن تقنيًا تثبيتهما معًا، إلا أنه لا يُنصح بتشغيلهما في نفس الوقت لأنهما قد يتعارضان مع بعضهما البعض. تستخدم معظم الأنظمة أحدهما فقط.

كيف يمكنني التبديل بين وضعي الإنفاذ والسماح في SELinux؟
يمكنك التبديل بين الأوضاع باستخدام الأمر setenforce. استخدم setenforce 1 لوضع الإنفاذ و setenforce 0 لوضع السماح.

هل من الضروري إعادة تشغيل النظام بعد تثبيت SELinux؟
نعم، بعد تثبيت وتفعيل SELinux، يكون من الضروري إعادة التشغيل لتطبيق سياقات الأمان على ملفات النظام.

هل يمكن استخدام AppArmor لتأمين حاويات Docker؟
نعم، يمكن استخدام AppArmor لتأمين حاويات Docker عن طريق تطبيق ملفات تعريف محددة تحد من قدرات الحاوية.

الخلاصة

يعد AppArmor وSELinux من الأدوات القوية في مجموعة أدوات الأمان لنظام لينكس، كل منهما يقدم مزايا فريدة. يوفر AppArmor نهجًا أكثر سهولة في الاستخدام من خلال نظامه المعتمد على الملفات التعريفية، مما يجعله مثاليًا للبيئات الأقل تعقيدًا. بينما يقدم SELinux، مع تحكمه الدقيق وتطبيقه الشامل للسياسات، خيارًا مناسبًا للبيئات التي تتطلب أمانًا صارمًا. من خلال فهم وتكوين هذه الأدوات بشكل صحيح، يمكنك تعزيز أمان أنظمة لينكس الخاصة بك بشكل كبير.

LEAVE A COMMENT