Saturday, April 7, 2012

DocumentRoot does not exist

在Fedora底下,我嘗試把apache某個網頁設定檔的DocumentRoot指向home目錄的工作位置,可是在restart apache(sudo /etc/init.d/httpd restart)時候,得到Warning,寫著DocumentRoot [PATH/IS/HERE] does not exist,發現是SELinux把apache擋住了。

解決方法:

  1. 安裝policycoreutils-gui:sudo yum install -y policycoreutils-gui
  2. 執行system-config-selinux:system-config-selinux
  3. 點選左側"Boolean"選單
  4. 將"Allow httpd to read home directories"(httpd_enable_homedirs)的選項打勾(立即生效)
如此的方法不論之後重新開機也會保持設定,但是要注意安全問題,在測試的個人電腦可以如此操作,不建議在真的Web Server這麼做

3 comments:

  1. 印象中這不是可以用 symbolic link 解決?

    SElinux 超難 configure

    ReplyDelete
  2. 你是這麼處理的嗎?我不清楚哪個是比較合適的作法,但是若symbolic link用起來沒有不方便的地方的話,相對於關掉SElinux會好很多。

    ReplyDelete
  3. 1. 命令列指令: setsebool -P httpd_enable_homedirs # -P persist across reboots
    2. 列出全部 httpd (Apache) 相關 boolean: getsebool -a | grep httpd
    文件: http://linux.die.net/man/8/httpd_selinux

    你自己寫的 Web App code 跑在 Apache 裡面,權限需求特殊被 SELinux 擋住時可將『httpd 放入 permissive domain』: semanage permissive -a httpd_t

    ReplyDelete