Руководство системного администратора по SELinux: 42 ответа на важные вопросы
- SELinux – это система МАРКИРОВКИ, что означает, что у каждого процесса есть МЕТКИ. У каждого файла, каталога и системного объекта есть МЕТКА. Правила политики управляют доступом между помеченными процессами и помеченными объектами. Ядро обеспечивает соблюдение этих правил.
- Двумя наиболее важными концепциями являются: маркировка (файлы, процесс, порты и т. Д.) И принудительное применение типов (которое изолирует процессы друг от друга на основе типов).
- Правильный формат метки
user:role:type:level
( необязательно ). - Целью обеспечения многоуровневой безопасности (MLS) является контроль процессов ( доменов ) на основе уровня безопасности данных, которые они будут использовать. Например, секретный процесс не может читать сверхсекретные данные.
- Многокатегорийная безопасность (MCS) защищает схожие процессы друг от друга (например, виртуальные машины, механизмы OpenShift, песочницы SELinux, контейнеры и т. Д.).
6. Параметры ядра для изменения режимов SELinux при загрузке:
autorelabel=1
→ заставляет систему перемаркироватьselinux=0
→ ядро не загружает никакую часть инфраструктуры SELinuxenforcing=0
→ загрузка в разрешающем режиме
7. Если вам нужно изменить метку всей системы: если метка системы содержит большое количество ошибок, вам может потребоваться загрузка в разрешающем режиме, чтобы автоперенос метки прошел успешно.# touch /.autorelabel
#reboot
8. Чтобы проверить, включен ли SELinux: # getenforce
9. Чтобы временно включить / отключить SELinux: # setenforce [1|0]
10. Инструмент статуса SELinux: # sestatus
11. Конфигурационный файл: /etc/selinux/config
12.
- Как работает SELinux? Вот пример маркировки для веб-сервера 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
Контексты устанавливаются, когда файлы создаются на основе контекста их родительского каталога (за некоторыми исключениями). Пакеты RPM могут задавать контексты как часть установки.
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/
- Если 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
- Утечка файловых дескрипторов
- Исполняемая память
- Плохо построенные библиотеки
21. Ваша информация может быть скомпрометирована, если вы ограничили домены, пытаясь:
- Загрузить модули ядра
- Отключите принудительный режим SELinux
- Написать в
etc_t/shadow_t
- Изменить правила iptables
- Инструменты SELinux для разработки модулей политики:
# yum -y install setroubleshoot setroubleshoot-server
перезагрузите или перезапуститеauditd
после установки.
- Используйте
journalctl
для перечисления всех журналов, связанных сsetroubleshoot
:# journalctl -t setroubleshoot --since=14:20
Свежие комментарии