chmod(): Operation not permitted

zey_ser

Новичок
Добрый день!
При
Код:
chmod($uplod_file , 0664);
получаю chmod(): Operation not permitted
Текущий пользователь(whoami) - apache
$uplod_file - Пользователь - zoo, Группа - apache
Дело происходит на шаред хостинге. Не могу понять как решить проблему! Прошу вашей помощи!

Часть рабочего кода
Код:
// Получаем данные
        $data = file_get_contents("php://input");

        if ($data !== false) {
            file_put_contents($uplod_file, $data);
            if ($fp = fopen($uplod_file, "wb")) {
                $result = fwrite($fp, $data);
                if ($result === strlen($data)) {
//                    chmod($uplod_file , 0664);
                    $this->echo_message(1, "The file " . $this->request->get['filename'] . " has been successfully uploaded");
                    $xmlfiles = $this->extractZip($uplod_file);
                    //unlink($uplod_file);
                }
                else {
                    $this->echo_message(0, "Empty file " . $this->request->get['filename']);
                }
            }
            else {
                $this->echo_message(0, "Can not open file " . $this->request->get['filename']);
            }
        }
 

fixxxer

К.О.
Партнер клуба
Сменить хостинг. PHP от apache-юзера в 2017 году? Бесплатно такого не надо.

А зачем вообще потребовался chmod? Если это файл, загруженный по ftp - то chmod надо делать при загрузке, ftp-клиентом. Если конфликт между загруженными файлами по ftp и загрузкой через php - загружать через php в отдельную директорию с достаточными для apache правами, куда по ftp никто ничего никогда не заливал.

Но, конечно, сменить хостинг все равно. Это проблемы из 2000 года.
 

AnrDaemon

Продвинутый новичок
chmod вообще не надо делать, либо пермишенсы сразу верные, либо у вас проблема не на стороне PHP.
 

zey_ser

Новичок
Сменить хостинг. PHP от apache-юзера в 2017 году? Бесплатно такого не надо.

А зачем вообще потребовался chmod? Если это файл, загруженный по ftp - то chmod надо делать при загрузке, ftp-клиентом. Если конфликт между загруженными файлами по ftp и загрузкой через php - загружать через php в отдельную директорию с достаточными для apache правами, куда по ftp никто ничего никогда не заливал.

Но, конечно, сменить хостинг все равно. Это проблемы из 2000 года.
Суть проблемы: 1с выгружает изображение методом POST мы его кладем пользователем apache, а когда меняем права то владелец файла уже zoo. И вот здесь мне не хватает опыта понять почему так происходит.

Отдельно для себя хочу узнать почему выполнение php под apache - это плохо?
 

fixxxer

К.О.
Партнер клуба
Отдельно для себя хочу узнать почему выполнение php под apache - это плохо?
Потому что
1) возникают вот такие проблемы с правами на файлы. Когда всё, что логически принадлежит одному пользователю, работает от одного и того же пользователя, таких проблем не возникнет по определению, и так и надо делать в юникс-системах;
2) у всех пользователей такого шаред-хостинга mod_php работает под одним аккаунтом apache и потенциально они могут получить доступ к данным соседа по серверу. Для разграничения при этом используется настройка PHP open_basedir, но это костыль, который не дает никаких гарантий: достаточно хотя бы одной забытой проверки на open_basedir в каком-то extension-е в неочевидном месте, чтобы вся эта псевдобезопасность стала бесполезной, таких примеров обхода open_basedir уже было множество (imap_open, например) и еще будут.
 
Последнее редактирование:

zey_ser

Новичок
Потому что
1) возникают вот такие проблемы с правами на файлы. Когда всё работает от одного и того же пользователя, таких проблем не возникнет по определению, и так и надо делать в юникс-системах;
2) все пользователи шаред-хостинга работают под одним аккаунтом и потенциально могут получить доступ к данным соседа по серверу. Для разграничения при этом используется настройка PHP open_basedir, но это костыль, который не дает никаких гарантий: достаточно хотя бы одной забытой проверки на open_basedir в каком-то extension-е в неочевидном месте, чтобы вся эта псевдобезопасность стала бесполезной, таких примеров обхода open_basedir уже было множество (imap_open, например) и еще будут.
А можете еще объяснить причину моей проблемы. Я выше описал, что именно я не могу понять. То есть причина, как бы в том, что пользователи разные у меняющего и владельца (я так понял). Но я не понял почему это проиcходит, ведь в момент работы скрипта это должен быть apache и у владельца и у меняющего
 

fixxxer

К.О.
Партнер клуба
Чтобы пояснить причину, мне надо понимать, что именно происходит, пошагово. И на каждом шаге видеть stat файла.
 

AnrDaemon

Продвинутый новичок
2) у всех пользователей такого шаред-хостинга mod_php работает под одним аккаунтом apache и потенциально они могут получить доступ к данным соседа по серверу.
Далеко не всегда. На моём последнем шареде mod_php работал от юзера.
 

AnrDaemon

Продвинутый новичок
И ещё хочу сказать, что сам по себе приведённый код бредовый.
Сохранить данные чтобы тут же их стереть и снова сохранить - такого я в страшных снах не видел.
 

zey_ser

Новичок
Чтобы пояснить причину, мне надо понимать, что именно происходит, пошагово. И на каждом шаге видеть stat файла.
Начал воспроизводить проблему и логировать и разобрался в причине.
1 Через curl кинул изображение. Владельцем оказался apache :)
2 Попробовал залить изображение через фтп. Владельцем стал zoo :)
3 Оказалось сюда переехали с другого хостинга. На тот хостинг изображения отправлялись правильно, потом просто через фтп файлы были залиты на этот хостинг(стал владелец zoo). А дальше был ряд манипуляций с возникновением моей проблемы. Всем спасибо за помощь!
 

zey_ser

Новичок
И ещё хочу сказать, что сам по себе приведённый код бредовый.
Сохранить данные чтобы тут же их стереть и снова сохранить - такого я в страшных снах не видел.
Топик не об этом, но вы можете посоветовать автору модуля ваше решение https://github.com/KirilLoveVE/opencart2-exchange1c/
 
Сверху