أنظمة أمان Linux

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

خلفية وحدات أمان Linux و SELinux

Security Enhanced Linux عبارة عن مجموعة من القواعد وآلية الوصول القائمة على نماذج الوصول الإلزامية والقائمة على الأدوار لحماية أنظمة Linux من التهديدات المحتملة وإصلاح نقاط الضعف في التحكم في الوصول التقديري (DAC) ، وهو نظام أمان Unix التقليدي. نشأ المشروع في أحشاء وكالة الأمن القومي الأمريكية ، وشارك المقاولون Secure Computing Corporation و MITER ، بالإضافة إلى عدد من المعامل البحثية ، بشكل مباشر في التطوير.

أنظمة أمان Linux
وحدات أمان Linux

ساهم Linus Torvalds بعدد من الملاحظات حول التطورات الجديدة لوكالة الأمن القومي بحيث يمكن تضمينها في الفرع الرئيسي لنواة Linux. وصف بيئة مشتركة ، مع مجموعة من المعترضات لإدارة العمليات على الكائنات ومجموعة من بعض الحقول الوقائية في هياكل بيانات النواة لتخزين السمات المقابلة. يمكن بعد ذلك استخدام هذه البيئة بواسطة وحدات kernel القابلة للتحميل لتنفيذ أي نموذج أمان مطلوب. دخل LSM بالكامل في Linux kernel v2.6 في عام 2003.

يشتمل إطار عمل LSM على حقول حراسة في هياكل البيانات واستدعاءات وظيفة الاعتراض في النقاط الحرجة في كود النواة لإدارتها وتنفيذ التحكم في الوصول. كما أنه يضيف وظائف لتسجيل وحدات الأمان. تحتوي الواجهة / sys / kernel / security / lsm على قائمة بالوحدات النشطة في النظام. يتم تخزين خطافات LSM في قوائم يتم استدعاؤها بالترتيب المحدد في CONFIG_LSM. يتم تضمين وثائق الخطاف التفصيلية في ملف رأس include / lsm_hooks.h.

أتاح النظام الفرعي LSM إكمال التكامل الكامل لـ SELinux لنفس الإصدار من Linux kernel v2.6 المستقر. على الفور ، أصبحت SELinux المعيار الفعلي لبيئة Linux الآمنة وأصبحت جزءًا من التوزيعات الأكثر شيوعًا: RedHat Enterprise Linux و Fedora و Debian و Ubuntu.

قائمة المصطلحات

  • هوية - مستخدم SELinux ليس هو نفسه معرّف مستخدم Unix / Linux المعتاد ، فيمكنهما التعايش على نفس النظام ، لكنهما مختلفان تمامًا من حيث الجوهر. يمكن أن يتوافق كل حساب قياسي في Linux مع واحد أو أكثر في SELinux. تعد هوية SELinux جزءًا من سياق الأمان العام الذي يحدد المجالات التي يمكنك الانضمام إليها والتي لا يمكنك الانضمام إليها.
  • المجالات - في SELinux ، المجال هو سياق تنفيذ الموضوع ، أي العملية. يحدد المجال بشكل مباشر الوصول الذي تتمتع به العملية. النطاق هو في الأساس قائمة بما يمكن أن تفعله العمليات أو الإجراءات التي يمكن أن تقوم بها العملية بأنواع مختلفة. بعض الأمثلة على المجالات هي sysadm_t لإدارة النظام ، و user_t وهو مجال مستخدم عادي غير مميز. يعمل نظام init في المجال init_t ، ويتم تشغيل العملية المسماة في المجال named_t.
  • دور - شيء يعمل كوسيط بين المجالات ومستخدمي SELinux. تحدد الأدوار المجالات التي يمكن للمستخدم أن ينتمي إليها وأنواع الكائنات التي يمكن للمستخدم الوصول إليها. آلية التحكم في الوصول هذه تمنع تهديد هجوم تصعيد الامتياز. تمت كتابة الأدوار في نموذج أمان التحكم في الوصول المستند إلى الدور (RBAC) المستخدم في SELinux.
  • أنواع - سمة قائمة فرض النوع التي تم تعيينها لكائن وتحدد من سيكون له حق الوصول إليه. على غرار تحديد المجال ، باستثناء أن المجال ينطبق على العملية ، بينما ينطبق النوع على كائنات مثل الدلائل والملفات والمآخذ وما إلى ذلك.
  • الموضوعات والأشياء - العمليات عبارة عن مواضيع ويتم تشغيلها في سياق معين أو مجال أمان. موارد نظام التشغيل: الملفات ، والمجلدات ، والمآخذ ، وما إلى ذلك ، هي كائنات يتم تخصيصها لنوع معين ، وبعبارة أخرى ، مستوى من السرية.
  • سياسات SELinux - تستخدم SELinux مجموعة متنوعة من السياسات لحماية النظام. تحدد سياسة SELinux وصول المستخدم إلى الأدوار والأدوار للنطاقات والمجالات للأنواع. أولاً ، يُصرح للمستخدم بالحصول على دور ، ثم يتم تفويض الدور للوصول إلى المجالات. أخيرًا ، قد يكون للمجال حق الوصول إلى أنواع معينة من الكائنات فقط.

