«Ошибка при создании файла»: права доступа на сайте
Сообщения бывают разные — «ошибка при создании файла», «не удалось записать», «нет доступа», — но причина одна: процесс, который пытается писать, не имеет на это прав.
Кто от кого работает
Файлы сайта принадлежат какому-то пользователю системы, а веб-сервер и PHP работают от своего. Если они не совпадают, запись невозможна. В окружении Битрикса сайт обычно работает от пользователя bitrix, и файлы должны принадлежать ему.
Проверяется просмотром владельца каталогов сайта и сравнением с тем, от кого запущен процесс веб-сервера.
Когда ломается
- После переноса сайта. Архив распаковали от root — владельцем стал root. Самый частый случай.
- После ручной правки файлов через консоль от другого пользователя.
- После обновления, которое прервалось на середине.
- После добавления файлов из cron, если задание запускается от root, — тогда часть кеша принадлежит ему.
Где это проявляется
| Что не работает | Какой каталог проверить |
|---|---|
| Загрузка картинок и файлов | /upload/ |
| Сохранение страницы в редакторе | каталог самой страницы |
| Очистка и создание кеша | /bitrix/cache/, /bitrix/managed_cache/ |
| Обновления продукта | /bitrix/ целиком |
| Резервные копии | /bitrix/backup/ |
| Обмен с 1С | /upload/1c_catalog/ |
Как чинить правильно
- Определите, от какого пользователя работает веб-сервер.
- Верните владельца файлов сайта этому пользователю — рекурсивно по каталогу сайта.
- Проверьте права: каталогам нужна возможность записи для владельца, файлам — обычные права на чтение и запись.
- Повторите операцию, которая падала.
Полные права для всех (777) проблему тоже снимают — и создают другую: любой скрипт на сервере сможет переписать ваши файлы. Так делать не надо.
Если права верные, а ошибка есть
- Кончилось место на диске — файлы не создаются независимо от прав.
- Кончились иноды — место есть, а новые файлы не создаются. Проверяется отдельно.
- Каталог только для чтения — бывает после сбоя файловой системы.
- Ограничение на уровне системы безопасности — в некоторых сборках доступ ограничен дополнительно.
Частые вопросы
Почему это началось после переноса сайта?
При копировании владельцем файлов становится тот, кто их распаковывал, — часто root. Веб-сервер работает от другого пользователя и писать в такие каталоги не может. Нужно вернуть владельца на пользователя сайта.
Можно поставить права 777 и забыть?
Так делают, и это худшее из решений: полные права для всех означают, что любой скрипт на сервере, включая загруженный злоумышленником, сможет менять ваши файлы. Правильно — правильный владелец и обычные права.
Ошибка только при загрузке картинок.
Значит проблема в каталоге загрузок: проверьте владельца и права именно на него, а заодно свободное место — при заполненном диске файлы тоже не создаются.