Права на файлы в 1С-Битрикс: почему не пишется upload или cache
После переноса сайта, ручного деплоя, распаковки архива или восстановления из бэкапа 1С-Битрикс часто начинает вести себя странно: не загружаются файлы, не очищается кэш, не создаются миниатюры, не пишутся логи, не работает композит. Во многих случаях причина простая — права на файлы и директории.
Самое опасное решение — поставить chmod 777 на весь проект. Это быстро маскирует проблему, но создаёт риск безопасности. Лучше понять, какой пользователь запускает PHP и какие директории должны быть доступны на запись.
Какие директории должны писаться
Битрикс регулярно пишет во временные и рабочие директории. Минимально нужно проверить:
- upload;
- bitrix/cache;
- bitrix/managed_cache;
- bitrix/stack_cache;
- bitrix/html_pages;
- local/logs, если используется;
- временные директории, заданные в настройках PHP.
ls -la upload
ls -la bitrix/cache
ls -la bitrix/managed_cache
ls -la bitrix/stack_cache
ls -la bitrix/html_pages
Понять пользователя PHP
Права нужно выдавать не абстрактно, а под конкретного пользователя. PHP-FPM может работать от www-data, nginx, apache или пользователя сайта.
ps aux | grep php-fpm
ps aux | grep nginx
На хостингах пользователь часто совпадает с владельцем аккаунта. На VPS это зависит от настройки пула PHP-FPM.
Проверить путь целиком
Иногда права нормальные на самой папке upload, но нет права прохода по родительской директории. Для этого удобно использовать namei.
namei -l /var/www/site.ru/upload
Для директорий важен execute-бит. Без него пользователь не сможет пройти внутрь, даже если на конечной папке стоят права чтения.
Настроить владельца и группу
Один из рабочих подходов — сделать владельцем проекта пользователя деплоя, а группу дать веб-серверу. Для writable-директорий дать группе право записи.
chown -R deploy:www-data /var/www/site.ru
find /var/www/site.ru -type d -exec chmod 755 {} \;
find /var/www/site.ru -type f -exec chmod 644 {} \;
chmod -R g+rw upload bitrix/cache bitrix/managed_cache bitrix/stack_cache bitrix/html_pages
Это пример, а не универсальная команда. На конкретном сервере имена пользователей и групп нужно проверить.
Проблемы после cron
Если cron запускается от другого пользователя, он может создавать файлы кэша или логи с владельцем, недоступным для веб-сервера. Потом сайт не сможет их перезаписать.
crontab -l
ls -la bitrix/cache | head
Cron лучше запускать от того же пользователя, что и сайт, или аккуратно настроить общую группу.
Файлы, созданные root
После ручных команд от root часто появляются файлы, которые веб-сервер не может изменить. Например, кэш очистили от root, а потом новые директории создались с неправильным владельцем.
find upload bitrix/cache bitrix/managed_cache -user root | head
Если такие файлы есть, нужно вернуть корректного владельца только для рабочих директорий, а не менять права всего сервера.
Логи ошибок
Ошибки прав обычно видны в PHP error log или nginx error log. Ищите Permission denied, failed to open stream, mkdir, fopen, unlink.
tail -n 150 /var/log/nginx/error.log
tail -n 150 /var/log/php-fpm/error.log
Если лог Битрикс не пишется, возможно, проблема прав мешает даже логированию. Тогда серверные логи особенно важны.
Чек-лист
- Проверить upload и кэш-директории.
- Понять пользователя PHP-FPM.
- Проверить путь через namei -l.
- Проверить файлы, созданные root.
- Проверить пользователя cron.
- Настроить владельца и группу без chmod 777 на весь проект.
- Проверить загрузку файла через админку.
- Проверить очистку кэша и создание новых файлов.
Права в Битрикс должны быть достаточно открытыми для работы сайта и достаточно закрытыми для безопасности. Если настроить владельцев и группы один раз аккуратно, пропадает большой класс случайных ошибок после деплоя и переноса.
Комментарии (0)
Пока нет комментариев. Будьте первым!