В данной статье рассмотрены полезные примеры по настройке системы безопасности SELinux, которые могут понадобиться для корректной работы различных приложений.
Применение политик
Поиск причин блокировок со стороны SELinux
Samba
Rsyslog
Keepalived
PostgreSQL
NGINX
Использование политик
Для применения некоторых политик в Rocky Linux / CentOS, необходимо установить следующие пакеты:
dnf install policycoreutils setroubleshoot
Диагностика
Для поиска причин проблем, связанных с работой SELinux можно использовать логи и утилиты.
Для начала, мы можем убедиться, что проблема с SELinux, отключив его:
setenforce 0
Проверяем приложение. Если оно начало работать корректно, то дело в политиках безопасности. Обратно включаем:
setenforce 1
Чтобы понять, что именно не понравилось SELinux можно запустить просмотр лога:
tail -f /var/log/audit/audit.log
И начать работать с приложением, наблюдая за добавлением записей в данный лог.
Также мы можем воспользоваться утилитой:
audit2allow -b -r
Она показывает готовые политики на основе заблокированных приложений.
Samba
Политики
Список готовых политик и текущее значение смотрим командой:
getsebool -a | grep samba
Задаем политику, например, разрешить шары доманших каталого:
setsebool -P samba_enable_home_dirs=1
Ручная настройка
Посмотреть текущие настройки для samba:
semanage fcontext -l | grep samba
Задать разрешение:
semanage fcontext -a -t samba_share_t «/share/samba(/.*)?»
restorecon -R -v /share/samba
* в данном примере политика применяется к каталогу /share/samba и всем входящим папкам и файлам.
Rsyslog
Список для разрешенных портов смотрим командой:
semanage port -l | grep syslog
Если мы хотим использовать rsyslog для соединений по TCP на порту 514 вводим:
semanage port -m -t syslogd_port_t -p tcp 514
Keepalived
Keepalived может использовать notify для запуска своих скриптов. Данный скрипт должен иметь контекст безопасности keepalived_unconfined_script_exec_t .
Предположим, что наш скрипт находится по пути /etc/keepalived/notify-script.sh . Тогда команды будут такие:
semanage fcontext -a -t keepalived_unconfined_script_exec_t /etc/keepalived/notify-script.sh
restorecon -R -v /etc/keepalived/notify-script.sh
PostgreSQL
При смене каталога на нестандартный нам понадобится сменить контекст на postgresql_db_t . Это делается командами:
semanage fcontext -a -t postgresql_db_t «/data/pgsql(/.*)?»
restorecon -Rv /data/pgsql
* где /data/pgsql — предполагаемый каталог для данных postgresql.
Если этого окажется недостаточно, на уровень выше подаем команду:
chcon -Rt postgresql_db_t /data
NGINX
1) При необходимости загружать файлы через nginx, каталог должен иметь контекст httpd_sys_rw_content_t . Задаем политику командой:
semanage fcontext -a -t httpd_sys_rw_content_t «/opt/upload(/.*)?»
* где /opt/upload — корневой каталог, в который будет выполняться загрузка файлов.
Применяем политику на каталог:
restorecon -Rv /opt/upload
2) Чтобы nginx мог работать в режиме обратного прокси, применяем политику:
setsebool httpd_can_network_connect 1 -P