@MyQuestion
junior-middle fullstack

Почему у php недостаточно прав на перезапись файлов?

Добрый день!

На тестовой реализовали оптимизацию изображений, через библиотеку imageMagick. Запускается через php скрипт. Всё отлично, переношу на бой - ошибка. Не хватает прав. Если только "запись" фала из публички открыта, тогда работает. Я поискал информацию, проверил под каким пользователем работает php, это стандартный www-data. На обоих серверах. Проверил в каких группах они состоят и оказалось, что нигде у них особых привилегий нет. Т.е. состоят в своей группе www-data. Владелец файлов - root и он состоит в какой-то дефолтной группе пользователей.

Вопрос в том, почему на тесте, при тех же условиях, я могу перезаписывать файлы, а на боевом - нет?
Может кто-то сталкивался с подобным? Какие тут варианты решений могут быть, что ещё можно проверить?
  • Вопрос задан
  • 324 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Запускается через php скрипт.
как именно запускается? Через SSH-консоль, через вебсервер, может через крон? Это все может быть под разными пользователями.

Для начала разобраться какие пользователи вообще замешаны. Для этого на боевом сервере делаешь эксперимент:
создаешь файлик от имени обычного скрипта, от имени вашего опртимизатора, и от имени фтп-заливки.
Вот прям создай папочку "test" и залей в нее hello_ftp.txt через ftp
Затем из php скрипта сделай file_put_contents('test/hello_php.txt', 'foo');
И в оптимизатор тоже добавь похожее file_put_contents('test/hello_optimizator.txt', 'foo');

Затем зайди через SSH в папку test, напиши ls -l
Если SSH нет, то можно опять-же сделать скриптом
$files = glob('/path/to/test/*');
foreach ($files as $fn) {
    echo $fn . ' | ' . fileowner($fn) . '<br>' . PHP_EOL;
}

Скорее всего найдутся отличия. Останется придумать как изменить способ запуска, чтобы проблема не поворялась в будущем, ну и поправить владельца у уже существующих файлов (chown).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kawabanga
@kawabanga
1) Добавляете пользователя нового, например admin, с привилегией sudo. Добавляете его в группу www-data
2) Загружаете файлы от имени этого пользователя в дальнейшем.
3) Выставляете необходимые права при необходимости. К примеру вот - владелец admin, и группа www-data у файла
-rwxrwxr-x 1 admin www-data 3958 Jul 1 10:38 README.md

В вашем конкретном случае, проще всего написать что-то типа

sudo chown -R www-data:www-data /webdirectory
sudo chmod -R 0755 /webdirectory
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы