أمن وحماية السيرفراتالمقال المثبتمواضيع عامةمواضيع ومقالات

مقال : مقدمه الى SELinux المفاهيم الاساسية

تم أرشفة هذا المحتوى


SELinux أو “Security Enhanced Linux”   عباره عن ألية متقدمة للتحكم بالوصول الى النظام “Access Control” مبنيه في معظم توزيعات لينكس. تم تطويرها أساسا من قبل وكالة الأمن القومي الأمريكي لحماية أنظمة الكومبيوتر من الاختراق . مع الوقت, تم إصدار SELinux  للعامه وأصبحت التوزيعات تملكه وتدمجه مع الكود الخاص بها . العديد من مدراء الأنظمة يجدون ان SELinux  نوعا ما شي غير مفهوم .

وجود نظام SELinux مع الإعدادات الصحيحة يمكن له ان  يقلل من المخاطر الأمنية بشكل كبير.  ومعرفة القليل عنه يمكنها مساعدتك بحل رسائل الخطر المتعلقة بالدخول “Access error messages”.

في هذا الشرح سوف نتعلم المفاهيم المتعلقه بـ SELinux . سوف نلقي نظره على حزمه, أوامره , ملفات الإعدادات ورسائل الأخطاء المسجلة عندما يرفض الدخول. وسوف نرى ايضا بعض الأمثلة العملية عن SELinux.

ملاحظة:

جميع الأوامر والحزم والملفات التي سوف تظهر في هذا الشرح جربت على CentOS 7 بالرغم ان المفاهيم ستبقى كما هي في حزم لينكس الاخرى.

في هذا الشرح سوف نقوم بتنفيذ الأوامر بصلاحيات Root  الا اذا أشير الى غير ذلك.

لماذا SELinux


قبل البدء لنفهم بعض الأشياء او المفاهيم:

يقوم SELinux بتنفيذ مايعرف بالتحكم بالوصول الألزامي “Mandatory Access Control”. ينفذ هذا المفهوم على مفهوم  “Discretionary Access Control” ومايعرف بالتحكم التقديري للوصول .

لفهم DAC, لنفهم اليه تأمين ” ملف اللينكس التقليدي”.

في النموذج الأمن التقليدي, لدينا ثلاث مجموعات: user,group,other u,g,o والتي يمكنها ان تملك مجموعة من read,write,execute r,w,x مايعرف ب الصلاحيات على ملف او مجلد. اذا المستخدم jo قام بانشاء ملف في مجلد home, فهذا المستخدم سوف يملك صلاحيات الكتابة والقراءة read/write للملف, وكذلك للمجموعة jo.

مجموعة other لن تملك اي صلاحية للدخول للملف.في الكود القادم سوف نقوم بوضع تخيل افتراضي  لمحتويات home directory للمستخدم jo.

لاتحتاج لإنشاء مستخدم jo ,سوف نقوم بها لاحقا خلال هذا الشرح.

سوف نقوم بتنفذ الامر

 

/ls -l /home/jo

والنتيجة

total 4
rwxrw-r–. 1 jo jo 41 Aug  6 22:45 myscript.sh-

والأن jo يمكنه تغيير الصلاحيات. سيمكنه منح او تقييد الدخول للملف بالنسبة users,groups,others او تغيير مالك الملف. هذه الخطوات تترك ملفات مهمة لحسابات لايجب اعطاؤها صلاحيات الدخول إاليه. jo يمكنه التقييد لزيادة الأمان ولكن هذاالشئ تقديري لانه لايمكن لمدير النظام لتطبيق الأمان على كل ملف بالنظام.

لنتخيل حالة أخرى: عند تشغيل عملية معينة”Process” في لينكس, يمكن ان تعمل بصلاحيات root  او اي حساب أخر لديه ميزات superuser. هذا يعني اذا قام black-hat hacker بالسيطرة على التطبيق, يمكنه استخدام التطبيق للوصول الى اي مكان يستطيع حساب المستخدم الوصول اليه. العمليات التي تعمل بصلاحيات root , هذا يعني كل شئ في السيرفر.

قم بالتفكير بسيناريو عندما تريد تقييد المستخدمين من تنفيذ shell scripts من على home . كيف يمكنك فعل هذا.

