解決辦法:
方法一:
把目錄或檔案的策略類型改成 httpd_sys_content_t 就可以了。
# chcon -R -h -t httpd_sys_content_t /www/web/
然後可以用 ls -laZ 命令查看檔案目錄的策略類型。
方法二:
禁用SELinux
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了。
另外一篇參考文章:
apache提示DocumentRoot must be a directory
系統內容:Scientific Linux release 6.2
將DocumentRoot改為 /home/godontop/www 後提示:
Starting httpd: Syntax error on line 293 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
[root@sl ~]# getsebool -a |grep httpd_enable_homedirs
httpd_enable_homedirs --> off
原來是SELinux不允許使用home目錄作為web目錄!
修改 SELinux 設定
view sourceprint?1 [root@sl ~]# setsebool httpd_enable_homedirs on
之後重啟apache,一切正常
[root@sl ~]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]