centos7 apache не может записывать в файл, которым владеет

Я установил httpd и php на свежий centos7 и поместил несколько файлов в / var / www / html, включая написанный мной сценарий установки. Этот сценарий необходимо записать в файл конфигурации в каталоге / var / www / html. Я создал пустой файл конфигурации и подключил его к apache: apache. Однако попытка открыть этот файл с доступом для записи всегда дает ошибку:

fopen (/var/www/html/config-local.php): не удалось открыть поток: отказано в разрешении

Проводя исследование, я прочитал эту цитату: «для доступа к файлу ВСЕ родительские каталоги должны быть доступны для чтения». Я проверил, и они есть. /, / var, / var / www и / var / www / html доступны для чтения всем.

Так что здесь происходит? Похоже, что пользователь apache является своего рода пользователем с особыми ограничениями, поскольку тестирование того же сценария со стандартным пользователем работает нормально.

2
задан 30 June 2017 в 05:19
2 ответа

Вероятно, проблема с разрешениями SELinux. /var/log/audit/audit.log должен иметь возможность подтвердить.

Контекст SELinux, вероятно, system_u: object_r: httpd_sys_content_t: s0 , но должен быть system_u : object_r: httpd_sys_rw_content_t: s0 . Это можно изменить с помощью chcon .


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

1
ответ дан 3 December 2019 в 12:36

Потратил много времени на поиск этого ответа, но он весь разбит на кусочки, и никто не публикует решение (ну, в большинстве случаев), поэтому вот мое решение, и оно также используется в различных веб-панелях управления.

Установить и использовать MOD_RUID2

Установить PHP с помощью интерфейса командной строки (это стандартно для более новых версий)

В вашем файле HTTPD.CONF на виртуальных хостах вы добавите следующее, заменив имя пользователя на имя пользователя для входа , и usergroup с группой пользователя (обычно это одно и то же)

<IfModule !mod_ruid2.c>
    SuexecUserGroup username usergroup
</IfModule>
<IfModule mod_ruid2.c>
    RMode config
    RUidGid username usergroup
    RGroups @none
</IfModule>

Пример конфигурации виртуального хоста:

<VirtualHost *:443>
  DocumentRoot "/home/imtheuser/public_html"
  ServerName imtheuser.com
  <IfModule !mod_ruid2.c>
    SuexecUserGroup imtheuser imtheuser
  </IfModule>
  <IfModule mod_ruid2.c>
    RMode config
    RUidGid imtheuser imtheuser
    RGroups @none
  </IfModule>
  <Directory "/home/imtheuser/public_html">
    allow from all
    Options None
    Require all granted
  </Directory> 
</VirtualHost>

Это позволит apache/php записывать в каталог, принадлежащий пользователю. Это намного безопаснее, чем установить для вашего chmod значение 0777.

0
ответ дан 30 July 2020 в 09:32

Теги

Похожие вопросы