ورقة الغش الخاصة بـ SELinux لمسؤولي النظام: 42 إجابة على الأسئلة المهمة

تم إعداد ترجمة المقال خصيصًا لطلاب الدورة "مسؤول Linux".

ورقة الغش الخاصة بـ SELinux لمسؤولي النظام: 42 إجابة على الأسئلة المهمة

هنا سوف تحصل على إجابات لأسئلة مهمة حول الحياة والكون وكل شيء في Linux مع تحسين الأمان.

"الحقيقة المهمة وهي أن الأشياء ليست دائمًا كما تبدو هي معرفة عامة..."

-دوجلاس آدمز، دليل المسافر إلى المجرة

أمان. زيادة الموثوقية. مراسلة. سياسة. أربعة فرسان من نهاية العالم مسؤول النظام. بالإضافة إلى مهامنا اليومية - المراقبة والنسخ الاحتياطي والتنفيذ والتكوين والتحديث وما إلى ذلك - فإننا مسؤولون أيضًا عن أمان أنظمتنا. حتى تلك الأنظمة التي يوصي فيها موفر الطرف الثالث بتعطيل الأمان المحسن. يبدو الأمر وكأنه عمل إيثان هانت من "المهمة: مستحيلة".

في مواجهة هذه المعضلة، يقرر بعض مسؤولي النظام اتخاذها الحبة الزرقاءلأنهم يعتقدون أنهم لن يعرفوا أبدًا إجابة السؤال الكبير المتعلق بالحياة والكون وكل ذلك. وكما نعلم جميعًا، فإن الإجابة هي 42.

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

1. SELinux هو نظام للتحكم في الوصول القسري، مما يعني أن كل عملية لها علامة. يحتوي كل ملف ودليل وكائن نظام أيضًا على تسميات. تتحكم قواعد السياسة في الوصول بين العمليات والكائنات ذات العلامات. تقوم النواة بفرض هذه القواعد.

2. وأهم مفهومين هما: التعبير - — العلامات (الملفات والعمليات والمنافذ وما إلى ذلك) و نوع الإنفاذ (الذي يعزل العمليات عن بعضها البعض بناءً على الأنواع).

3. تنسيق التسمية الصحيح user:role:type:level (اختياري).

4. الغرض من توفير الأمان متعدد المستويات (أمان متعدد المستويات - MLS) هو إدارة العمليات (المجالات) بناءً على مستوى أمان البيانات التي سيستخدمونها. على سبيل المثال، لا يمكن للعملية السرية قراءة البيانات السرية للغاية.

5. ضمان أمان متعدد الفئات (أمان متعدد الفئات - MCS) يحمي العمليات المتشابهة من بعضها البعض (على سبيل المثال، الأجهزة الافتراضية، ومحركات OpenShift، وصناديق الحماية SELinux، والحاويات، وما إلى ذلك).

6. خيارات Kernel لتغيير أوضاع SELinux عند التمهيد:

  • autorelabel=1 → يتسبب في تشغيل النظام لإعادة التسمية
  • selinux=0 → النواة لا تقوم بتحميل البنية التحتية لـ SELinux
  • enforcing=0 → التحميل في الوضع المسموح به

7. إذا كنت بحاجة إلى إعادة تسمية النظام بأكمله:

# touch /.autorelabel
#reboot

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

8. للتحقق من تمكين SELinux: # getenforce

9. لتمكين/تعطيل SELinux مؤقتًا: # setenforce [1|0]

10 التحقق من حالة SELinux: # sestatus

11 ملف الضبط: /etc/selinux/config

12 كيف يعمل سيلينوكس؟ فيما يلي مثال لوضع علامة على خادم الويب Apache:

  • التمثيل الثنائي: /usr/sbin/httpd→httpd_exec_t
  • دليل التكوين: /etc/httpd→httpd_config_t
  • دليل ملف السجل: /var/log/httpd → httpd_log_t
  • دليل المحتوى: /var/www/html → httpd_sys_content_t
  • إطلاق البرنامج النصي: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • عملية: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • الموانئ: 80/tcp, 443/tcp → httpd_t, http_port_t

العملية قيد التشغيل في السياق httpd_t، يمكنه التفاعل مع كائن مسمى httpd_something_t.

13 تقبل العديد من الأوامر الوسيطة -Z لعرض وإنشاء وتغيير السياق:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

يتم إنشاء السياقات عندما يتم إنشاء الملفات بناءً على سياق الدليل الأصلي الخاص بها (مع بعض الاستثناءات). يمكن لـ RPMs إنشاء سياقات أثناء التثبيت.

14 هناك أربعة أسباب رئيسية لأخطاء SELinux، والتي تم وصفها بمزيد من التفصيل في النقاط 15-21 أدناه:

  • قضايا الملصقات
  • بسبب شيء يحتاج SELinux إلى معرفته
  • خطأ في سياسة/تطبيق SELinux
  • قد تتعرض معلوماتك للخطر

15 مشكلة وضع العلامات: إذا كانت ملفاتك موجودة /srv/myweb تم وضع علامة بشكل غير صحيح، قد يتم رفض الوصول. فيما يلي بعض الطرق لإصلاح هذا:

  • إذا كنت تعرف التسمية:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • إذا كنت تعرف ملفًا به علامات مكافئة:
    # semanage fcontext -a -e /srv/myweb /var/www
  • استعادة السياق (في كلتا الحالتين):
    # restorecon -vR /srv/myweb

16 مشكلة التسمية: إذا قمت بنقل الملف بدلاً من نسخه، فسيحتفظ الملف بسياقه الأصلي. لإصلاح هذه المشكلة:

  • قم بتغيير أمر السياق بالتسمية:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • قم بتغيير أمر السياق باستخدام تسمية الارتباط:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • استعادة السياق (في كلتا الحالتين): # restorecon -vR /var/www/html/

