SystemdDoctor
служба не работает selinux права

SELinux: avc denied в журнале аудита

Записи avc: denied означают, что операцию запретил SELinux. Права на файлы при этом в порядке, и без журнала аудита причина не видна. Отключать SELinux целиком — плохой ответ: обычно достаточно поправить метку файла.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Неверная метка файла или каталога

    Файлы, установленные вручную или скопированные из домашнего каталога, получают неподходящий тип. Политика не разрешает службе работать с таким типом.

  2. Служба слушает нестандартный порт

    Политика разрешает службе только определённые порты. Перенос веб-сервера на порт 8081 без правки политики запрещается.

  3. Нужна логическая переменная политики

    Часть возможностей выключена по умолчанию: исходящие соединения веб-сервера, доступ к домашним каталогам. Они включаются переключателями политики.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Записи о запретах: тип источника, тип цели, операция.

sudo ausearch -m avc -ts recent | tail -20

Человеческое объяснение запрета и подсказка, что делать.

sudo ausearch -m avc -ts recent | audit2allow -w 2>/dev/null | head -20

Режим SELinux: в permissive запреты только записываются.

getenforce

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Неверная метка файла или каталога
Почему происходит
Файлы, установленные вручную или скопированные из домашнего каталога, получают неподходящий тип. Политика не разрешает службе работать с таким типом.
Как проверить
Посмотрите метки и записи аудита.
ls -Z /var/www/site/index.html 2>/dev/null
sudo ausearch -m avc -ts recent | tail -10
Как исправить
Назначьте правильный тип и восстановите контексты по каталогу.
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/site(/.*)?" && sudo restorecon -R -v /var/www/site
2. Служба слушает нестандартный порт
Почему происходит
Политика разрешает службе только определённые порты. Перенос веб-сервера на порт 8081 без правки политики запрещается.
Как проверить
Посмотрите разрешённые порты для типа.
sudo semanage port -l | grep -i http
sudo ausearch -m avc -ts recent | grep -i port
Как исправить
Добавьте порт в политику для нужного типа.
sudo semanage port -a -t http_port_t -p tcp 8081
3. Нужна логическая переменная политики
Почему происходит
Часть возможностей выключена по умолчанию: исходящие соединения веб-сервера, доступ к домашним каталогам. Они включаются переключателями политики.
Как проверить
Посмотрите доступные переключатели.
sudo getsebool -a | grep -i httpd | head -10
Как исправить
Включите нужный переключатель постоянно.
sudo setsebool -P httpd_can_network_connect on

Пример вывода

Веб-сервер не может прочитать файл с неверной меткой. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

audit[4100]: AVC avc:  denied  { read } for  pid=4100 comm="nginx" name="index.html" dev="vda2" ino=131074 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
nginx[4100]: [error] open() "/var/www/site/index.html" failed (13: Permission denied)

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация SELinux: устранение запретов документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено файлом с меткой домашнего каталога в корне сайта.
    собственная проверка, systemd 255
    сверено 15 сентября 2026