Разрешения Apache, создание файла PHP, сбой MKDir - PullRequest
23 голосов
/ 02 марта 2011

Кажется, я не могу создавать файлы. Когда я устанавливаю права доступа 777 В папке я пытаюсь создать папку, тогда скрипт работает нормально. Если для папки установлено значение 755, произойдет сбой. Я не знаю много о Linux, но я должен выяснить это. Я провел пару часов, пытаясь что-то сделать. Кто-нибудь знает, как сделать так, чтобы у apache были достаточно высокие разрешения.



Я знаю, что это проблема с разрешениями и apache, я просто не знаю, как это исправить. Я отредактировал файл httpd.conf, но я действительно не знаю, что я делаю ... Любая помощь? (Я сохранил резервную копию.)

Ответы [ 4 ]

90 голосов
/ 02 марта 2011

Пожалуйста, прекратите предлагать использовать 777. Вы делаете свой файл доступным для записи всем, что в значительной степени означает, что вы теряете всю безопасность, для которой была разработана система разрешений. Если вы предложите это, подумайте о последствиях, которые это может иметь для плохо настроенного веб-сервера: было бы невероятно легко «взломать» сайт, переписав файлы. Так что не надо.

Майкл: есть вполне реальная причина, по которой ваш сценарий не может создать каталог, поскольку пользователь, работающий с PHP (который может отличаться от Apache), просто не имеет достаточных разрешений для этого. Вместо того, чтобы изменять разрешения, я думаю, вам следует решить основную проблему, то есть у ваших файлов неправильный владелец или Apache или PHP работают под неверным пользователем.

Теперь, похоже, у вас установлен собственный сервер. Вы можете определить, какой пользователь использует PHP, запустив простой скрипт, который вызывает программу whoami, установленную в большинстве linux:

<?php
echo `whoami`;

Если все правильно, вы должны увидеть имя пользователя, под которым работает PHP. В зависимости от вашей ОС это может быть «www-data», «nobody», «http» или любой другой вариант. Если ваш сайт является единственным запущенным сайтом, это легко изменить, изменив пользователя, под которым работает Apache. Если у вас Debian, как я склонен, вы можете отредактировать файл / etc / apache2 / envvars (как root) и изменить значение для APACHE_RUN_USER. В зависимости от вашей ОС, эта переменная может быть установлена ​​в другом файле конфигурации, поэтому, если вы не можете найти ее в / etc / apache2 / envvars, попробуйте найти объявление переменной, используя:

$ grep -R "APACHE_RUN_USER=" .

Из каталога находятся все файлы apache-config.

Если вы не единственный на сервере, возможно, вы захотите создать учетные записи пользователей для каждого веб-сайта и использовать что-то вроде Apache2-MPM-ITK для изменения RUN_USER в зависимости от того, какой веб-сайт вызывается. Кроме того, убедитесь, что пользователь, под которым выполняется процесс PHP, является владельцем файлов и каталогов. Вы можете сделать это, используя chown:

% chown theuser:theuser -R /var/www/website/

Если PHP работает со своим собственным пользователем и является владельцем файлов и каталогов, в которые он должен записывать, разрешения 700 будет достаточно. Я обычно использую 750 для большинства файлов, так как в этой группе обычно несколько пользователей, и они могут иметь права на чтение. Итак, вы можете изменить разрешения:

% chmod 0750 -R /var/www/website/

Так и должно быть. Если у вас возникли проблемы, сообщите нам, и , пожалуйста, никогда не обращайтесь за советом, который по существу говорит вам: если безопасность вас беспокоит, удалите защиту.

13 голосов
/ 08 мая 2013

У меня похожая проблема, но в моем случае у меня работает SELinux, и он не работает даже с разрешением 0777.Оказывается, мне нужно явно разрешить httpd иметь доступ на запись в каталог, используя:

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

. Средство устранения неполадок SELinux может иметь более подробную информацию.

6 голосов
/ 26 сентября 2011

В Ubuntu вы редактируете / etc / apache2 / envvars, как предложил Берри.

Когда вы меняете пользователя Apache, остерегайтесь непредвиденных последствий. Одним из них являются сеансы PHP, которые могут храниться в / var / lib / php5. Возможно, вам также придется изменить владельца этой папки.

1 голос
/ 02 марта 2011

Пользователь php (www-data, php, apache, кем бы он ни был) должен иметь права на запись в каталог 755.Я предполагаю, что он не является членом группы создателя папки, иначе он сможет писать в нее.Либо добавьте пользователя php в группу, либо измените разрешения для папки на 777. Если ни одна из этих опций не используется, вы можете использовать расширение PECL SSH2 для входа в систему с пользователем, который входит в группу (или владелец файла) и вместо этого создайте файлы.

...