2007-06-15 17:35:59東進電腦-專業資料救援

SELinux for Apache CGI

最近安裝某產品在 Redhat Enterprise Server 4 (ES4) 上,有一部份需要以 cgi 的方式運作,
而且,Apache 設定都有設 ScriptAlias 等,同樣的環境在 Redhat9 都沒有問題,可是在
ES4,該 cgi 就是不正常 Work (internal error 之類的),查 Log 有下述的訊息。

* audit(1141721196.117:0): avc: denied { execute } for pid=5818 comm=httpd name=xxx dev=hda2 ino=295228 scontext=root:system_r:httpd_t tcontext=system_u:object_r:usr_t tclass=file

網路查到這是 SELinux 這個套件所造成的,在 ES3 以及 Fedora 3 以後的版本,預設都會開啟此套件,許多網頁會建議,/etc/selinux/config 這個檔,SELINUX=enforcing 改成 SELINUX=disabled ,嗯,這不是好主意,因為這是完全關閉該機制。就像買了個人防護軟體,然後,將所有的安全預設值,全部關掉一樣。

主要用 chcon 這個指令將要提供服務的目錄加以設定,-R 表示 recursive dir, -t 表示要指定的類型

* chcon -R -t httpd_user_content_t <要被 cgi process 讀取的檔案目錄>
* chcon -R -t httpd_sys_script_exec_t <提供 CGI 服務的目錄>

其餘 chcon 設 httpd 的其他類型,參考這裡 。

如果設定後,覺得總是有問題,可以用下列指令回歸到原始的設定,再重新設定

* /sbin/restorecon -v -R /home