Библиотека сайта rus-linux.net
Серверы Linux. Часть VII. Система контроля доступа SELinux
Оригинал: Introduction to SELinuxАвтор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 15 июля 2015 г.
Глава 19. Знакомство с системой контроля доступа SELinux
19.18. Расширенные атрибуты файлов
Расширенные атрибуты файлов используются SELinux
для хранения контекстов безопасности. Эти атрибуты могут быть исследованы с помощью утилиты ls
в процессе функционирования SELinux
.
[root@RHEL5 home]# ls --context drwx------ paul paul system_u:object_r:user_home_dir_t paul drwxr-xr-x root root user_u:object_r:user_home_dir_t project42 drwxr-xr-x root root user_u:object_r:user_home_dir_t project55 [root@RHEL5 home]# ls -Z drwx------ paul paul system_u:object_r:user_home_dir_t paul drwxr-xr-x root root user_u:object_r:user_home_dir_t project42 drwxr-xr-x root root user_u:object_r:user_home_dir_t project55 [root@RHEL5 home]#
В том случае, если SELinux не функционирует, для исследования упомянутых атрибутов может использоваться инструмент getfattr
.
[root@RHEL5 etc]# getfattr -m . -d hosts # file: hosts security.selinux="system_u:object_r:etc_t:s0\000"
19.19. Контекст безопасности процесса
Для просмотра контекстов безопасности SELinux отдельных процессов в утилиту ps
была добавлена поддержка нового параметра.
[root@RHEL5 etc]# ps -ZC mingetty LABEL PID TTY TIME CMD system_u:system_r:getty_t 2941 tty1 00:00:00 mingetty system_u:system_r:getty_t 2942 tty2 00:00:00 mingetty
19.20. Утилита chcon
Используйте утилиту chcon
для изменения контекстов безопасности SELinux.
В данном примере показана методика использования утилиты chcon
для изменения типа
файла.
[root@rhel55 ~]# ls -Z /var/www/html/test42.txt -rw-r--r-- root root user_u:object_r:httpd_sys_content_t /var/www/html/test4\ 2.txt [root@rhel55 ~]# chcon -t samba_share_t /var/www/html/test42.txt [root@rhel55 ~]# ls -Z /var/www/html/test42.txt -rw-r--r-- root root user_u:object_r:samba_share_t /var/www/html/test42.txt
Ознакомьтесь со страницей руководства man chcon
.
19.21. Пример
В отношении веб-сервера Apache 2
по умолчанию используется политика целевого ограничения доступа к ресурсам SELinux
(targeted
). В следующем примере показано, что любой файл, созданный в директории /var/www/html
, будет по умолчанию получать тип httpd_sys_content_t
.
[root@centos65 ~]# touch /var/www/html/test42.txt [root@centos65 ~]# ls -Z /var/www/html/test42.txt -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/h\ tml/test42.txt
Файлы, создаваемые в других директориях, не получают данного типа.
[root@centos65 ~]# touch /root/test42.txt [root@centos65 ~]# ls -Z /root/test42.txt -rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/test42.txt
Убедитесь в том, что служба веб-сервера Apache 2
исполняется.
[root@centos65 ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd:
Сработает ли следующая команда? Да, сработает.
[root@centos65 ~]# wget http://localhost/test42.txt --2014-04-12 20:56:47-- http://localhost/test42.txt Распознаётся localhost... ::1, 127.0.0.1 Подключение к localhost|::1|:80... соединение установлено. HTTP-запрос отправлен. Ожидание ответа... 200 OK Длина: 0 [text/plain] Сохранение в: test42.txt ...
Почему же она работает? Потому, что процессы веб-сервера Apache 2 исполняются в домене httpd_t
, а файлы из директории /var/www/html
имеют тип httpd_sys_content_t
.
[root@centos65 ~]# ps -ZC httpd | head -4 LABEL PID TTY TIME CMD unconfined_u:system_r:httpd_t:s0 1666 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 1668 ? 00:00:00 httpd unconfined_u:system_r:httpd_t:s0 1669 ? 00:00:00 httpd
Теперь давайте переведем SELinux в режим принудительного использования политик ограничения доступа
(Enforcing
) и изменим тип
рассматриваемого файла.
[root@centos65 ~]# chcon -t samba_share_t /var/www/html/test42.txt [root@centos65 ~]# ls -Z /var/www/html/test42.txt -rw-r--r--. root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/t\ est42.txt [root@centos65 ~]# setenforce 1 [root@centos65 ~]# getenforce Enforcing
Теперь возможны два варианта: либо сервер будет корректно функционировать, либо сервер не сможет получить доступ к файлу. Сервер корректно функционирует при использовании SELinux
в разрешающем режиме
(Permissive
), но не может получить доступа к файлу в режиме принудительного использования политик ограничения доступа
(Enforcing
).
[root@centos65 ~]# wget http://localhost/test42.txt --2014-04-12 21:05:02-- http://localhost/test42.txt Распознаётся localhost... ::1, 127.0.0.1 Подключение к localhost|::1|:80... соединение установлено. HTTP-запрос отправлен. Ожидание ответа... 403 Forbidden 2014-04-12 21:05:02 ОШИБКА 403: Forbidden.
После этого вы сможете обнаружить в файле журнала сложное сообщение...
[root@centos65 ~]# tail -3 /var/log/audit/audit.log type=SYSCALL msg=audit(1398200702.803:64): arch=c000003e syscall=4 succ\ ess=no exit=-13 a0=7f5fbc334d70 a1=7fff553b4f10 a2=7fff553b4f10 a3=0 it\ ems=0 ppid=1666 pid=1673 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=4\ 8 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin\ /httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null) type=AVC msg=audit(1398200702.804:65): avc: denied { getattr } for p\ id=1673 comm="httpd" path="/var/www/html/test42.txt" dev=dm-0 ino=26324\ 1 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:objec\ t_r:samba_share_t:s0 tclass=file type=SYSCALL msg=audit(1398200702.804:65): arch=c000003e syscall=6 succ\ ess=no exit=-13 a0=7f5fbc334e40 a1=7fff553b4f10 a2=7fff553b4f10 a3=1 it\ ems=0 ppid=1666 pid=1673 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=4\ 8 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin\ /httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
А в файле системного журнала /var/log/messages
не будет никаких сообщений о неудачной загрузке файла.
19.22. Приложение setroubleshoot
Приведенное выше сообщение из файла журнала является не самым полезным сообщением для диагностики системы, но программные компоненты из двух следующих пакетов программного обеспечения могут значительно упростить вашу жизнь.
[root@centos65 ~]# yum -y install setroubleshoot setroubleshoot-server
Для того, чтобы данные программные компоненты были в рабочем состоянии, необходимо перезагрузить систему
...
После перезагрузки системы, перезапуска службы сервера httpd, повторной активации режима принудительного использования политик ограничения доступа SELinux попробуем снова воспользоваться утилитой wget для загрузки файла... который снова не будет передан сервером (из-за огрничений SELinux).
[root@centos65 ~]# service httpd restart Stopping httpd: [FAILED] Starting httpd: [ OK ] [root@centos65 ~]# getenforce Permissive [root@centos65 ~]# setenforce 1 [root@centos65 ~]# getenforce Enforcing [root@centos65 ~]# wget http://localhost/test42.txt --2014-04-12 21:44:13-- http://localhost/test42.txt Распознаётся localhost... ::1, 127.0.0.1 Подключение к localhost|::1|:80... соединение установлено. HTTP-запрос отправлен. Ожидание ответа... 403 Forbidden 2014-04-12 21:44:13 ОШИБКА 403: Forbidden.
Файл журнала из директории /var/log/audit/
будет все так же бесполезен, но в этот раз следует обратить особое внимание на файл системного журнала /var/log/messages
.
[root@centos65 ~]# tail -2 /var/log/messages Apr 12 21:44:16 centos65 setroubleshoot: SELinux is preventing /usr/sbin/h\ ttpd from getattr access on the file /var/www/html/test42.txt. For complete \ SELinux messages. run sealert -l b2a84386-54c1-4344-96fb-dcf969776696 Apr 12 21:44:16 centos65 setroubleshoot: SELinux is preventing /usr/sbin/h\ ttpd from getattr access on the file /var/www/html/test42.txt. For complete \ SELinux messages. run sealert -l b2a84386-54c1-4344-96fb-dcf969776696
Воспользуемся приведенной в системном журнале командой...
[root@centos65 ~]# sealert -l b2a84386-54c1-4344-96fb-dcf969776696 SELinux is preventing /usr/sbin/httpd from getattr access on the file /va\ r/www/html/test42.txt. ***** Plugin restorecon (92.2 confidence) suggests ********************* If you want to fix the label. /var/www/html/test42.txt default label should be httpd_sys_content_t. Then you can run restorecon. Do # /sbin/restorecon -v /var/www/html/test42.txt ...
Воспользуемся приведенным бесхитростным советом и попробуем загрузить наш файл снова:
[root@centos65 ~]# /sbin/restorecon -v /var/www/html/test42.txt /sbin/restorecon reset /var/www/html/test42.txt context unconfined_u:objec\ t_r:samba_share_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0 [root@centos65 ~]# wget http://localhost/test42.txt --2014-04-12 21:54:03-- http://localhost/test42.txt Распознаётся localhost... ::1, 127.0.0.1 Подключение к localhost|::1|:80... соединение установлено. HTTP-запрос отправлен. Ожидание ответа... 200 OK
Все работает!
19.23. Логические значения
Логические значения по своей сути являются переключателями, регулирующими ограничения политики доступа (on
- ограничение активировано, off
- деактивировано).
[root@centos65 ~]# getsebool -a | head abrt_anon_write --> off abrt_handle_event --> off allow_console_login --> on allow_cvs_read_shadow --> off allow_daemons_dump_core --> on allow_daemons_use_tcp_wrapper --> off allow_daemons_use_tty --> on allow_domain_fd_use --> on allow_execheap --> off allow_execmem --> on
Вы можете устанавливать и получать отдельные логические значения.
[root@centos65 ~]# setsebool httpd_read_user_content=1 [root@centos65 ~]# getsebool httpd_read_user_content httpd_read_user_content --> on [root@centos65 ~]# setsebool httpd_enable_homedirs=1 [root@centos65 ~]# getsebool httpd_enable_homedirs httpd_enable_homedirs --> on
Вы можете устанавливать эти логические значения на постоянной основе.
[root@centos65 ~]# setsebool -P httpd_enable_homedirs=1 [root@centos65 ~]# setsebool -P httpd_read_user_content=1
В результате использования данных команд осуществляется повторная генерация файла описания логических значений из директории /etc/selinux/targeted
(именно поэтому в файле присутствует комментарий о нежелательности его непосредственного редактирования)!
[root@centos65 ~]# cat /etc/selinux/targeted/modules/active/booleans.local # This file is auto-generated by libsemanage # Do not edit directly. httpd_enable_homedirs=1 httpd_read_user_content=1
Предыдущий раздел: | Оглавление | Следующий раздел: |
19.12. Виртуальная файловая система /selinux | Глава 20. Система контроля версий git |