SELinux يمكنها ضبط متطلبات سيطرة الدخول هذه بدقة تامة. مع SELinux ,يمكنك تحديد ماذا يمكنه المستخدم او العملية القيام به. يمكنه تحديد كل عملية لـ domain الخاص بها هذه يعني ان العملية يمكنها التفاعل مع بعض الأنواع من الملفات او عمليات أخرى من domains السموح بها. بهذا يمكننا منع المخترق من سرق اي عملية لكسب اي دخول للنظام.

إعداد نظام تجريبي


لنتعلم المفاهيم بسهولة, سوف نقوم ببناء سيرفر تجريبي يكون web & sftp سيرفر.

سوف نبدا بتنصيب CentOS 7 مع اقل الحزم المنصبة وسوف ننصب Apatche & vsftp) daemons) على السيرفر. على اي حال لن نقوم بإعداد اي من هذين التطبيقين, سوف نقوم أيضا بإنشاء بعض الحسابات التجريبية على cloud سيرفر. حيث اننا سوف نستخدم هذه الحسابات في اكثر من مكان خلال هذا الشرح.

أخيرا, سوف نقوم بتنصيب الحزم المتعلقة بSELinux لنتأكد من اننا سوف نعمل مع أخر اصدار لأوامر SELinux.

تنصيب خدمات Apache و SFTP 


أولا لنقم بالدخول للسيرفر بصلاحيات root  وتنفيذ الأوامر التالية لتنصيب Apache:

 

yum install httpd

وبالنسبة للنتيجة ستظهر الحزمة وهي تحمل وستسأل من اجل الموافقة على التنصيب:

 

Loaded plugins: fastestmirror, langpacks


==========================================================
Package Arch Version Repository Size
===========================================================
Installing:
httpd x86_64 2.4.6-18.el7.centos updates 2.7 M

Transaction Summary
===========================================================
Install 1 Package

Total download size: 2.7 M
Installed size: 9.3 M
Is this ok [y/d/N]:

 

وبالضغط على y سوف يتم تنصيب Apache web server daemon.

:Downloading packages
httpd-2.4.6-18.el7.centos.x86_64.rpm | 2.7 MB 00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-2.4.6-18.el7.centos.x86_64 1/1
Verifying : httpd-2.4.6-18.el7.centos.x86_64 1/1

:Installed
httpd.x86_64 0:2.4.6-18.el7.centos

Complete

قم بتشغيل daemon يدويا:

service httpd start

تنفيذ أمر service httpd status سيظهر اي من الخدمات التي تعمل حاليا:

Redirecting to /bin/systemctl status httpd.service
httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
Active: active (running) since Tue 2014-08-19 13:39:48 EST; 1min 40s ago
Main PID: 339 (httpd)

بعد ذلك سوف ننصب vsftp:

yum install vsftpd

 

والنتيجة سوف تكون :

Loaded plugins: fastestmirror, langpacks
...
...
==============================================================================================================
 Package Arch Version Repository Size
==============================================================================================================
Installing:
 vsftpd x86_64 3.0.2-9.el7 base 165 k

Transaction Summary
==============================================================================================================
Install 1 Package

Total download size: 165 k
Installed size: 343 k
Is this ok [y/d/N]:

قم بالضغط على y لتنصيب الحزمة.

بعدها سوف نستخدم أمر service vsftpd start لتشغيل vsftpd daemon.

والنتيجة يجب ان تكون مثل التالي:

Redirecting to /bin/systemctl status vsftpd.service
vsftpd.service – Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
Active: active (running) since Tue 2014-08-19 13:48:57 EST; 4s ago
Process: 599 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 600 (vsftpd)


تنصيب حزم SELinux


