تنفيذ التحكم الإلزامي في الوصول باستخدام SELinux أو AppArmor في Linux

للتغلب على قيود وزيادة آليات الأمان التي يوفرها المعيار ugo / rwx أذونات و قوائم التحكم في الوصول، ال وكالة الأمن القومي الأمريكية (وكالة الأمن القومي) ابتكر برنامج مرن التحكم في الوصول الإلزامي (MAC) المعروفة باسم سيلينو (باختصار ل لينكس المحسن للأمان) من أجل تقييد ، من بين أمور أخرى ، قدرة العمليات على الوصول أو تنفيذ عمليات أخرى على كائنات النظام (مثل الملفات والدلائل ومنافذ الشبكة وما إلى ذلك) بأقل إذن ممكن ، مع السماح بإجراء تعديلات لاحقة على هذا النموذج.

SELinux و AppArmor Security Hardening Linux
سيلينو
و AppArmor Security Hardening Linux

MAC آخر شائع وشائع الاستخدام هو أبارمور، بالإضافة إلى الميزات التي يوفرها سيلينو، يتضمن وضع التعلم الذي يسمح للنظام بـ "يتعلم"كيف يتصرف تطبيق معين ، وتعيين الحدود من خلال تكوين ملفات التعريف للاستخدام الآمن للتطبيقات.

في CentOS 7, سيلينو تم دمجها في النواة نفسها وتم تمكينها في فرض الوضع افتراضيًا (المزيد حول هذا في القسم التالي) ، بدلاً من openSUSE و أوبونتو التي تستخدم أبارمور.

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

مقدمة إلى SELinux وكيفية استخدامه على CentOS 7

يمكن أن يعمل Linux المحسن للأمان بطريقتين مختلفتين:

  1. فرض: يرفض SELinux الوصول استنادًا إلى قواعد سياسة SELinux ، وهي مجموعة من الإرشادات التي تتحكم في محرك الأمان.
  2. متساهل: لا يرفض SELinux الوصول ، ولكن يتم تسجيل حالات الرفض للإجراءات التي كان من الممكن رفضها إذا كان يعمل في وضع الفرض.

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

لعرض الوضع الحالي لـ سيلينو، استعمال getenforce. إذا كنت تريد تبديل وضع التشغيل ، فاستخدم setenforce 0 (لضبطه على متساهل) أو setenforce 1 (فرض).

لأن هذا التغيير لن ينجو اعادة التشغيل، سوف تحتاج إلى تحرير ملف /etc/selinux/config ملف وتعيين سيلينو متغير لأي منهما فرض, متساهل، أو معاق لتحقيق الثبات عبر عمليات إعادة التمهيد:

كيفية تمكين وتعطيل وضع SELinux
كيفية تمكين وتعطيل وضع SELinux

في ملاحظة جانبية ، إذا getenforce يعود معطل ، سوف تضطر إلى التحرير /etc/selinux/config مع وضع التشغيل المطلوب وإعادة التشغيل. خلاف ذلك ، لن تتمكن من ضبط (أو تبديل) وضع التشغيل مع setenforce.

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

حالتان تقليديتان حيث من المرجح أن نتعامل مع SELinux هما:

  1. تغيير المنفذ الافتراضي حيث يستمع البرنامج الخفي.
  2. وضع جذر المستند التوجيه لمضيف ظاهري خارج /var/www/html.

دعونا نلقي نظرة على هاتين الحالتين باستخدام الأمثلة التالية.

مثال 1: تغيير المنفذ الافتراضي لعفريت sshd

من أول ما يفعله مسؤولو النظام لتأمين خوادمهم هو تغيير المنفذ الذي يستمع إليه عفريت SSH ، وذلك في الغالب لتثبيط الماسحات الضوئية للمنافذ والمهاجمين الخارجيين. للقيام بذلك ، نستخدم توجيه المنفذ في /etc/ssh/sshd_config متبوعًا برقم المنفذ الجديد على النحو التالي (سنستخدم port 9999 في هذه الحالة):

المنفذ 9999. 

بعد محاولة إعادة تشغيل الخدمة والتحقق من حالتها ، سنرى أنها فشلت في البدء:

