Отказано переместить файл с 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
Есть ли способ обойти эту проблему? Я передаю относительный путь каталога, но уже пытался провести абсолютный путь, и это также не сработало.
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 никогда!
Я проверил каталог, и я заметил, что он с разрешения 775
, я 777
и при попытке сохранить файл снова произошло все в порядке.