redhatEnterprise4下的apache怎么訪問別的目錄?發(fā)表人:wuhuizhong | 發(fā)表時間: 2007年四月19日, 15:15
將DocumentRoot設在/var/www/html下可以訪問 Forbidden 對于剛使用Redhat Enterprise Linux4 或Fedora Core 2以上/CentOS 4的用戶,一定會為Apache經(jīng)常無法正常運轉,報以"Permission denied"等錯誤而大為不解,甚至大為惱火。 其實這是因為這些系統(tǒng)里激活了SELinux,而用戶的apache配置與SELinux的配置策略有抵觸產生的,只有通過適當調整,使apache的配置和訪問符合策略才能正常使用。 現(xiàn)在下面來分析一下SELinux中有關httpd(apache)的context定義(略有刪節(jié)) /home/[^/]+/((www)|(web)|(public_html))(/.+)? system_u:object_r:httpd_user_content_t
/var/www(/.*)? system_u:object_r:httpd_sys_content_t
/var/www/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
/usr/lib/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
/var/www/perl(/.*)? system_u:object_r:httpd_sys_script_exec_t
/var/www/icons(/.*)? system_u:object_r:httpd_sys_content_t
/var/cache/httpd(/.*)? system_u:object_r:httpd_cache_t
/etc/vhosts -- system_u:object_r:httpd_config_t
/usr/sbin/httpd -- system_u:object_r:httpd_exec_t
/usr/sbin/apache(2)? -- system_u:object_r:httpd_exec_t
/usr/sbin/suexec -- system_u:object_r:httpd_suexec_exec_t
/var/log/httpd(/.*)? system_u:object_r:httpd_log_t
/var/log/apache(2)?(/.*)? system_u:object_r:httpd_log_t
/var/log/cgiwrap.log.* -- system_u:object_r:httpd_log_t
/var/cache/ssl.*.sem -- system_u:object_r:httpd_cache_t
/var/cache/mod_ssl(/.*)? system_u:object_r:httpd_cache_t
/var/run/apache(2)?.pid.* -- system_u:object_r:httpd_var_run_t
/var/lib/httpd(/.*)? system_u:object_r:httpd_var_lib_t
/var/lib/php/session(/.*)? system_u:object_r:httpd_var_run_t
/etc/apache-ssl(2)?(/.*)? system_u:object_r:httpd_config_t
/usr/lib/apache-ssl(/.*)? -- system_u:object_r:httpd_exec_t
/usr/sbin/apache-ssl(2)? -- system_u:object_r:httpd_exec_t
/var/log/apache-ssl(2)?(/.*)? system_u:object_r:httpd_log_t
/var/run/apache-ssl(2)?.pid.* -- system_u:object_r:httpd_var_run_t
/var/run/gcache_port -s system_u:object_r:httpd_var_run_t
/var/lib/squirrelmail/prefs(/.*)? system_u:object_r:httpd_squirrelmail_t
/usr/bin/htsslpass -- system_u:object_r:httpd_helper_exec_t
/usr/share/htdig(/.*)? system_u:object_r:httpd_sys_content_t
/var/lib/htdig(/.*)? system_u:object_r:httpd_sys_content_t
針對上述的內容,可以對如下的幾個常見問題進行簡單處理: 1.phpmyadmin在非默認/var/www/html目錄下無法運轉 假設phpmyadmin放在/web目錄下,那么執(zhí)行: chcon -R -t httpd_user_content_t /web 則會令/web及其下所有子目錄/文件,包括phpmyadmin文件都獲得了httpd_user_content_t的屬性,如果其傳統(tǒng)的Unix屬性對httpd來說是可讀的話,再重新訪問一下就應該可以了。 2./home目錄下的虛擬主機無法運轉 ls -Z /home/abc/ drwxr-xr-x abc abc user_u:object_r:user_home_dir_t tmp drwxrwxr-x abc abc user_u:object_r:httpd_user_content www 如不是,則可通過chcon來逐級目錄及文件更改,直至最后能訪問: chcon -R -t httpd_user_content_t /home/abc/web chcon -t user_home_dir_t /home/abc 3.CGI程序無法運行 chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi 如果是虛擬主機里的cgi,則參考問題2使之能正常使用普通的功能后,再通過chcon設置cgi文件的context為httpd_sys_script_exec_t即可。 4.Setuid/gid 程序無法運行 audit2allow -l -i /var/log/messages 將SELinux拒絕的信息轉換為相應的policy allow指令,將這些指令添加到SELinux policy 的src里相應的配置文件,重新生成policy并加載。但這樣做相對比較麻煩。 另一個方法最簡單,但將使apache得不到保護。首先確定SELinux 類型是targeted的: cat /etc/selinux/config|grep SELINUXTYPE 然后,使apache脫離SELinux保護: setsebool -P httpd_disable_trans 1 然后重啟動apache: /etc/init.d/httpd restart 這樣所有apache強制的檢查都失效,需要setuid/gid的程序可以正常使用。但這樣帶來了增加漏洞的危險,對于迫切需要運行而又很急的情況,本方法是一個最大限度減少系統(tǒng)安全缺失的最后辦法。對于取消SELinux 未必是一個好方法。 |
|
|