عدد من الحزم تستعمل في SELinux. بعضها منصب بشكل إفتراضي. هنا قائمة للحزم ل توزيعة Red-Hat.

  • Policycoreutils (تقوم بتزويد خدمات لإدارة SELinux).
  • Policycoreutils-python (تقوم بتزويد خدمات لإدارة SELinux).
  • Selinux-policy (توفر السياسة المرجعية ل SELinux).
  • Selinux-policy-targeted ( توفر السياسة المرجعية ل SELinux).
  • Libselinux-utils (توفر بعض الأدوات لإدارة SELinux).
  • Setroubleshoot-server (توفر بعض الأدوات لرسائل سجل التدقيق بفك الشفرة).
  • Setools (توفر بعض الأدوات لمراقبة سجل التدقيق, سياسة الأستعلام و إدارة حالة الملف).
  • Setools-console (توفر بعض الأدوات لمراقبة سجل التدقيق, سياسة الأستعلام و إدارة حالة الملف).
  • Mcstrans (أدوات لترجمة مختلف المراحل لتسهيل فهم البنية.

بعض من هذه الحزم منصبة مسبقا. و لمعرفة حزم SELinux المنصبة على نظام CentOS 7 لديك, يمكنك تنفيذ بعض الأوامر مثل الأمر التالي(مع أكثر من مصطلح بعد grep ) والتنفيذ يجب ان يكون بصلاحيات root user:

 

rpm -qa | grep selinux

والنتيجة يجب ان تكون كالتالي:

 

libselinux-utils-2.2.2-6.el7.x86_64
libselinux-2.2.2-6.el7.x86_64
selinux-policy-targeted-3.12.1-153.el7.noarch
selinux-policy-3.12.1-153.el7.noarch
libselinux-python-2.2.2-6.el7.x86_64


تستطيع تنزيل الحزم مع الأمر التالي(yem سوف يقوم بتحديث الحزم الموجودة مسبقا) , او فقط الحزم التي تجدها غير موجودة في النظام:

yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans

الأن يجب ان يكون لدينا نظام يحتوي جميع حزم SELinux. لدينا ايضا سيرفرات Apache & SFTP بإعداداتهم الإفتراضية. ونملك ايضا 4 مستخدمين لغرض التجريب ولدينا حساب root.

 

SELinux Modes


سنقوم بالدخول والتعرف اكثر على SELinux, ولنبدأ بالتعرف على الأوضاع التي يعمل بها,  SELinux يملك ثلاث صيغ:

  • عالي (Enforcing).
  • متساهل (Permissive).
  • متوقف (Disabled).

في وضع enforcing mode سيقوم SELinux بفرض سياساته على نظام لينكس ومنع اي محاولات دخول غير مصرح بها من قبل مستخدمين او عمليات. ومحاولات الدخول المفروضة ايضا سوف تكتب ملفات تسجيل ذات صلة بالموضوع. سنتكلم عن السياسات وملفات التسجيل لاحقا.

permissive mode  نصف مفعل , اي ان هذا الوضع لايطبق السياسات  لهذا لايوجد اي رفض لأي دخول. لكن مع اي إنتهاك للسياسة ستكتب الحالات في سجل التدقيق وهذا الوضع يعتبر جيد لتجريب SELinux قبل فرضه على النظام.

واذا كان SELinux بوضع disabled mode فلن يكون النظام محمي نهائيا.

التحقق من حالة ووضع SELinux


بإستخدام الامر (getenforce) يمكننا التأكد من وضع SELinux الحالية.

getenforce

وحاليا يجب ان تكون الوضع disabled والنتيجة كما يلي:

Disabled

وطريقة ثانية للتأكد ايضا باستخدام الأمر (sestatus) :

sestatus

والنتيجة :

SELinux status: disabled

إعدادات ملف SELinux


ملف الإعدادات الرئيسي هو etc/selinux/config/ . ولنستعرض محتوياته نقوم بتطبيق الامر:

cat /etc/selinux/config

والنتيجة:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted – Targeted processes are protected,
# minimum – Modification of targeted policy. Only selected processes are protected.
# mls – Multi Level Security protection.
SELINUXTYPE=targeted

يوجد تعليمتين إثنتين في هذا الملف. أولها SELINUX والتي تحدد وضع  SELinux والتي كما عرفنا تملك ثلاث خيارات.

والتعليمة الثانية SELINUXTYPE تحدد السياسة التي ستستخدم. القيمة الإفتراضية ستكون targeted. مع سياسة targeted سيسمح لك SELinux بتخصيص وضبط أذونات الدخول “access control permissions” بدقة. القيمة الممكنة الثانية هي MLS (multilevel securitty), وهو  وضع متقدمة للحماية ومع هذه القيمة سيطلب منك تنصيب حزم إضافية.

تشغيل و إيقاف SELinux


تشغيل SELinux عملية بسيطة ولكن القيام بإقافه يتطلب خطوتين. لنفترض بأن SELinux متوقف حاليا, وانك قمت بتنصيب جميع حزم SELinux التي أشرنا إليها سابقا.

أولا يجب علينا تعديل ملفetc/selinux/config/  لتغير تعليمة SELINUX الى وضع permissive.

 

vi /etc/sysconfig/selinux


SELINUX=permissive

ضبط الحالة الى permissive مهم جدا لأن كل ملف بالنظام يجب ان توسم محتوياته قبل تطبيق SELinux. عدم القيام بهذا الشئ, أي وسم جميع الملفات يؤدي الى ان كل العمليات المحصورة بمجال محدد (confined domain) ستفشل لأنها لن تستطيع الدخول الى الملفات ذات المحتوى الصحيح. هذا يمكن أن يسبب فشل عملية الإقلاع او بدئيها مع بعض الأخطاء.

الان قم بإقلاع للنظام:

reboot

عملية الإقلاع سوف ترى كل الملفات في السيرفر عليها وسم بمحتوى SELinux. بما أن النظام يعمل بوضع permissive, أخطاء SELinux و رفض الدخول سيتم التبليغ عنها لكن لن توقف اي شي.

قم بالدخول الى السيرفر مرة اخرى بصلاحيات root, بعدها قم بالبحث عن النص التالي “SELinux is preventing” في المحتوى وبالتحديد في ملف var/log/messages/ .

 

cat /var/log/messages | grep “SELinux is preventing”

في حالة لم تكن هنالك أي أخطاء, فيمكننا الإنتقال الى الخطوة القادمة بأمان. لكن من الأفضل ان يتم البحث عن نص يحتوي “SELinux” في ملف /var/log/messages . في نظامنا سنقوم بتنفيذ هذا الأمر:

cat /var/log/messages | grep “SELinux”

سوف يتم إظهار بعض الأخطاء المتعلقة ب GNOME Desktop الذي كان يعمل. فيمكن ان تحصل بسبب أن SELinux كان إما بوضع disabled او permissive.

Aug 20 11:31:14 localhost kernel: SELinux: Initializing.
Aug 20 11:31:16 localhost kernel: SELinux: Disabled at runtime.
Aug 20 11:31:21 localhost journal: Unable to lookup SELinux process context: Invalid argument
Aug 20 11:33:20 localhost gnome-session: SELinux Troubleshooter: Applet requires SELinux be enabled to run.

Aug 20 11:37:15 localhost kernel: SELinux: Initializing.
Aug 20 11:37:17 localhost kernel: SELinux: Disabled at runtime.
Aug 20 11:37:23 localhost journal: Unable to lookup SELinux process context: Invalid argument
Aug 20 11:37:44 localhost gnome-session: SELinux Troubleshooter: Applet requires SELinux be enabled to run.

Aug 20 11:39:42 localhost kernel: SELinux: Initializing.
Aug 20 11:39:44 localhost kernel: SELinux: Disabled at runtime.
Aug 20 11:39:50 localhost journal: Unable to lookup SELinux process context: Invalid argument

 

لاتوجد مشكلة بنوعية هذه الأخطاء.

في المرحلة الثانية, نحتاج الى تعديل ملف config لتغير تعليمة SELINUX من permissive الى enforcing في ملف /etc/sysconfig/selinux .

 


SELINUX=enforcing

ثم سنقوم بإعادة إقلاع السيرفر مرة أخرى.

reboot

عندما يعود السيرفر الى عمله, يمكننا تنفيذ أمر sestatus للتحقق من حالة SELinux. الأن يجب ان يظهر معلومات أكثر عن السيرفر:

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

تحقق من ملف /var/log/messages :

cat /var/log/messages | grep “SELinux”

 

هنا يجب عدم وجود أخطاء. والنتيجة كما يلي :

Aug 20 11:42:06 localhost kernel: SELinux: Initializing.
Aug 20 11:42:09 localhost systemd[1]: Successfully loaded SELinux policy in 183.302ms.

Aug 20 11:44:25 localhost kernel: SELinux: Initializing.
Aug 20 11:44:28 localhost systemd[1]: Successfully loaded SELinux policy in 169.039ms.

 

التحقق من حالة ووضع SELinux (مرة أخرى)


 

سنقوم بتنفيذ أمر getenforce للتحقق من بوضع SELinux الحالية.

getenforce

ستكون النتيجة كما يلي اذا كان النظام يعمل بوضع enforcing.

Enforcing

بينما النتيجة مختلفة اذا كان بوضع disabled:

Disabled

يمكننا ايضا استخدام أمر sestatus لرؤية مايجري بشكل أفضل:

sestatus

واذا كان SELinux بوضع disabled, فالنتيجة ستظهر الحالة الحالية, الوضع الحالي, الوضع معرف بملف الإعدادات, ونوعية السياسة.

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

 

بينما اذا كان الوضع disabled فالنتيجة ستظهر:

SELinux status: disabled

نستطيع ان نتحول مؤقتا بين وضعي enforcing و permissive باستخدام أمر setenforce (لايمكننا ان ننفذ أمر setenforce عندما يكون SELinux بوضع disabled.

أولا سنقوم بتغيير الوضع من enforcing الى permissive في نظام CentOS 7:

setenforce permissive

تنفيذ أمر sestatus الأن سيظهر الوضع الحالي ويكون مختلف عن الوضع المعرف في ملف config:

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

قم بالتحويل الى enforcing:

setenforce enforcing

 

سياسة SELinux


 

تتمركز سياسة SELinux في قلب محركه الأمني. السياسة (policy) هي مجموعة من القوانين التي تحدد الأمان وحق الدخول الى اي شئ في النظام والذي يشمل المستخدمين, الأدوار, والعمليات والملفات. السياسة سوف تقوم بتعريف العلاقات بين هذه المجموعات فيما بينها.

 

بعض المصطلحات البسيطة


لفهم السياسة (Policy), لنبدأ اولا بفهم بعض المصطلحات وسنخوض بالتفاصيل لاحقا. سياسة SELinux تحدد دخول المستخدم الى دوره, الدور بالدخول الى Domain و Domain بالدخول الى أنواع الملفات.

المستخدمين:

يملك SELinux مجموعة مسبقة من المستخدمين. كل حساب مستخدم في لينكس يربط مع مستخدم او أكثر من مستخدمي SELinux.

المستخدم يقوم بتشغيل عملية (في لينكس). مثال بسيط على ذلك وهو عند قيام المستخدم jo بفتح مستند في محرر vi (سيكون حساب jo مشغل لعملية vi) او حساب خدمة يقوم بتشغيل httpd daemon. في عالم SELinux تسمى العملية ( daemon او running program) تسمى subject.

الأدوار:

ممكن أن نعبر عن الدور بالبوابة التي تقف بين المستخدم والعملية. يقوم الدور بتحديد أي مستخدم يمكنه الوصول الى العملية. لايمكن أن نعتبر أن الأدوار هي مجموعات ولكن تعتبر فلاتر. تعريف الدور (Role) في SELinux Policy هو تعيين المستخدمين وتحديد اي منهم لهم صلاحية الدخول الى ذاك الدور. أيضا وتقوم بتحديد صلاحية الدخول للدور نفسه للوصول الى Process Domains. يقوم SELinux بتنفيذ مايعرف Role Based Access Control.

Subjects and Objects:

الموضوع  subject عملية ويمكن أن تؤثر على الأجسام objects.

Objects في SELiunux هي اي شئ يمكن ان ينفذ عليه. فيمكن أن يكون ملف, مسار, منفذ, tcp socket, الدوال, او يمكن أن يكون سيرفر. أذونات ال subject مجموعة من الأعمال التي تنفذ على objects.

Domains are for Subjects:

المجال هو محتوى موجود في SELinux subject وهذا المحتوى قابل للتنفيذ. يمكن تبسيط (المحتوى) بأنه مثل غلاف حول subject فيخبر العملية بالذي يمكنها فعلها او عدم فعله. على سبيل المثال: يقوم المجال بتعريف اي من الملفات, المسارات, الروابط, الاجهزة والمنافذ المتاحة لل subjects.

 

أنواع ال Objects

النوع  يمكن إعتباره بانه المحتوى التابع للملف والذي يعبر عنه وعن غرض وجوده. على سبيل المثال يمكن لمحتوى ملف معين ان يشير على أنه web page, او ان الملف ينتمي الى مسار etc/ , او يشير الى ان صاحب الملف يعتبر من مستخدمي SELinux. فإذا محتوى الملف يدعى ب type في لغة SELinux.

ماهي سياسة SELinux

تقوم سياسة SELinux بتحديد دخول المستخدم الى الأدوار, دور الدخول إلى المجالات domains, و المجال يدخل الى types. أولا يجب على المستخدم ان يصرح له بالدخول الى Role ثم Role يجب ان يصرح له للدخول الى Domain. ا Domain بدوره سوف يقوم بتقييد الدخول أنواع محددة من الملفات.

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

1

بالعودة الى موضوع السياسات, فتطبيقات سياسة SELinux تكون بحالة tageted بشكل إفتراضي. اذا تتذكر ملف SELinux config الذي تكلمنا عنه سابقا في هذا المقال, فتعليمة SELINUXTYPE تضبط كـ targeted. هذا يعني في الحالة الإفتراضية سيقوم SELinux بتقييد فقط بعض العمليات في النظام (العمليات التي تكون targeted) أما العمليات التي لن تكون مستهدفة targeted سوف تعمل في المجالات العامة unconfined domains.

بديل ذلك يسمى بنموذج deny-by-default اي الرفض بشكل إفتراضي حيث انه يتم منع اي دخول إلا اذا تم السماح لذلك في السياسة. يأمن هذه النموذج أمان أكثر لكن في هذه الحالة يجب على المطورين توقع أن كل تصريح ممكن (permission) بكل عملية (process) يمكن ان يطلب لكل object محتملة. السلوك الإفتراضي يرى بأن SELinux مهتمة ببعض العمليات فقط ولا تهتم بالطريقة البديلة.

سلوك سياسة SELinux

لنفهم أن سياسة SELinux لم توجد لتحل محل أمن DAC. إذا كانت قاعدة DAC تمنع المستخدم من دخول الملف فإن قواعد سياسة SELinux لن تطبق بسبب أن الخط الاول للدفاع قام بحظر الدخول. قرارات أمن SELinux ستطبق وتنفذ بعد تطبيق أمن DAC.

عند بدء نظام SELinux المفعل ستنقل السياسات الى الذاكرة. سياسة policy تأتي في شكل موحد (modular format), يمكن إعتبارها مثل وحدات kernal المحملة في وقت الإقلاع.

ومثل وحدات kernal, بالإمكان إضافتها أو حذفها بشكل ديناميكي من الذاكرة في وقت الشتغيل (run time). بالنسبة لمخزن السياسة (policy store) الذي يستخدم من قبل SELinux يبقى ملاحق  للوحدات المحملة. أمر setatus يظهر اسم مخزن السياسة. أمر semodule -l يقوم بإظهار جميع وحدات سياسة SELinux المحملة حاليا في الذاكرة.

لننفذ أمر semodule ونرى النتيجة

semodule -l | less

والنتيجة:

abrt 1.2.0
accountsd 1.0.6
acct 1.5.1
afs 1.8.2
aiccu 1.0.2
aide 1.6.1
ajaxterm 1.0.0
alsa 1.11.4
amanda 1.14.2
amtu 1.2.3
anaconda 1.6.1
antivirus 1.0.0
apache 2.4.0

يمكن إستخدام semodule لعدة مهام ثانية مثل تنصيب, إزلة, إعادة تحميل, تحديث, تفعيل و تعطيل وحدات سياسة SELinux.

من المحتمل أنك مهتم بمكان وجود ملفات الوحدات.في أغلب التزيعات الحديثة تشمل الإصدارات الثنائية (binary versions) للوحدات ضمن حزم SELinux. ملف السياسة يملك لاحقة pp. . في نظام تشغيل CentOS 7 سنقوم بتنفيذ الأمر:

ls -l /etc/selinux/targeted/modules/active/modules/

القائمة ستظهر بعض الملفات بلاحقة pp. . وإذا أمعنت النظر فإنهم يتعلقون بتطبيقات مختلفة:


-rw-r–r–. 1 root root 10692 Aug 20 11:41 anaconda.pp
-rw-r–r–. 1 root root 11680 Aug 20 11:41 antivirus.pp
-rw-r–r–. 1 root root 24190 Aug 20 11:41 apache.pp
-rw-r–r–. 1 root root 11043 Aug 20 11:41 apcupsd.pp

علما أن ملفات pp. ليست قابلة للقراءة للأشخاص.

لنتعرف على طريقة عمل بنية SELinux عندما يقلع النظام, وحدات السياسة تتحد لما يعرف ب active policy.بعدها ستنقل السياسة الى الذاكرة. النسخة الثنائية المتحدة للسياسة المحملة ستكون موجودة في مسار /etc/selinux/targeted/policy .

ls -l /etc/selinux/targeted/policy/

سوف تظهر السياسة الفعالة.

total 3428
-rw-r–r–. 1 root root 3510001 Aug 20 11:41 policy.29

 

تغيير إعدادات SELinux Boolean


على الرغم من عدم إمكانية قراءة ملفات وحدة السياسةو لكن توجد طريقة لتغيير إعداداتها. سوف يتم ذلك عبر SELinux booleans. سنقوم بتنفيذ الأمر semanage boolean -l .

semanage boolean -l | less

سوف يظهر هذا الأمر مفاتيح مختلفة يمكن تشغيلها او إطفاؤها, وماهي وظيفتهم وحالتهم الحالية:

ftp_home_dir                    (off , off)    Allow ftp to home dir
smartmon_3ware              (off , off)    Allow smartmon to 3ware
mpd_enable_homedirs       (off , off)    Allow mpd to enable homedirs
xdm_sysadm_login            (off , off)    Allow xdm to sysadm login
xen_use_nfs                     (off , off)    Allow xen to use nfs
mozilla_read_content         (off , off)   Allow mozilla to read content
ssh_chroot_rw_homedirs    (off , off)   Allow ssh to chroot rw homedirs
mount_anyfile                   (on , on)    Allow mount to anyfile

يمكننا رؤية الخيار الأول والذي يسمح FTP daemon لدخول مسار user’s home وهو في حالة off حاليا. ولتغيير الإعدادات سنستعمل أمر setsebool.

getsebool ftpd_anon_write

هذا سيظهر بان الحالة off حاليا:

ftpd_anon_write –> off

الأن سنغير boolean لنفعله:

setsebool ftpd_anon_write on

وتفقد القيمة الأن سيظهر التغير الذي حصل:

ftpd_anon_write –> on

التغيرات التي تحصل على boolean ليس دائما وسترجع لقيمتها الأصلية بعد عملية الإقلاع فلجعل الإعدادات دائمة نستخدم p- مع الأمر setsbool.

الخلاصة


في الجزء الأول من هذا الشرح حاولنا تبسيط المفاهيم حول SELinux. رأينا كيف يمكن يقوم SELinux بحماية النظام. كيف يمكن ان نفعله والأوضاع التي يمكن ان يعمل بها. مررنا بموضوع سياسة SELinnux. في المقال القادم سنتعلم كيفية إستخدام SELinux تقييد الدخول الى الملفات والعمليات.

ترجمة لمقال : An Introduction to SELinux on CentOS 7 – Part 1: Basic Concepts لصاحبها Sadequl Hussain

isecur1ty

مجتمع عربي للهاكر الأخلاقي وخبراء الحماية يركّز على مفهوم اختبار الاختراق وجديد أخبار الحماية

مقالات ذات صلة

‫6 تعليقات

  1. انا لم افهم شيئا مما تقول يبدو انك في مستوى اعلى بكثير من المستوى الذي انا فيه ?

    1. لا بأس بالقليل من المثابره سوف تجد كل شي سهل , مازال هناك المزيد لنشره عن SElinux .
      تعلم شهاده ريدهات rhce وسوف تجد كل الامور سهله , الكورس موجود على اليوتيوب وبالعربي اذا شئت

  2. بعد إذنكم
    بقترح عليكم إن مثل هذه المقالات تبقي في ملف pdf للمقاله تسهيلا علي الناس انهم يقرؤها في اي وقت

  3. مشكلة SELinux صعب التعامل معه ولا ننسى ان المطور هوا FBI بينما Apparmor أسهل تعقيداً ومستخدم كثيراً

  4. السلام عليكم اخي هل ممكن اخي جعل دورة خاصة حول ال cenos 7 و تكون شاملة لكل ما يتعلق باللينوكس سيرفر . اي انشاء شبكة افتراضية تكون كاملة من حيث شروط الامان و شرح جل ما يمكن مصادفته من مشاكل فيها . شكرا لكم اخي على عملكم الرائع و نرجوا منكم المواصلة بقوة .

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى