Назад | Перейти на главную страницу

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

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

Я думаю, вам нужен конкретный тип принуждения.

  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

Это приведет к нужному вам типу принуждения.