17 إذا SELinux تحتاج إلى معرفتهأن HTTPD يستمع على المنفذ 8585، أخبر SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18 SELinux تحتاج إلى معرفته القيم المنطقية التي تسمح بتغيير أجزاء من سياسة SELinux في وقت التشغيل دون معرفة استبدال سياسة SELinux. على سبيل المثال، إذا كنت تريد من httpd إرسال بريد إلكتروني، فأدخل: # setsebool -P httpd_can_sendmail 1

19 SELinux تحتاج إلى معرفته القيم المنطقية لتمكين/تعطيل إعدادات SELinux:

  • لرؤية كافة القيم المنطقية: # getsebool -a
  • لمشاهدة وصف كل منها: # semanage boolean -l
  • لتعيين قيمة منطقية: # setsebool [_boolean_] [1|0]
  • للتثبيت الدائم، أضف -P. على سبيل المثال: # setsebool httpd_enable_ftp_server 1 -P

20 قد تحتوي سياسات/تطبيقات SELinux على أخطاء، بما في ذلك:

  • مسارات التعليمات البرمجية غير عادية
  • التكوينات
  • إعادة توجيه stdout
  • تسرب واصف الملف
  • الذاكرة القابلة للتنفيذ
  • مكتبات سيئة البناء

التذاكر المفتوحة (لا تقدم تقريرًا إلى Bugzilla؛ Bugzilla ليس لديها اتفاقية مستوى الخدمة).

21 قد تتعرض معلوماتك للخطرإذا كان لديك مجالات مقيدة تحاول:

  • تحميل وحدات النواة
  • تعطيل وضع SELinux المفروض
  • اكتب ل etc_t/shadow_t
  • تغيير قواعد iptables

22 أدوات SELinux لتطوير وحدات السياسة:

# yum -y install setroubleshoot setroubleshoot-server

إعادة التشغيل أو إعادة التشغيل auditd بعد التثبيت.

23 استخدم

journalctl

لعرض قائمة بجميع السجلات المرتبطة setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24 استخدم journalctl لسرد جميع السجلات المرتبطة بعلامة SELinux محددة. على سبيل المثال:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25 في حالة حدوث خطأ SELinux، استخدم السجل setroubleshoot تقديم العديد من الحلول الممكنة.
على سبيل المثال ، من journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26 التسجيل: يقوم SELinux بتسجيل المعلومات في العديد من الأماكن:

  • / فار / سجل / رسائل
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27 التسجيل: البحث عن أخطاء SELinux في سجل التدقيق:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28 للعثور على رسائل SELinux Access Vector Cache (AVC) لخدمة معينة:

# ausearch -m avc -c httpd

29 فائدة audit2allow يجمع المعلومات من سجلات العمليات المحظورة ثم ينشئ قواعد سياسة أذونات SELinux. على سبيل المثال:

  • لإنشاء وصف يمكن قراءته عن طريق الإنسان لسبب رفض الوصول: # audit2allow -w -a
  • لعرض قاعدة فرض النوع التي تسمح بالوصول المرفوض: # audit2allow -a
  • لإنشاء وحدة نمطية مخصصة: # audit2allow -a -M mypolicy
  • خيار -M ينشئ ملف فرض النوع (.te) بالاسم المحدد ويجمع القاعدة في حزمة السياسة (.pp): mypolicy.pp mypolicy.te
  • لتثبيت وحدة مخصصة: # semodule -i mypolicy.pp

30 لتكوين عملية منفصلة (مجال) للعمل في الوضع المسموح به: # semanage permissive -a httpd_t

31 إذا لم تعد تريد أن يكون النطاق مسموحًا به: # semanage permissive -d httpd_t

32 لتعطيل كافة النطاقات المسموح بها: # semodule -d permissivedomains

33 تمكين سياسة MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

تأكد من تشغيل SELinux في الوضع المسموح به: # setenforce 0
استخدم البرنامج النصي fixfilesللتأكد من إعادة تسمية الملفات عند إعادة التشغيل التالية:

# fixfiles -F onboot # reboot

34 قم بإنشاء مستخدم بنطاق MLS محدد: # useradd -Z staff_u john

باستخدام الأمر useradd، قم بتعيين المستخدم الجديد إلى مستخدم SELinux موجود (في هذه الحالة، staff_u).

35 لعرض التعيين بين مستخدمي SELinux وLinux: # semanage login -l

36 تحديد نطاق محدد للمستخدم: # semanage login --modify --range s2:c100 john

37 لتصحيح تسمية الدليل الرئيسي للمستخدم (إذا لزم الأمر): # chcon -R -l s2:c100 /home/john

38 لعرض الفئات الحالية: # chcat -L

39 لتغيير الفئات أو البدء في إنشاء الفئات الخاصة بك، قم بتحرير الملف كما يلي:

/etc/selinux/_<selinuxtype>_/setrans.conf

40 لتشغيل أمر أو برنامج نصي في ملف ودور وسياق مستخدم محدد:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t سياق الملف
  • -r سياق الدور
  • -u سياق المستخدم

41 الحاويات التي تعمل مع تعطيل SELinux:

  • بودمان: # podman run --security-opt label=disable …
  • عامل ميناء: # docker run --security-opt label=disable …

42 إذا كنت بحاجة إلى منح الحاوية حق الوصول الكامل إلى النظام:

  • بودمان: # podman run --privileged …
  • عامل ميناء: # docker run --privileged …

والآن أنت تعرف الإجابة بالفعل. لذا من فضلك: لا داعي للذعر وقم بتمكين SELinux.

المراجع:

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

إضافة تعليق