«Политика https_log_t» SELinux не вступила в силу

Я пытался настроить виртуальный хост с помощью 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 , и это не сработало.

Я думаю, что что-то не так с процессом настройки политик. Но я не мог найти никаких рабочих решений для этого. Что я упустил в процессе? Благодарим вас за помощь!

1
задан 1 October 2017 в 13:50
2 ответа

Я обнаружил, что проблема заключалась в том, что два файла журнала, указанные в конфигурации 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 все заработало! Сайт снова доступен, и теперь в этих файлах журналов хранятся журналы.

1
ответ дан 3 December 2019 в 23:25

Я думаю, вам нужно принудительное применение определенного типа.

  1. Сначала проверьте /var/log/audit/audit.log на наличие конкретных сообщений об ошибках deny. Вы можете запустить это:

sealert -a /var/log/audit/audit.log

  1. Затем запустить grep для конкретного сообщения об ошибке и передать это через audit2allow.

grep myerror /var/log/audit/audit.log|audit2allow -v

Это выведет требуемый тип принудительного исполнения.

0
ответ дан 3 December 2019 в 23:25

Теги

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