Apache-2.4
SELinux 的“https_log_t policy”未生效
我試圖在
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_log
和requests_log
in/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
,一切正常!該站點已恢復可訪問,並且這些日誌文件現在正在保留日誌。