# systemctl إعادة تشغيل sshd. # systemctl status sshd. 
تحقق من حالة خدمة SSH
تحقق من حالة خدمة SSH

إذا ألقينا نظرة على /var/log/audit/audit.log، سوف نرى أن sshd تم منعه من البدء في الميناء 9999 بواسطة سيلينو لأن هذا منفذ محجوز لـ إدارة JBoss service (تتضمن رسائل سجل SELinux الكلمة "AVC" حتى يمكن التعرف عليهم بسهولة من الرسائل الأخرى):

# cat /var/log/audit/audit.log | grep AVC | الذيل -1. 
تحقق من سجلات تدقيق Linux
تحقق من سجلات تدقيق Linux

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

# yum تثبيت بوليسيكوروتيلز بيثون. 

لعرض قائمة المنافذ حيث يسمح SELinux لـ sshd بالاستماع عليها. في الصورة التالية يمكننا أيضًا رؤية هذا المنفذ 9999 تم حجزه لخدمة أخرى ، وبالتالي لا يمكننا استخدامها لتشغيل خدمة أخرى في الوقت الحالي:

# منفذ semanage -l | grep ssh. 

بالطبع يمكننا اختيار منفذ آخر لـ SSH ، ولكن إذا كنا متأكدين من أننا لن نحتاج إلى استخدام هذا المحدد آلة لأي خدمات مرتبطة بـ JBoss ، يمكننا بعد ذلك تعديل قاعدة SELinux الحالية وتعيين هذا المنفذ إلى SSH في حين أن:

# منفذ semanage -m -t ssh_port_t -p tcp 9999. 

بعد ذلك ، يمكننا استخدام الأول semanage الأمر للتحقق مما إذا كان المنفذ قد تم تعيينه بشكل صحيح ، أو ملف -LC خيارات (اختصار لقائمة مخصصة):

# منفذ semanage -lC. # منفذ semanage -l | grep ssh. 
قم بتعيين المنفذ إلى SSH
قم بتعيين المنفذ إلى SSH

يمكننا الآن إعادة تشغيل SSH والاتصال بالخدمة باستخدام المنفذ 9999. لاحظ أن هذا التغيير سينجو من إعادة التشغيل.

مثال 2: اختيار DocumentRoot خارج / var / www / html لمضيف ظاهري

إذا كنت بحاجة إلى قم بإعداد مضيف ظاهري Apache باستخدام دليل آخر غير /var/www/html كما جذر المستند (على سبيل المثال ، /websrv/sites/gabriel/public_html):

DocumentRoot “/ websrv / sites / gabriel / public_html”

سيرفض Apache خدمة المحتوى لأن ملف index.html تم تسميته بـ default_t SELinux النوع الذي لا يستطيع Apache الوصول إليه:

# wget http://localhost/index.html. # ls -lZ /websrv/sites/gabriel/public_html/index.html. 
تم تصنيفها على أنها default_t نوع SELinux
تم تصنيفها على أنها default_t نوع SELinux

كما في المثال السابق ، يمكنك استخدام الأمر التالي للتحقق من أن هذه مشكلة متعلقة بـ SELinux:

# cat /var/log/audit/audit.log | grep AVC | الذيل -1. 
تحقق من السجلات بحثًا عن مشكلات SELinux
تحقق من السجلات بحثًا عن مشكلات SELinux

لتغيير تسمية /websrv/sites/gabriel/public_html بشكل متكرر إلى httpd_sys_content_t، فعل:

# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)؟"

سيمنح الأمر أعلاه Apache حق الوصول للقراءة فقط إلى هذا الدليل ومحتوياته.

أخيرًا ، لتطبيق السياسة (وجعل تغيير التسمية ساريًا على الفور) ، قم بما يلي:

# restorecon -R -v / websrv / sites / gabriel / public_html. 

الآن يجب أن تكون قادرًا على الوصول إلى الدليل:

# wget http://localhost/index.html. 
الوصول إلى دليل أباتشي
الوصول إلى دليل أباتشي

لمزيد من المعلومات حول SELinux ، راجع Fedora 22 دليل SELinux والمسؤول.

الصفحات: 12
Teachs.ru