هندسة LSM و SELinux

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

أنظمة أمان Linux
كومة من الشيكات LSM

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

تبنت SELinux بنية أمان Flask لنظام تشغيل أبحاث Fluke ، وتحديداً مبدأ الامتياز الأقل. جوهر هذا المفهوم ، كما يوحي اسمه ، هو منح المستخدم أو معالجة تلك الحقوق الضرورية فقط لتنفيذ الإجراءات المقصودة. يتم تنفيذ هذا المبدأ باستخدام كتابة الوصول القسري ، لذا فإن التحكم في الوصول لـ SELinux يعتمد على domain => type model.

من خلال كتابة الوصول القسري ، يتمتع SELinux بقدرات تحكم في الوصول أكبر بكثير من نموذج DAC التقليدي المستخدم في أنظمة تشغيل Unix / Linux. على سبيل المثال ، يمكنك تحديد رقم منفذ الشبكة الذي سيحدث لخادم بروتوكول نقل الملفات ، والسماح لكتابة الملفات وتغييرها في مجلد معين ، ولكن لا يمكنك حذفها.

المكونات الرئيسية لـ SELinux هي:

  • خادم إنفاذ السياسة - الآلية الرئيسية لتنظيم مراقبة الدخول.
  • قاعدة بيانات سياسات أمن النظام.
  • التفاعل مع مستمع حدث LSM.
  • سيلينوكسفس - Pseudo-FS ، مثل / proc ومثبت في / sys / fs / selinux. يتم ملؤها ديناميكيًا بواسطة Linux kernel في وقت التشغيل وتحتوي على ملفات تحتوي على معلومات حالة SELinux.
  • الوصول إلى Vector Cache - آلية مساعدة لتحسين الأداء.

أنظمة أمان Linux
كيف يعمل SELinux

كل هذا يعمل على النحو التالي.

  1. الموضوع ، في مصطلحات SELinux ، يقوم بتنفيذ إجراء مسموح به على كائن بعد فحص DAC ، كما هو موضح في الصورة العليا. يذهب طلب العملية هذا إلى مستمع حدث LSM.
  2. من هناك ، يتم تمرير الطلب ، جنبًا إلى جنب مع سياق الأمان للموضوع والكائن ، إلى الوحدة النمطية SELinux Abstraction و Hook Logic المسؤولة عن التفاعل مع LSM.
  3. خادم تنفيذ السياسة هو سلطة اتخاذ القرار بشأن وصول الموضوع إلى الكائن ، ويتلقى البيانات من SELinux AnHL.
  4. لاتخاذ قرار بشأن الوصول أو الحظر ، يشير خادم تنفيذ السياسة إلى نظام التخزين المؤقت الفرعي لقواعد Access Vector Cache (AVC) الأكثر استخدامًا.
  5. إذا لم يتم العثور على حل القاعدة المطابقة في ذاكرة التخزين المؤقت ، فسيتم تمرير الطلب إلى قاعدة بيانات نهج الأمان.
  6. يتم إرجاع نتيجة البحث من قاعدة البيانات و AVC إلى Policy Enforcement Server.
  7. إذا كانت السياسة التي تم العثور عليها متوافقة مع الإجراء المطلوب ، فسيتم السماح بالعملية. خلاف ذلك ، فإن العملية محظورة.

إدارة إعدادات SELinux

يعمل SELinux في واحد من ثلاثة أوضاع:

  • الإنفاذ - التطبيق الصارم لسياسات الأمن.
  • مسموح - يُسمح بانتهاك القيود ، ويتم وضع العلامة المقابلة في السجل.
  • معطل - سياسات الأمان ليست سارية المفعول.

يمكنك معرفة الوضع الذي يوجد فيه SELinux باستخدام الأمر التالي.

