今日一台同僚的虛拟機安裝了httpd,然後修改DocumentRoot,但是無論怎麼修改都會啟動報錯DocumentRoot must be a directory。
檢視目錄權限,root的正常可以檢視到的,然後想,是否apache使用者進不了目錄(root使用者建立檔案夾)。修改檔案夾所屬使用者後還是一樣報錯,無法啟動httpd。
仔細想了下,linux系統貌似還有個SElinux安全機制,檢視一下狀态吧。
[root@localhost home]# getenforce
Enforcing
果然SElinux被開啟了,而且還是強制模式。目錄被設成了user_home_t類型,apache的程序沒有權限,無法通路。針對Apache的程序所使用的SELinux target policy規定了apache的程序隻能通路httpd_sys_content_t類型的目錄或檔案。是以隻要修改相關的權限就可以了。
解決辦法:
1.更改檔案夾權限
- chcon -t httpd_sys_content_t /home/www/
- chcon -t httpd_sys_content_t /home/www/html/
然後ls -Z檢視目錄權限
看,權限被改為httpd_sys_content_t了吧。這樣就可以啟動httpd了。
2.關閉SElinux
關閉SElinux的話需要重新開機系統,修改方法為:
vi /etc/selinux/config
修改SELINUX=disabled然後重新開機系統就關閉SElinux了。
想不重新開機系統的同學可以使用setenforce指令設定SElinux。