SELINUX_AVC_DENIED
Linux / DevOps
Траблшутинг ошибок SELinux: восстановление контекстов restorecon и audit2allow
- Ошибки
Permission deniedпри корректно выставленных правах POSIX (777 / chown). - Логи ядра фиксируют события
type=AVC msg=audit(...): avc: denied { read/write/connect }. - Сервисы (Nginx, PostgreSQL, Redis) не могут открыть сокеты, прочитать конфиги или смонтированные папки.
1. Проверка режима работы SELinux
sestatus
setenforce 0 # Временный перевод в Permissive для локализации проблемы2. Анализ журнала блокировок AVC
grep "AVC" /var/log/audit/audit.log | tail -n 25
sealert -a /var/log/audit/audit.log3. Восстановление и назначение контекстов безопасности
# Просмотр текущего контекста
ls -dZ /var/www/html
# Исправление контекста файлов
restorecon -Rv /var/www/html
# Назначение постоянного контекста нестандартной директории
semanage fcontext -a -t httpd_sys_content_t "/opt/app/static(/.*)?"
restorecon -Rv /opt/app/static4. Включение встроенных Boolean параметров
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_use_nfs 15. Генерация кастомной политики через audit2allow
grep "my_service" /var/log/audit/audit.log | audit2allow -M my_service_fix
semodule -i my_service_fix.pp
setenforce 1
Практический опыт инженера:
Не отключайте SELinux полностью (SELINUX=disabled). Переведите его в Permissive (setenforce 0), соберите журнал через audit2allow и загрузите скомпилированный модуль политики.
Частые вопросы (FAQ)
Почему после команды mv контекст SELinux нарушается, а после cp — нет?
Команда mv переносит inode файла с его исходным контекстом безопасности из исходной папки. Команда cp создает новый файл и автоматически наследует контекст целевого каталога.
Как открыть нестандартный порт TCP для службы под SELinux?
Используйте semanage: semanage port -a -t http_port_t -p tcp 8088.