Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Серверы Linux. Часть VII. Система контроля доступа SELinux

Оригинал: Introduction to SELinux
Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.

Глава 19. Знакомство с системой контроля доступа SELinux

Linux с улучшенной безопасностью (Security Enhanced Linux или SELinux) является набором модификаций ядра Linux, разработанных Агентством Национальной Безопасности США (NSA), с целью добавления в ядро Linux механизма для реализации различных политик безопасности. Набор модификаций SELinux был представлен в виде программного продукта с открытым исходным кодом в конце 2000-х годов. С момента выпуска версии 2.6 ядра Linux данный набор модификаций стал его частью.

Технология SELinux позволяет повысить безопасность системы! SELinux может контролировать права доступа пользователей к файлам и процессам. Даже в том случае, если в отношении файла используется команда chmod 777, SELinux все еще может запретить приложениям осуществлять доступ к нему (при этом следует учесть, что права доступа UNIX проверяются в первую очередь!). SELinux удается осуществлять контроль доступа благодаря присваиванию пользователям ролей (roles), которые представляют контексты безопасности (security contexts). Администраторы систем имеют возможность установки очень строгих прав доступа, соответствующих ролям.

Поддержка технологии SELinux присутствует в новейших версиях дистрибутивов Red Hat Enterprise Linux, Debian, CentOS, Fedora и многих других.

19.1. Режимы работы SELinux

SELinux может работать в трех режимах: режим принудительного использования политик доступа (enforcing), разрешающий режим (permissive) и режим отключения (disabled). Режим принудительного использования политик доступа (enforcing) предусматривает обязательную установку всех ограничений доступа, которые позволяют разграничивать доступ к тем или иным ресурсам на основе правил SELinux (selinux rules). Разрешительный режим (permissive) не предусматривает установки реальных ограничений доступа, но позволяет добавлять в системный журнал записи об операциях, которые могли бы быть запрещены в случае работы в режиме принудительного использования политик доступа. Режим отключения (disabled) позволяет полностью отключить SELinux.

19.2. Журналирование событий

Убедитесь в том, что служба syslog исполняется и активирована на этапе загрузки системы для возможности сохранения сообщений об отказах в доступе к ресурсам со стороны SELinux в файле журнала /var/log/messages.

[root@rhel55 ~]# chkconfig --list syslog
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off

Также убедитесь в том, что служба auditd исполняется и активирована на этапе загрузки системы, ведь она позволяет сохранять более простые для чтения сообщения в файле журнала аудита системы /var/log/audit/audit.log.

[root@rhel55 ~]# chkconfig --list auditd
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

В том случае, если упомянутые службы не активированы, выполните команды chkconfig --levels 2345 auditd on и service auditd start.

[root@rhel55 ~]# service auditd status
auditd (pid  1660) is running...
[root@rhel55 ~]# service syslog status
syslogd (pid  1688) is running...
klogd (pid  1691) is running...

После этого вы сможете узнать из файла системного журнала /var/log/messages о том, что технология SELinux не используется.

root@deb503:~# grep -i selinux /var/log/messages
Jun 25 15:59:34 deb503 kernel: [    0.084083] SELinux:  Disabled at boot.

Или используется.

root@deb503:~# grep SELinux /var/log/messages | grep -i Init
Jun 25 15:09:52 deb503 kernel: [    0.084094] SELinux:  Initializing.

19.3. Активация SELinux

В дистрибутиве RHEL вы можете использовать приложения с графическим интерфейсом для активации технологии SELinux, в то время, как в дистрибутиве Debian вам придется использовать команду selinux-activate. Для завершения процесса активации технологии SELinux требуется перезагрузка системы.

root@deb503:~# selinux-activate 
Activating SE Linux
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.26-2-686
Updating /boot/grub/menu.lst ... done

SE Linux is activated.  You may need to reboot now.

19.4. Утилита getenforce

Используйте утилиту getenforce для проверки режима работы SELinux (Enforced - режим принудительного использования политик доступа, Disabled - режим отключения или Permissive - разрешающий режим).

[root@rhel55 ~]# getenforce 
Permissive

Файл из виртуальной файловой системы /selinux/enforce содержит значение 1, если SELinux работает в режиме принудительного использования политик доступа или 0, если SELinux работает в разрешающем режиме.

root@fedora13 ~# cat /selinux/enforce 
root@fedora13 ~#

