Я пытался настроить виртуальный хост с помощью apache httpd
на Digital Ocean Droplet под управлением Fedora 26 Server. И я последовал этому руководству: Как настроить виртуальные хосты 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
по-прежнему не может запуститься, с той же ошибкой, что и раньше. Я даже попытался установить 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
Это приведет к нужному вам типу принуждения.