Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
SELinux: avc: denied { write } for comm="app" Linux / DevOps

SELinux: avc: denied { write } — Исправление блокировок SELinux в Linux

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «SELinux: avc: denied { write } for comm="app" name="file" dev=... scontext=... tcontext=... tclass=file» генерируется подсистемой безопасности SELinux (Security-Enhanced Linux / Access Vector Cache). Ошибка означает, что процесс с контекстом безопасности источника (Source Context — scontext) попытался выполнить действие (запись, чтение, привязку к порту) над объектом с целевым контекстом (Target Context — tcontext), но активная политика Mandatory Access Control (MAC) запрещает данную операцию.

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
scontextUser:Role:Type:LevelКонтекст безопасности процесса (например, system_u:system_r:httpd_t:s0).
tcontextUser:Role:Type:LevelКонтекст безопасности целевого файла/сокета (например, system_u:object_r:var_log_t:s0).
tclassObject ClassКласс целевого объекта (file, dir, tcp_socket, process).

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Экспресс-анализ ошибки через sealert и ausearch

# Установка утилит анализа SELinux:
sudo dnf install setroubleshoot-server audit

# Поиск последних блокировок AVC:
sudo ausearch -m avc -ts recent

# Получение готовых человекочитаемых рекомендаций по исправлению:
sudo sealert -a /var/log/audit/audit.log

Сценарий 2: Исправление контекста безопасности файлов (restorecon / semanage)

Если файлы были перемещены (mv) или созданы в нестандартной директории:

# Просмотр текущего контекста файла:
ls -lZ /var/www/my_app/storage

# Принудительное назначение постоянного правила контекста (например, для Nginx/Apache):
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/my_app/storage(/.*)?"

# Применение контекста к файловой системе:
sudo restorecon -R -v /var/www/my_app/storage

Сценарий 3: Включение стандартных булевых переключателей SELinux (SELinux Booleans)

Часто функционал блокируется стандартными флагами безопасности:

# Разрешить веб-серверу сетевые подключения (к БД, внешним API):
sudo setsebool -P httpd_can_network_connect 1

# Разрешить веб-серверу запись в сетевые шары NFS/CIFS:
sudo setsebool -P httpd_use_nfs 1

Сценарий 4: Генерация кастомного модуля политики через audit2allow

Если операция полностью легитимна, но не поддерживается стандартной политикой:

# Генерация и компиляция модуля политики из логов блокировок:
sudo ausearch -m avc -c "app_name" | audit2allow -M my_custom_app_policy

# Установка скомпилированного модуля:
sudo semodule -i my_custom_app_policy.pp
Не работает приложение на RHEL / Rocky Linux, а отключение SELinux запрещено регламентом?
ITSTM выполнит профессиональный аудит AVC-отказов, настроит безопасные политики SELinux Type Enforcement и обеспечит соблюдение стандартов безопасности.
Практический опыт инженера: Никогда не компилируйте audit2allow вслепую (audit2allow -a -M all_fix), так как это может случайно открыть права доступа к системным сокетам ядра. Всегда фильтруйте аудит строго по имени конкретного исполняемого бинарника (ausearch -c 'binary').

Частые вопросы (FAQ)

Почему категорически не рекомендуется отключать SELinux (SELINUX=disabled)?

Отключение SELinux снижает класс защищенности Linux-сервера до стандартной дискреционной модели (DAC), где компрометация одного сервиса дает злоумышленнику доступ ко всей ОС. Кроме того, при повторном включении потребуется длительная перемаркировка диска (autorelabel).

Чем отличается команда chcon от semanage fcontext?

Команда chcon временно меняет контекст в памяти ФС, но при следующем запуске restorecon или обновлении системы контекст сбросится на стандартный. Утилита semanage fcontext прописывает постоянное правило в базу данных политик SELinux.

Что делает режим SELinux Permissive?

В режиме Permissive (setenforce 0) SELinux не блокирует запрещенные операции, но продолжает подробно логировать все нарушения в /var/log/audit/audit.log, что идеально для отладки новых приложений.

Как разрешить сервису слушать нестандартный TCP-порт в SELinux?

Используйте утилиту semanage port. Например, добавить порт 8088 для SSH: sudo semanage port -a -t ssh_port_t -p tcp 8088.