如果您的新部署的SaaS應用程序或任何您剛剛開發的系統或服務由于SELinux而無法運行,最好的辦法是在允許模式(Permissive)下進行故障排除。
SELinux在日志事件記錄方面的SELinux模式分為不同的三類——增強(Enforcing)、允許(Permissive)以及禁用(Disabled)——這也展示了管理員在SELinux系統內部如何能夠確保應用程序安全并排除故障。
安全增強型Linux是具有先進的訪問控制機制,內置于大多數現代Linux發行版。隨著安全增強型Linux的到位,管理員使用策略可以實現更好的安全管理。
但這些策略不僅是系統安全的關鍵,也是其功能實現的關鍵。例如,安全增強型Linux(Security-Enhanced Linux)允許應用程序查詢策略;管理員控制流程的初始化、繼承并執行程序;同時管理員管理文件、文件系統、目錄、套接字,打開文件描述符、通訊接口和網絡接口。其也同樣允許已發生策略的調整,具備更改SELinux策略而不需要重新啟動系統的能力。
SELinux通過實施強制訪問控制(Mandatory Access Control,MAC)基礎上的自主訪問控制(Discretionary Access Control,DAC)來實現防止系統被入侵。DAC限制訪問對象或資源,如文件、套接字、管道或網絡接口,基于主題或流程的特定身份,和/或主題所屬于的群組。MAC限制主題訪問對象或在對象或目標上運行的某種操作的能力。
SELinux模式
SELinux可設置為三種不同的模式:
增強(Enforcing):SELinux基于SELinux的策略拒絕訪問;
允許(Permissive):SELinux不拒絕訪問,但會記錄所有拒絕行為;以及
禁用(Disabled):SELinux不可用狀態。
并不推薦將SELinux設置為禁用模式。某些時候,管理員使用此模式是因為SELinux系統復雜,如果管理不善,可以輕易造成對應用程序功能的影響。例如,管理員可能會推出軟件即服務(SaaS)類型的應用程序,隨后發現它沒有正確地運行。在迅速地查看過日志文件后,管理員發現SELinux是罪魁禍首,因此將其關閉——但這會使強大的安全工具失去作用。
利用SELinux進行故障排除
工作很扎實。這是管理員在出現問題時應該始終最先關注的內容。默認情況下,SELinux會將所有內容記錄在/var/log/audit/audit.log中。當某一應用程序的功能出錯——假設您很確定問題不是出在應用程序的代碼——那么SELinux日志文件是您排除故障首先要關注的內容。標準的用戶必須使用su命令來獲得查看SELinux日志的權限(如圖A)。
CentOS 7服務器上的SELinux的日志文件
梳理審計日志的過程可能會很繁瑣,但它可以幫助了解究竟發生了什么問題。具體查看顯示拒絕的條目。這些條目將列出諸如進程ID、用戶ID、請求的權限、進程命令和目標名稱等信息。有了這些信息,您會發現為什么SELinux無法與您的應用程序/服務協同工作。
GUI的替代
如果碰巧運行的服務器上具有GUI(圖形化用戶界面),SELinux Alert Browser是一件必備的工具。當SELinux發現了某項問題,將會進行報警。點擊報警信息,輸入您的root用戶密碼,同時SELinux警告瀏覽器就會出現。
在初期,SELinux應該被設置為增強模式。如果SELinux在您的應用程序或服務中發現了問題,它便會拒絕其運行。您可以將默認策略從增強模式更改為允許模式,這樣SELinux會允許服務運行,同時記錄下所有用于排除問題的日志內容。當您遇到這樣的問題時,您可以按照以下步驟從增強模式切換到允許模式:
1.打開終端窗口;
2.輸入sudo nano /etc/sysconfig/selinux命令;
3.將SELINUX=enforcing更改為SELINUX=permissive;
4.保存并關閉文件;
5.重新啟動服務器;
為確保狀態已發生變化,輸入命令sestatus。這個命令會告訴您一切您需要知道的關于SELinux的當前狀態(如圖B)。
SELinux已經被切換為允許模式。
在當前狀態下,您的應用程序將會運行,并且SELinux將記錄所有拒絕行為,以便您能夠定位問題所在。
更改SELinux策略
舉例來說,您有一個SaaS的應用程序,想通過Apache服務器運行,這是不正常的。
假設Apache已經從某一可變換的文檔root運行網站服務,這就很可能是SELinux遇到問題的原因。我們例子中可變換的文檔root所在位置是/srv/www/。您在Apache上設置的所有內容都是正確的,但是網站無法從可變換的文檔root中啟動運行。您通過/var/log/audit/audit.log日志文件發現SELinux是罪魁禍首。問題是,SELinux并不了解可變換的文檔root。
首先,找出某一合法的文件上的諸多細節,我們將使用/var/www/html/ index.html——從標準文檔root目錄就可以調整相應的替代文件root。要查找此信息,請輸入以下命令:
ls -lZ /var/www/html/index.html
該命令的輸出結果如圖C中顯示的那樣。
該命令的輸出結果是“ls -lZ /var/www/html/index.html”。
使用命令emanage fcontext -l | grep '/var/www'Kauai展示所有的fcontext條目,或者使用命令/var/www/ folder來展示所有文件內容,將返回同樣的內容類型,即例子中的httpd_sys_content_t。隨后,通過SELinux使這種類型的文件能夠在/srv/www/service.com/html目錄中啟用。為此,使用semanage命令幫助完成策略變更:
semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
上述的命令指示semanage添加新的httpd_sys_content_t類型fcontext,并將其應用到目錄/srv/www中,同樣適用于任何子目錄和文件。此時,輸入命令semanage fcontext -l | grep '/srv/www'來查看您/srv/www目錄中的文件,并驗證httpd_sys_content_t內容是否生效。現在輸入命令restorecon -Rv /srv/www,這將為/srv/www目錄重新標記設置適當的安全內容,新修訂的SELinux策略也同樣適用于任何子目錄和文件。
現在,Apache能夠在/srv/www目錄下提供服務內容而不會遭到SELinux的零星打斷。當您的問題解決完成,使用和SELinux從增強模式調整成允許模式同樣的方法,將SELinux從允許模式調整回增強模式。