دليل المبتدئين إلى SELinux

دليل المبتدئين إلى SELinux

ترجمة المقال المعد لطلبة المقرر "أمان Linux"

SELinux أو Security Enhanced Linux عبارة عن آلية محسنة للتحكم في الوصول طورتها وكالة الأمن القومي الأمريكية (NSA) لمنع التطفلات الضارة. وهو يطبق نموذجًا قسريًا (أو إلزاميًا) للتحكم في الوصول (الإنجليزية التحكم في الوصول الإلزامي، MAC) أعلى النموذج التقديري (أو الانتقائي) الحالي (الإنجليزية التحكم في الوصول التقديري، DAC)، أي أذونات القراءة والكتابة والتنفيذ.

يحتوي SELinux على ثلاثة أوضاع:

  1. فرض - رفض الوصول بناءً على قواعد السياسة.
  2. متساهل - الاحتفاظ بسجل للإجراءات التي تنتهك السياسة، والتي قد تكون محظورة في وضع التنفيذ.
  3. معاق - التعطيل الكامل لـ SELinux.

بشكل افتراضي الإعدادات موجودة /etc/selinux/config

تغيير أوضاع SELinux

لمعرفة الوضع الحالي، قم بتشغيل

$ getenforce

لتغيير الوضع إلى السماح، قم بتشغيل الأمر التالي

$ setenforce 0

أو لتغيير الوضع من متساهل في فرض، ينفذ

$ setenforce 1

إذا كنت بحاجة إلى تعطيل SELinux بالكامل، فلا يمكن القيام بذلك إلا من خلال ملف التكوين

$ vi /etc/selinux/config

للتعطيل، قم بتغيير معلمة SELINUX كما يلي:

SELINUX=disabled

إعداد سيلينوكس

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

$ vi /etc/selinux/config
SELINUX=permissive

بعد ضبط الوضع متساهل، قم بإنشاء ملف مخفي فارغ في الجذر بالاسم autorelabel

$ touch /.autorelabel

وأعد تشغيل الكمبيوتر

$ init 6

ملاحظة: نستخدم الوضع متساهل لوضع العلامات، منذ استخدام الوضع فرض قد يتسبب في تعطل النظام أثناء إعادة التشغيل.

لا تقلق إذا توقف التنزيل في بعض الملفات، فإن وضع العلامات يستغرق بعض الوقت. بمجرد اكتمال عملية وضع العلامات وتشغيل نظامك، يمكنك الانتقال إلى ملف التكوين وتعيين الوضع فرضوتشغيل أيضًا:

$ setenforce 1

لقد قمت الآن بتمكين SELinux بنجاح على جهاز الكمبيوتر الخاص بك.

مراقبة السجلات

ربما واجهت بعض الأخطاء أثناء وضع العلامات أو أثناء تشغيل النظام. للتحقق مما إذا كان SELinux الخاص بك يعمل بشكل صحيح وما إذا كان لا يمنع الوصول إلى أي منفذ أو تطبيق وما إلى ذلك، فأنت بحاجة إلى إلقاء نظرة على السجلات. يوجد سجل SELinux في /var/log/audit/audit.log، ولكنك لا تحتاج إلى قراءة كل شيء للعثور على الأخطاء. يمكنك استخدام الأداة المساعدة Audit2why للعثور على الأخطاء. قم بتشغيل الأمر التالي:

$ audit2why < /var/log/audit/audit.log

ونتيجة لذلك، سوف تتلقى قائمة بالأخطاء. إذا لم تكن هناك أخطاء في السجل، فلن يتم عرض أية رسائل.

تكوين سياسة SELinux

سياسة SELinux هي مجموعة من القواعد التي تحكم آلية أمان SELinux. تحدد السياسة مجموعة من القواعد لبيئة معينة. سنتعلم الآن كيفية تكوين السياسات للسماح بالوصول إلى الخدمات المحظورة.

1. القيم المنطقية (المفاتيح)

تسمح لك المحولات (القيم المنطقية) بتغيير أجزاء من السياسة في وقت التشغيل، دون الحاجة إلى إنشاء سياسات جديدة. إنها تسمح لك بإجراء تغييرات دون إعادة التشغيل أو إعادة ترجمة سياسات SELinux.

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

