Apache-2.4

SELinux 的“https_log_t policy”未生效

  • October 11, 2017

我試圖在httpd執行 Fedora 26 Server 的 Digital Ocean Droplet 上使用 apache 設置虛擬主機。我遵循了這個教程:如何在 CentOS 7 上設置 Apache 虛擬主機,假設 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

我遵循為 Apache Web 伺服器配置 SELinux 策略並嘗試將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,但它不起作用。

我認為政策制定過程可能有問題。但我找不到任何可行的解決方案。在這個過程中我有什麼遺漏嗎?非常感謝您的幫助!

我發現問題是沒有創建虛擬主機配置中指定的兩個日誌文件,並且似乎httpd沒有能力以某種方式創建它

所以我

  • 創建了一個空的error_logrequests_login /var/www/html/mywebsite1.com/log/
  • 重新執行$ semanage ...and$ 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,一切正常!該站點已恢復可訪問,並且這些日誌文件現在正在保留日誌。

引用自:https://serverfault.com/questions/876347