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

#php #apache #file-permissions

#php #apache #файл-разрешения

Вопрос:

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

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

Комментарии:

1. Вы пробовали использовать 771? Кто является владельцем (пользователь и группа) этой папки?

2. computerhope.com/unix/uchmod.htm

Ответ №1:

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

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

Комментарии:

1. Извините, я не вернулся к этому вопросу. Это никогда не появлялось в моей ленте, поскольку кто-либо ответил. Итак, теперь, когда это наконец-то произошло (на сегодняшний день), я понял, что не дал правильного ответа. Пальцы вверх! Спасибо за ответ.

2. Подводя итог, я думаю, что это не очень хорошая идея, чтобы веб-сервер записывал файлы вашего веб-сервера. Только папку загрузки, если таковая имеется, или некоторые другие специальные папки, такие как кэш, журналы и т.д… Возможно, проще взломать с помощью вредоносного php-скрипта, чем узнав ваш ssh-пароль.

3. Вы также можете проверить пользователя с помощью <?php phpinfo() ?>

Ответ №2:

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

 chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>
  

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

Ответ №3:

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

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

Комментарии:

1. Мне помогла подсказка о разрешениях / var / lib / php5. chown www-data /var/lib/php5 помогло после того, как все остальные разрешения для файлов и папок были в порядке (и вменяемы), но CMS продолжала жаловаться. Спасибо.