[admin@server ~]$ getenforce
Permissive

تغيير الوضع قبل إعادة التشغيل ، على سبيل المثال ، اضبطه على فرض ، أو 1. تتوافق المعلمة المسموح بها مع الرمز الرقمي 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

يمكنك أيضًا تغيير الوضع عن طريق تحرير الملف:

[admin@server ~]$ 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=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE = الهدف

الاختلاف مع setenfoce هو أنه عند بدء تشغيل نظام التشغيل ، سيتم ضبط وضع SELinux وفقًا لقيمة معلمة SELINUX في ملف التكوين. بالإضافة إلى ذلك ، لا يسري فرض <=> التغييرات المعطلة إلا من خلال تحرير ملف / etc / selinux / config وبعد إعادة التشغيل.

عرض تقرير الحالة الملخص:

[admin@server ~]$ sestatus

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: 31

لعرض سمات SELinux ، تستخدم بعض أدوات المخزون الخيار -Z.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

مقارنة بإخراج ls -l العادي ، هناك عدة حقول إضافية بالتنسيق التالي:

<user>:<role>:<type>:<level>

يشير الحقل الأخير إلى شيء مثل ختم الأمان ويتكون من مزيج من عنصرين:

  • s0 - الأهمية ، تم تسجيلها أيضًا على أنها فاصل زمني منخفض المستوى وعالي المستوى
  • c0 ، c1… c1023 هي الفئة.

تغيير تكوين الوصول

استخدم semodule لتحميل وحدات SELinux وإضافتها وإزالتها.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

الفريق الأول تسجيل الدخول semanage يربط مستخدم SELinux بمستخدم نظام التشغيل ، فيدرجه الثاني. أخيرًا ، يزيل الأمر الأخير بالمفتاح -r ربط مستخدمي SELinux بحسابات نظام التشغيل. يوجد شرح لبناء جملة قيم نطاق MLS / MCS في القسم السابق.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

فريق مستخدم semanage تستخدم لإدارة التعيينات بين مستخدمي وأدوار SELinux.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

معلمات الأمر:

  • -a إضافة إدخال تعيين دور مخصص ؛
  • -l قائمة المستخدمين والأدوار المطابقة ؛
  • -d إزالة إدخال تعيين الدور المخصص ؛
  • -R قائمة الأدوار المرفقة للمستخدم ؛

الملفات والمنافذ والمنطق المنطقي

توفر كل وحدة SELinux مجموعة من قواعد تعليم الملفات ، ولكن يمكنك أيضًا إضافة القواعد الخاصة بك إذا لزم الأمر. على سبيل المثال ، نريد أن يكون لخادم الويب حقوق الوصول إلى المجلد / srv / www.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

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

وبالمثل ، يتم تمييز منافذ TCP / UDP بطريقة تسمح فقط للخدمات المناسبة بالاستماع إليها. على سبيل المثال ، لكي يستمع خادم الويب على المنفذ 8080 ، تحتاج إلى تشغيل أمر.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

يحتوي عدد كبير من وحدات SELinux على معلمات يمكن أن تأخذ قيمًا منطقية. يمكن رؤية القائمة الكاملة لهذه الخيارات باستخدام getsebool -a. يمكن تغيير القيم المنطقية باستخدام setsebool.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

التدريب العملي ، قم بالوصول إلى واجهة Pgadmin-web

ضع في اعتبارك مثالًا من الممارسة ، قمنا بتثبيت pgadmin7.6-web على RHEL 4 لإدارة قاعدة بيانات PostgreSQL. مررنا صغير بحث من خلال إعداد pg_hba.conf و postgresql.conf و config_local.py ، قم بتعيين الأذونات على المجلدات ، تثبيت وحدات Python المفقودة من النقطة. كل شيء جاهز ، اركض واحصل عليه 500 خطأ خادم داخلي.

أنظمة أمان Linux

نبدأ مع المشتبه بهم النموذجيين ، تحقق من / var / log / httpd / error_log. هناك بعض المداخل المثيرة للاهتمام هناك.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

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

على الرغم من التصميمات المرهقة ، يمكن أن تكون SELinux سهلة الاستخدام. فقط قم بتثبيت حزمة setroubleshoot واعرض سجل النظام.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

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

أنظمة أمان Linux

نقوم بتنفيذ هذه الأوامر:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

نتحقق من الوصول إلى صفحة الويب pgadmin4 ، كل شيء يعمل.

أنظمة أمان Linux

أنظمة أمان Linux

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

إضافة تعليق