19.5. Утилита setenforce

Вы можете использовать утилиту setenforce для переключения между разрешительным режимом (Permissive) и режимом принудительного использования политик ограничения доступа (Enforcing) после активации SELinux.

[root@rhel55 ~]# setenforce Enforcing
[root@rhel55 ~]# getenforce 
Enforcing
[root@rhel55 ~]# setenforce Permissive
[root@rhel55 ~]# getenforce 
Permissive

Или же вы можете просто использовать значения 0 и 1 в качестве аргументов.

[root@centos65 ~]# setenforce 1
[root@centos65 ~]# getenforce 
Enforcing
[root@centos65 ~]# setenforce 0
[root@centos65 ~]# getenforce 
Permissive
[root@centos65 ~]#

19.6. Утилита sestatus

Вы можете ознакомиться с текущим состоянием механизма SELinux и используемой политикой, воспользовавшись утилитой sestatus.

[root@rhel55 ~]# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          permissive
Policy version:                 21
Policy from config file:        targeted

19.7. Политика ограничения доступа

На большинстве серверов, работающих под управлением дистрибутивов от компании Red Hat, используется политика целевого ограничения доступа (targeted). Многоуровневая политика ограничения доступа (MLS) используется лишь такими организациями, как Агентство национальной безопасности США (NSA), Федеральное бюро расследований США (FBI), Центральное разведывательное управление США (CIA), Министерство обороны США (DOD), Школа права Гарвардского университета (HLS).

Политика целевого ограничения доступа позволяет защитить тысячи процессов, при этом позволяя другим процессам быть 'неограниченными' ('unconfined') в своих возможностях (такие процессы могут выполнять любые операции).

19.8. Файл конфигурации /etc/selinux/config

Главный файл конфигурации SELinux расположен по пути /etc/selinux/config. При работе в разрешающем режиме (permissive) данный файл будет выглядеть следующим образом. Политика целевого ограничения доступа (targeted) также устанавливается в рамках файла конфигурации /etc/selinux/config.

[root@centos65 ~]# 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 - SELinux is fully disabled.
SELINUX=permissive
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

19.9. Избирательное или мандатное управление доступом

Стандартный механизм прав доступа UNIX использует модель избирательного управления доступом (Discretionary Access Control, DAC) для установки прав доступа к файлам. Это означает, что пользователь, владеющий файлом, может сделать этот файл общедоступным, просто выполнив команду chmod 777 $имя_файла.

В случае задействования технологии SELinux ядро ОС будет использовать модель мандатного управления доступом (Mandatory Access Control, MAC), которая позволяет строго ограничить спектр действий процессов или программных потоков в отношении файлов (заменяя тем самым модель избирательного управления доступом). Ядро ОС ограничивает процессы минимальными правами доступа к ресурсам, требуемыми для их корректной работы.

Модель мандатного управления доступом SELinux предусматривает маркировку и использование типов ресурсов! Файлы, процессы и другие ресурсы маркируются в соответствии с контекстом SELinux. В случае файлов используются расширенные атрибуты, в случае процессов - внутренние механизмы ядра ОС.

В SELinux используется следующий формат маркировки:

пользователь:роль:тип:(уровень)

При использовании политики целевого ограничения доступа (targeted) задействуется лишь поле типа ресурса.

19.10. Команда ls -Z

Для того, чтобы ознакомиться с правами доступа к файлу модели избирательного управления доступом, следует использовать команду ls -l, благодаря которой будет выведена информация о пользователе и группе пользователей, владеющих файлом, а также о правах доступа к последнему.

Специально для вывода информации о правах доступа модели мандатного управления доступом был добавлен параметр -Z утилиты ls. Из приведенного ниже вывода ясно, что значением поля типа файла из директории /root является admin_home_t.

[root@centos65 ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
[root@centos65 ~]# useradd -m -s /bin/bash pol
[root@centos65 ~]# ls -Z /home/pol/.bashrc
-rw-r--r--. pol pol unconfined_u:object_r:user_home_t:s0 /home/pol/.bashrc

19.11. Параметр -Z других утилит

Существуют и некоторые другие утилиты, поддерживающие параметр -Z:

mkdir -Z
cp -Z
ps -Z
netstat -Z
...

Предыдущий раздел: Оглавление Следующий раздел:
Глава 18. Первый взгляд на версию 4 сервера Samba   19.12. Виртуальная файловая система /selinux