Права на файлы и папки - файловая система и права структуры
Разбираемся с двумя механизмами прав, которые постоянно путают: правами файловой системы и правами структуры сайта внутри платформы.
Решение
Смотрим, под кем работает сайт и кому принадлежат файлы:
ps -o user= -C php-fpm | sort -u # пользователь процессов PHPls -ld /home/bitrix/www/upload/ /home/bitrix/www/bitrix/cache/find /home/bitrix/www/upload -user root | head # файлы, залитые от чужого имениПрава на диске проверяются от имени процесса PHP, а не от имени того, кто зашёл на сайт. Файл, созданный от другого пользователя, платформа читает, но переписать не может, и сообщение об этом выглядит как поломка модуля.
Возвращаем владельца после ручного копирования:
chown -R bitrix:bitrix /home/bitrix/www/find /home/bitrix/www -type d -exec chmod 755 {} \;find /home/bitrix/www -type f -exec chmod 644 {} \;# режим 777 не лечит причину, а открывает файлы всем на сервереРучной перенос архивом почти всегда меняет владельца. Права выставляют раз и правильно: каталоги на обход, файлы на чтение, а запись даёт владелец, а не открытые всем режимы.
Выдаём группе доступ к разделу сайта:
// файл .access.php внутри папки раздела$PERM['/upload/private/']['5'] = 'R'; // группа 5 - только чтение$PERM['/upload/private/']['6'] = 'W'; // группа 6 - запись// права наследуются вложенными папками, пока не переопределены своим файломПрава структуры хранятся файлом внутри самой папки и наследуются вложенными разделами. Это отдельный механизм: он решает, кто увидит раздел в административной части, и к правам на диске отношения не имеет.
Проверяем доступ из кода:
global $APPLICATION;$level = $APPLICATION->GetFileAccessPermission('/upload/private/');printf("уровень доступа=%s\n", $level); // D - запрет, R - чтение, W - запись// проверяют от имени конкретного пользователя: у администратора уровень свойПроверка возвращает уровень доступа для текущего пользователя сайта. Она и отвечает на вопрос «почему у менеджера нет кнопки»: интерфейс скрывает то, на что уровня не хватает, без всяких сообщений.
Открытые всем режимы доступа остаются самой дорогой из быстрых починок. Они убирают симптом на день, а через месяц оборачиваются чужими файлами в папке загрузок и разбирательством с хостингом.
Права структуры не переживают ручную выкладку сайта без переноса служебных файлов. Скрытые файлы доступа легко теряются при копировании, и раздел, закрытый от посторонних, открывается всем.
Типичные проблемы
Сайт пишет об отсутствии прав на запись.
Владелец файлов не совпадает с пользователем процессов PHP на сервере. Так бывает после ручного копирования от имени администратора сервера.
После открытия всех прав ошибка ушла.
Открытый всем режим прячет причину проблемы, а не решает её. Правильное лечение - вернуть владельца файлов и обычные режимы доступа.
Права на раздел сбросились после выкладки.
Служебный файл прав раздела не попал в перенос. Он скрытый, и обычное копирование каталога его пропускает.
У менеджера нет кнопки, хотя права выданы.
Права выданы на другом уровне: на диске или на другой раздел сайта. Уровень доступа к конкретному пути проверяют вызовом из кода.
Загруженные файлы недоступны посетителям.
Каталог закрыт для обхода на уровне самой файловой системы. Каталогам нужен режим обхода и чтения, файлам - только чтение.
Частые вопросы
Какие права ставить на каталоги и файлы?
Каталогам обход и чтение, файлам чтение, запись - владельцу. Открытый всем режим нужен крайне редко и всегда временно.
Почему после переноса сайт не пишет в загрузки?
Файлы приехали от имени другого пользователя. Владельца возвращают одной командой по всему каталогу сайта.
Права структуры хранятся в базе?
Нет, отдельным файлом в самой папке. Поэтому они переносятся вместе с файлами, если копировать скрытые файлы тоже.
Как закрыть папку от посторонних?
Правами структуры для групп и запретом на уровне веб-сервера для прямых ссылок. Один механизм без второго оставляет обходной путь.
Смежное
-
Права доступа на практике - оглавление подтемы
-
Права не применяются: разбор причин - когда дело не в правах на диске
-
Файл не загружается: пределы, права, типы, веб-сервер - частое следствие неверных прав
-
Права на инфоблок и заказы: выдача из интерфейса и кодом - права на данные, а не на файлы
-
Перенос сайта на другой сервер: через восстановление и вручную - где теряется владелец файлов
-
Пользователи, группы и права - устройство прав целиком
-
Основы безопасности - что закрывают права
-
Базовая защита сайта: обновления, доступы, проактивная защита - права как часть защиты сайта
-
Git в проекте на платформе: состав репозитория и выкладка - права после выкладки правок
-
Файлы из кода: сохранение, уменьшенные копии, удаление - что ломается без прав на запись
-
Отдача файла с проверкой прав: закрытые каталоги, заголовки, ссылки - права на уровне кода, а не сервера
-
Доступ к серверу: учётные записи, ключи, права, отзыв - под кем заходят и запускают скрипты