學習在CentOS 5.3下架設LAMP時,複製了一套PHP的源碼到/var/www/html下,發現index.php無許可權訪問,而手工新增一個簡單的php檔案可以正常訪問,百思不得其解,可以確定的是檔案目錄的linux許可權設定沒問題,httpd配置也無問題.
最後在google上搜尋,發現原來是SELinux的設定問題,而SELinux還一直沒引起我的注意.
問題的處理如下(截錄網友文章片斷):
一開始我想來想去想不出為什麼,但是給我感覺是許可權的問題,用傳統的Linux的思維方式來看,許可權絕對沒有問題。但是仔細一想,SELinux是不是會有其他安全的設定?
檢查 avc message,查看 /var/log/messages檔案,發現有類似以下內容的這樣一段:
Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc: /
denied { getattr } for pid=19029 exe=/usr/sbin/httpd /
path=/var/www/html/about.html dev=dm-0 ino=373900 /
scontext=root:system_r:httpd_t tcontext=user_ubject_r:user_home_t /
tclass=file
嘿嘿,問題找到了,果然是SELinux的新特性搞的鬼。我把目錄或檔案設成了user_home_t類型,因此apache的進程沒有許可權,無法訪問。針對Apache的進程所使用的SELinux target policy規定了apache的進程只能訪問httpd_sys_content_t類型的目錄或檔案。
解決辦法:
很簡單,把目錄或檔案的策略類型改成 httpd_sys_content_t 就可以了
使用root使用者
# chcon -t httpd_sys_content_t 目錄名或檔案名稱
然後可以用 ls -laZ 命令查看檔案目錄的策略類型
原文連結:http://blog.csdn.net/niechunyang/article/details/5096957