2012-09-12 66 views
2

我有一個運行在RHEL5安裝中的apache服務器上的php腳本。該腳本在「rpm -q --info packagename」上運行一個exec。使用selinux從apache + php查詢rpm

問題是它可以在許可模式下與selinux正常工作,但不能在完全啓用時使用。所以我認爲這是一個selinux問題。

我已經開始使用audit2allow來創建基於我發現的被拒絕條目的規則,但是現在審查日誌中不再有任何拒絕,但它仍然不會在啓用selinux的情況下運行。

在我的世界裏,它似乎在查詢系統是否允許運行,當selinux說「如果你試試這個,我會阻止你」。所以系統不運行exec。如果可以的話,我認爲我會得到一個「否認」,我可以根據它創建一個新的selinux規則。隨着selinux在寬容,我也沒有得到任何否認,但它的作品..

所以看來我將不得不處理這個困難的方式,並創建一個自定義規則爲selinux。說和做我做了一個:

module php_rpm 1.0; 

require { 
    type httpd_t; 
    type bin_t; 
    type rpm_exec_t; 
    type rpm_var_lib_t; 
    class file { execute execute_no_trans getattr read execmod }; 
    class dir { getattr search }; 
} 

#============= httpd_t ============== 
allow httpd_t rpm_exec_t:file { execute execute_no_trans getattr read execmod }; 
allow httpd_t rpm_var_lib_t:dir { getattr search }; 

Unfortunally這個什麼都沒有做我的問題,但assumingly搞亂了我的SELinux規則有點:P

是否有任何人試圖從PHP在SELinux能夠執行rpm和帶走了嗎?

回答

1

我確實找到了解決這個問題的方法。也許不是最好的方式,但它有一點點。

我的audit2allow不起作用的原因是因爲並非所有消息都顯示在審計日誌中。我激活它顯示所有日誌一次,我讀到這一點: http://docs.fedoraproject.org/en-US/Fedora/13/html/SELinux_FAQ/index.html#id3028826

一旦我得到更多的拒絕消息在日誌中,我可以找出怎麼做才能使它工作。

最終的TE-文件看起來像這樣:

module php_rpm 1.0; 

require { 
    type selinux_config_t; 
    type httpd_script_exec_t; 
    type security_t; 
    type httpd_t; 
    type rpm_exec_t; 
    type rpm_var_lib_t; 
    class dir { search getattr }; 
    class file { getattr read execute_no_trans execute lock }; 
} 

#============= httpd_t ============== 
allow httpd_t httpd_script_exec_t:file { read getattr execute_no_trans }; 
allow httpd_t rpm_exec_t:file { read getattr execute_no_trans execute }; 
allow httpd_t rpm_var_lib_t:dir { getattr search }; 
allow httpd_t rpm_var_lib_t:file { read getattr lock }; 
allow httpd_t security_t:dir search; 
allow httpd_t security_t:file read; 
allow httpd_t selinux_config_t:dir search; 
allow httpd_t selinux_config_t:file { read getattr }; 

我有一種感覺它有點開門這兒,所以我會仍然試圖收緊下來一些如何。但是SELINUX規則並不是我最關心的問題,但它是次要的。

如果任何人有更好的建議,也許這是一個更具體的規則,請隨時分享!