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

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



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

Ответ 1

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

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

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

<?php
echo `whoami`;

Если все правильно, вы должны увидеть, что имя пользователя PHP работает под. В зависимости от вашей ОС это могут быть "www-data", "nobody", "http" или любые варианты. Если ваш веб-сайт является единственным веб-сайтом, это легко изменить, изменив пользовательский Apache. Если у вас есть Debian, как я привык, вы можете отредактировать файл /etc/apache 2/envvars (с правами root) и изменить значение для APACHE_RUN_USER. В зависимости от вашей ОС эта переменная может быть установлена ​​в другом файле конфигурации, поэтому, если вы не можете найти ее в /etc/apache 2/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/

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

Ответ 2

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

chcon -R -t httpd_sys_rw_content_t <PARENT_OF_MKDIR_TARGET>

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

Ответ 3

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

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

Ответ 4

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