$ semanage boolean -l

سيقوم هذا الأمر بسرد المفاتيح المتوفرة مع حالتها الحالية (تشغيل أو إيقاف تشغيل) ووصفها. يمكنك تحسين بحثك عن طريق إضافة grep للعثور على نتائج ftp فقط:

$ semanage boolean -l | grep ftp

وسوف تجد ما يلي

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

تم تعطيل هذا المفتاح، لذا سنقوم بتمكينه setsebool $ setsebool ftp_home_dir on

الآن سيتمكن برنامج ftp الخفي الخاص بنا من الوصول إلى الدليل الرئيسي للمستخدم.
ملاحظة: يمكنك أيضًا الحصول على قائمة بالمفاتيح المتاحة دون وصف عن طريق القيام بذلك getsebool -a

2. التسميات والسياق

هذه هي الطريقة الأكثر شيوعًا لتنفيذ سياسة SELinux. يتم تمييز كل ملف ومجلد وعملية ومنفذ بسياق SELinux:

  • بالنسبة للملفات والمجلدات، يتم تخزين التسميات كسمات موسعة على نظام الملفات ويمكن عرضها باستخدام الأمر التالي:
    $ ls -Z /etc/httpd
  • بالنسبة للعمليات والمنافذ، تتم إدارة العلامات بواسطة النواة، ويمكنك عرض هذه العلامات على النحو التالي:

عملية

$ ps –auxZ | grep httpd

ميناء

$ netstat -anpZ | grep httpd

مثال
الآن دعونا نلقي نظرة على مثال لفهم التسميات والسياق بشكل أفضل. لنفترض أن لدينا خادم ويب بدلاً من الدليل /var/www/html/ использует /home/dan/html/. سوف تعتبر SELinux أن هذا انتهاكًا للسياسة ولن تتمكن من عرض صفحات الويب الخاصة بك. وذلك لأننا لم نقم بتعيين سياق الأمان المرتبط بملفات HTML. لعرض سياق الأمان الافتراضي، استخدم الأمر التالي:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

هنا وصلنا httpd_sys_content_t كسياق لملفات HTML. نحن بحاجة إلى تعيين سياق الأمان هذا لمجلدنا الحالي، والذي يحتوي حاليًا على السياق التالي:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

أمر بديل للتحقق من سياق الأمان لملف أو دليل:

$ semanage fcontext -l | grep '/var/www'

سنستخدم أيضًا semanage لتغيير السياق بمجرد العثور على سياق الأمان الصحيح. لتغيير سياق /home/dan/html، قم بتشغيل الأوامر التالية:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

بعد تغيير السياق باستخدام semanage، سيقوم أمر Restorecon بتحميل السياق الافتراضي للملفات والأدلة. سيتمكن خادم الويب لدينا الآن من قراءة الملفات من المجلد /home/dan/htmlلأنه تم تغيير سياق الأمان لهذا المجلد إلى httpd_sys_content_t.

3. إنشاء السياسات المحلية

قد تكون هناك مواقف لا تفيدك فيها الطرق المذكورة أعلاه وتحصل على أخطاء (avc/denial) في Audit.log. عندما يحدث هذا، تحتاج إلى إنشاء سياسة محلية. يمكنك العثور على كافة الأخطاء باستخدام Audit2why، كما هو موضح أعلاه.

يمكنك إنشاء سياسة محلية لحل الأخطاء. على سبيل المثال، نحصل على خطأ يتعلق بـ httpd (Apache) أو smbd (samba)، فنقوم بمعالجة الأخطاء وإنشاء سياسة لها:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

ومن http_policy и smb_policy هي أسماء السياسات المحلية التي أنشأناها. نحتاج الآن إلى تحميل هذه السياسات المحلية التي تم إنشاؤها في سياسة SELinux الحالية. ويمكن القيام بذلك على النحو التالي:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

لقد تم تنزيل سياساتنا المحلية ولن نتلقى بعد الآن أي AVC أو رفض في Audit.log.

كانت هذه محاولتي لمساعدتك على فهم SELinux. أتمنى بعد قراءة هذا المقال أن تشعر براحة أكبر مع SELinux.

المصدر: www.habr.com

إضافة تعليق