Отказано переместить файл с move загрузить файл на сервер Linux


Я пытаюсь использовать move_upload_file чтобы переместить файл, отправляемый пользователем, и его конечной цели -

$pasta = '../../public_html/admin/helpdesk/ticket/uploads/';

if (!empty($_FILES['img']['name'])) {
    foreach ($_FILES["img"]["error"] as $key => $error) {
        $nome = $_FILES["img"]["name"][$key];
        $tmp_name = $_FILES["img"]["tmp_name"][$key];
        $cod = date('dmyhis') . '-' . $_FILES["img"]["name"][$key];
        $uploadfile = $pasta . basename($cod);
        if (move_uploaded_file($tmp_name, $uploadfile)) {
            return true;
        }
    }

Однако, происходит следующее сообщение об ошибке:

Failed to open stream: Permission denied

Есть ли способ обойти эту проблему? Я передаю относительный путь каталога, но уже пытался провести абсолютный путь, и это также не сработало.

 11
Author: Maniero, 2014-01-21

2 answers

Разрешения Проблем на сервере Linux

В мире PHP, есть несколько способов "запустить" сайт, в целом, большинство из них-это использование веб-сервер, известный как Apache или Nginx, при обработке файлов, иногда возникают проблемы с разрешениями, которые не очень ясны, я постараюсь развеять некоторые из них и показать, что влечет за собой в вопросе безопасности.

Тип сервера

Часто можно увидеть использование жилья, общих для sistes/системы в PHP, мы должны обратить внимание, потому что этот тип хостинга, как правило, хорошо уязвимой в случае, если пользователь не принять надлежащие меры предосторожности. Есть также VPS/Выделенные, в котором instiancia Linux колеса изолированные, что дает высокий уровень безопасности системы/веб-сайт.

1) основные Концепции права:

В linux, есть система разрешений для файлов и папок, разработанный для того чтобы поставить безопасной окружающей среды, общие для нескольких пользователей, грубо говоря, в режиме числовое представление, являются 3 - bits, указывающие, по которым файл может быть доступен, например, см.:

765 arquivo1.txt
644 arquivo2.txt

Первая цифра, показывает нам, какие разрешения владельца, во-вторых, что разрешения группы и третий, которого права в целом (слишком много пользователей).

В первом примере мы имеем:

7 -> Dono tem permissão 7 (ler, gravar e executar)
6 -> Grupo tem permissão 6 (ler, gravar) porem não pode executar como o dono
5 -> Outros usuários tem permissão 5 (ler e executar) porem não podem alterar o conteúdo.

Это объяснение поверхностно и может содержать ошибки, лучше понять, читая эту ссылку.

2) при Работе с веб-сервера в Linux

, веб-сервер, не работает, как root то есть, не имеет разрешения на глобальные процессы в системе, по умолчанию, имеется пользователя посвящена, как правило, называется www-data и группа, посвященная, с тем же именем.

, Когда запрашивается страница, это пользователь, который читает, интерпретирует и колеса любой команды, что скрипт запрашивает.

, Если для папки/файлы сайта / системы, принадлежащие пользователю www-data, то разрешение 700 достаточно, чтобы читать, писать и выполнять, поскольку кто владелец имеет полный доступ (7) и других пользователей, не имеют доступа к какой-то.

, Если пользователь-владелец папки/файлы проекта является не то, что пользователь веб-сервера колесо, мы должны добавить разрешение на второй и третий "бит"

Предположим, что существует пользователь с именем foo, и то же самое относится к группе www-data, папка сайта percente foo, с группы www-data

, То мы должны были бы дать разрешение, 770, чтобы все члены группы имеют полный доступ к/системные файлы.

Зачем 777 работает, в конце концов?

Давая chmod 777 вы expôe файлов любого пользователя системы, то в хостинг, то любой другой пользователь будет обложки, читать файлы, модифицировать содержимое, и еще сделать 'include' via script.

Выводам

  • Если вы используете виртуальный хостинг, 777-это ошибка, вы не можете comenter.
  • Если вы используете выделенный сервер / VPS, вы необходимо настроить файлы и папки, как свойство одного и того же пользователя в веб-сервер колеса, в debian / ubuntu это пользователь www-data, но даже могут быть настроены / отличаться в других дистрибутивах

, Чтобы поменять владельца папки и все файлы / папки, внутренние (рекурсивно):

Chown -R user:группа minha_pasta_www

В случае, если по умолчанию

Chown -R www-data:www-data minha_pasta_www


Подводя итоги, 777 никогда!

 21
Author: hernandev, 2020-06-11 14:45:34

Я проверил каталог, и я заметил, что он с разрешения 775, я 777 и при попытке сохранить файл снова произошло все в порядке.

 4
Author: Kenny Rafael, 2014-01-21 12:33:37