PHP move_upload_file требует разрешения rwx для хранения файла

1

Я использую следующий код для загрузки и перемещения файла в папку "film_images":

$filepath = '../images/film_images/';
echo '<br />Trying to store file at ' . $filepath;
if (!move_uploaded_file(
    $_FILES['teaserimage']['tmp_name'],
    sprintf($filepath . '%s.%s',
    'test',
    $ext))) {
        throw new RuntimeException('Failed to move uploaded file.');
}

Однако, как многие люди здесь, я всегда получал

Не удалось открыть поток: разрешение отклонено

исключение в PHP. Затем я пошел на сервер и, используя команду setfacl я дал пользователю rw- разрешение на rw- к www-data, являющемуся пользователем этого скрипта PHP. Используя rw- я все еще получил исключение. Только когда я переключил права на rwx, т.е. когда я дал полный контроль над этой папкой www-data, это сработало. Теперь мне интересно две вещи:

  1. Почему необходимо предоставить права на выполнение пользователем для записи файла?
  2. Есть ли способ записать файл, не предоставляя пользователю права на выполнение? Я боюсь, что кто-то может загрузить код, спрятать в файл изображения и выполнить его на моем сервере.
Теги:
permissions

2 ответа

1

Хорошо, я думаю, что понял. Спасибо Paulius S. и его ответ, который заставил меня на правильном пути.

Папка ist принадлежит мне. Во-первых, после ответа на этот пост я использую

chmod g+rwxs dirname

чтобы файлы, созданные в каталоге, принадлежали группе, к которой я принадлежу. В частности, www-данные не являются частью этой группы. Затем, используя

setfacl -m u:www-data:rwx dirname

Я предоставляю полный доступ к каталогу для пользовательских www-данных. Теперь www-данные могут загружать файл, но этот файл автоматически принадлежит к группе, указанной выше (какие WW-данные не принадлежат), и, следовательно, www-data не имеет права выполнения, хотя он может выполняться в папке в целом.

1

Вы должны установить разрешение по умолчанию для папки, если создаете новые файлы, сначала chmod it: chmod g+s images/film_images//set permission what you need

во-вторых, вам нужно установить разрешения по умолчанию для создания файлов/папок:

setfacl -R -d -m group:www-data:rwx /path/to/your/dir //set permission what you need
  • 0
    Я сделал, как вы сказали, теперь вместо записи user:www-data:rwx меня есть запись по default:user:www-data:rw- . С этой настройкой я снова получаю сообщение об ошибке «Отказано в доступе». Есть идеи, что пошло не так? Кажется, работает только с записи user: www-data: rwx.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню