Разрешения Apache, создание файла PHP, сбой MKDir

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



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


person ThePrimeagen    schedule 02.03.2011    source источник
comment
Вы пробовали с 771? Кто является владельцем (пользователь и группа) этой папки?   -  person soju    schedule 02.03.2011
comment
computerhope.com/unix/uchmod.htm   -  person Gaurav    schedule 02.03.2011


Ответы (3)


Пожалуйста, перестаньте предлагать использовать 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/

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

person Berry Langerak    schedule 02.03.2011
comment
Извините, я не вернулся к этому вопросу. Это никогда не появлялось в моей ленте, поскольку кто-то ответил. Итак, теперь, когда это наконец-то произошло (на сегодняшний день), я понял, что не дал правильного ответа! Спасибо за ответ. - person ThePrimeagen; 13.09.2011
comment
Вступая, я думаю, что это не очень хорошая идея, чтобы веб-сервер записывал файлы вашего веб-сервера. Только папку загрузки - если есть, или какие-то другие специальные папки, такие как кеш, журналы и т. Д. Возможно, проще взломать вредоносный php-скрипт, чем узнать ваш пароль ssh. - person arod; 14.05.2016
comment
Вы также можете проверить пользователя с помощью ‹?php phpinfo() ?› - person Netham; 04.11.2016

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

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

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

person user1533634    schedule 08.05.2013

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

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

person JG Estiot    schedule 26.09.2011
comment
Что мне помогло, так это подсказка о разрешениях /var/lib/php5. chown www-data /var/lib/php5 помогло после того, как все остальные права доступа к файлам и папкам были в порядке (и в порядке), но CMS продолжала жаловаться. Спасибо. - person raddaqii; 10.11.2015