Я пытался настроить виртуальный хост с помощью apache httpd
на Digital Ocean Droplet под управлением Fedora 26 Сервер. И я последовал этому руководству: Как настроить виртуальные хосты Apache на CentOS 7 , предполагая сходство между Fedora и CentOS. Я следовал инструкциям по настройке этого виртуального хоста следующим образом:
<VirtualHost *:80>
ServerName www.mywebsite1.com
ServerAlias mywebsite1.com
DocumentRoot /var/www/html/mywebsite1.com/public_html
ErrorLog /var/www/html/mywebsite1.com/log/error_log
CustomLog /var/www/html/mywebsite1.com/log/requests_log combined
</VirtualHost>
Однако после настройки У меня httpd
не запускается. Оказалось, что это была эта ошибка, поскольку я проследил до журнала ошибок httpd
:
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/html/mywebsite1.com/log/error_log.
AH00015: Unable to open logs
Тогда я поискал решения и обнаружил, что это может быть связано с политиками SELinux. Используя ls -lZ /var/www/html/mywebsite1.com
, текущие политики распечатываются следующим образом:
total 8
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:54 log
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:14 public_html
Я выполнил Настройка политик SELinux для веб-серверов Apache и попробовал чтобы добавить политику httpd_log_t
в папку ./ log
и использовать следующие:
$ semanage fcontext -a -t httpd_log_t "/var/www/html/mywebsite1.com/log(/.*)?"
$ restorecon -Rv /var/www/html/mywebsite1.com
Однако в папке log
все еще нет httpd_log_t
применена политика, и httpd
по-прежнему не может запуститься с той же ошибкой, что и раньше. как я проследил до журнала ошибок httpd
:
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/html/mywebsite1.com/log/error_log.
AH00015: Unable to open logs
Итак, я поискал решения и обнаружил, что это может быть связано с политиками SELinux. Используя ls -lZ /var/www/html/mywebsite1.com
, текущие политики распечатываются следующим образом:
total 8
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:54 log
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:14 public_html
Я выполнил Настройка политик SELinux для веб-серверов Apache и попробовал чтобы добавить политику httpd_log_t
в папку ./ log
, и использовал следующие:
$ semanage fcontext -a -t httpd_log_t "/var/www/html/mywebsite1.com/log(/.*)?"
$ restorecon -Rv /var/www/html/mywebsite1.com
Однако в папке log
все еще нет httpd_log_t
применена политика, и httpd
по-прежнему не может запуститься с той же ошибкой, что и раньше. как я проследил до журнала ошибок httpd
:
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/html/mywebsite1.com/log/error_log.
AH00015: Unable to open logs
Итак, я поискал решения и обнаружил, что это может быть связано с политиками SELinux. Используя ls -lZ /var/www/html/mywebsite1.com
, текущие политики распечатываются следующим образом:
total 8
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:54 log
drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Oct 1 09:14 public_html
Я выполнил Настройка политик SELinux для веб-серверов Apache и попробовал чтобы добавить политику httpd_log_t
в папку ./ log
, и использовал следующие:
$ semanage fcontext -a -t httpd_log_t "/var/www/html/mywebsite1.com/log(/.*)?"
$ restorecon -Rv /var/www/html/mywebsite1.com
Однако в папке log
все еще нет httpd_log_t
применяется политика, и httpd
по-прежнему не может запуститься с той же ошибкой, что и раньше.
Я даже пытался установить папку public_html
с помощью httpd_sys_rw_content_t
, и это не сработало.
Я думаю, что что-то не так с процессом настройки политик. Но я не мог найти никаких рабочих решений для этого. Что я упустил в процессе? Благодарим вас за помощь!
Я обнаружил, что проблема заключалась в том, что два файла журнала, указанные в конфигурации vhost, не были созданы, и кажется, что httpd
не имеет возможность каким-то образом его создать .
Итак, я
error_log
и requests_log
в /var/www/html/mywebsite1.com / log /
, $ semanage ...
и $ restorecon ...
команды, чтобы получить правильный результат: .
Relabeled /var/www/html/mywebsite1.com/log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
Relabeled /var/www/html/mywebsite1.com/log/error_log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
Relabeled /var/www/html/mywebsite1.com/log/requests_log from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:httpd_log_t:s0
И после перезапуска httpd
все заработало! Сайт снова доступен, и теперь в этих файлах журналов хранятся журналы.
Я думаю, вам нужно принудительное применение определенного типа.
/var/log/audit/audit.log
на наличие конкретных сообщений об ошибках deny. Вы можете запустить это: sealert -a /var/log/audit/audit.log
grep myerror /var/log/audit/audit.log|audit2allow -v
Это выведет требуемый тип принудительного исполнения.