Половина «неведомых» ошибок Битрикс — это права и SELinux. Разбираем, кто должен владеть файлами, какие режимы ставить каталогам, как работают контексты SELinux в BitrixEnv и как чинить Permission denied, не отключая защиту целиком.
Владелец файлов и группы
В BitrixEnv все файлы сайта принадлежат пользователю и группе bitrix:bitrix. Веб-сервер (Apache) работает от этого же пользователя, поэтому конфликтов «файл создал PHP, а прочитать не может nginx» не возникает. После любой ручной операции — распаковки дистрибутива, копирования, git pull — возвращайте владельца:
chown -R bitrix:bitrix /home/bitrix/www
Режимы доступа chmod
Битрикс рекомендует умеренно строгие права: каталоги — 755, файлы — 644, служебные конфиги с секретами — 600. Массовая установка:
find /home/bitrix/www -type d -exec chmod 755 {} \;find /home/bitrix/www -type f -exec chmod 644 {} \;
| Объект | Режим | Почему |
|---|---|---|
| Каталоги | 755 | Обход и чтение, запись только владельцу |
| Файлы | 644 | Чтение всем, запись владельцу |
| dbconn.php, .settings.php | 600 | Пароли БД — только владельцу |
| /upload, /bitrix/cache | 755 + запись bitrix | PHP пишет кеш и загрузки |
Что такое SELinux и режимы
SELinux — механизм мандатного контроля доступа в RHEL-системах. Он навешивает на файлы и процессы контексты безопасности и разрешает операции только по политике, даже если обычные права это позволяют. Режимы:
Enforcing— политика применяется, нарушения блокируются;Permissive— нарушения только логируются, не блокируются;Disabled— SELinux выключен.
Текущий статус смотрят командой sestatus или getenforce. BitrixEnv штатно работает с включённым SELinux и сам расставляет нужные контексты при создании сайтов.
Контексты для веб-каталогов
Чтобы Apache мог читать и писать файлы, каталогам нужен правильный тип контекста. Основные:
httpd_sys_content_t— только чтение веб-сервером (код, шаблоны);httpd_sys_rw_content_t— чтение и запись (/upload,/bitrix/cache,/bitrix/managed_cache,/bitrix/tmp).
Назначение контекста на каталог загрузок:
semanage fcontext -a -t httpd_sys_rw_content_t "/home/bitrix/www/upload(/.*)?"restorecon -Rv /home/bitrix/www/upload
semanage прописывает правило в политику (переживёт relabel), а restorecon применяет его к существующим файлам. Разовый chcon сбросится при переиндексации.Булевы политики и сеть
Многое в SELinux управляется булевыми флагами. Для Битрикс важны те, что разрешают исходящие соединения PHP — обмен с 1С, отправка почты, запросы к API:
httpd_can_network_connect— исходящие сетевые запросы из PHP (curl, sockets);httpd_can_network_connect_db— подключение к удалённой БД;httpd_can_sendmail— отправка писем.
Включение флага постоянно (с ключом -P):
setsebool -P httpd_can_network_connect on
Список активных флагов веб-сервера: getsebool -a | grep httpd.
Диагностика Permission denied
Если файлы и владелец в порядке, а PHP всё равно ловит Permission denied, почти наверняка виноват SELinux. Алгоритм:
- смотрим отказы в аудите:
ausearch -m avc -ts recentилиgrep AVC /var/log/audit/audit.log; - получаем человекочитаемую подсказку:
sealert -a /var/log/audit/audit.log; - исправляем контекст через
semanage+restoreconили включаем нужный boolean; - если политика нетиповая — генерируем модуль:
audit2allow -a -M mymoduleи загружаем егоsemodule -i mymodule.pp.
Итог
Права и SELinux — это два уровня одной задачи: файлы должны принадлежать bitrix:bitrix с режимами 755/644 (и 600 для секретов), а SELinux — иметь корректные контексты (httpd_sys_rw_content_t на кеш и upload) и включённые булевы флаги под сетевые операции. Диагностика идёт через audit.log, а не через отключение защиты.
Разбираться в AVC-отказах и политиках под нагруженный прод — работа, где ошибка стоит либо простоя, либо дыры в безопасности. Мы в B2Bsite настраиваем права и SELinux под 1С-Битрикс так, чтобы портал работал без Permission denied и при этом сервер оставался защищённым, и берём администрирование на постоянное сопровождение.
Частые вопросы
Кто должен быть владельцем файлов сайта?
В BitrixEnv все файлы принадлежат пользователю и группе bitrix:bitrix, от него же работает Apache. После ручных операций возвращайте владельца командой chown -R bitrix:bitrix.
Какие права ставить каталогам и файлам?
Каталогам — 755, файлам — 644, а конфигам с паролями (dbconn.php, .settings.php) — 600. Права 777 использовать нельзя, это уязвимость.
Можно ли просто отключить SELinux?
Не стоит. Отключение снимает защиту со всего сервера. Правильнее назначить корректный контекст каталогу или включить нужный boolean под конкретную операцию.
Какой контекст нужен каталогу upload?
Каталогам с записью — /upload, /bitrix/cache, /bitrix/managed_cache, /bitrix/tmp — нужен тип httpd_sys_rw_content_t, назначаемый через semanage и restorecon.
Почему PHP не может подключиться к внешнему API?
Обычно выключен boolean httpd_can_network_connect. Включите его командой setsebool -P httpd_can_network_connect on, чтобы разрешить исходящие соединения из PHP.
Чем chcon отличается от semanage?
chcon меняет контекст разово и сбрасывается при переиндексации файловой системы. semanage прописывает правило в политику, а restorecon применяет его устойчиво.
Как найти причину Permission denied?
Ищите AVC-отказы в /var/log/audit/audit.log через ausearch или grep, разбирайте их sealert и исправляйте контекст либо boolean точечно.
Как разрешить нетиповую операцию в SELinux?
Сгенерируйте модуль политики из отказов: audit2allow -a -M mymodule, затем загрузите его командой semodule -i mymodule.pp.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.