【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰

目錄:
(一)瞭解SELinux是如何工作的
(二)瞭解SELinux的上下文
(三)瞭解SELinux的幾種模式
(四)瞭解SELinux的布爾值


(一)瞭解SELinux是如何工作的
SELinux(Security-Enhanced Linux)是美國國家安全局(NSA)對於強制訪問控制的實現,是Linux歷史上最傑出的新安全子系統。NSA是在Linux社區的幫助下開發了一種訪問控制體系,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所需要文件。SELinux默認安裝在Fedora和Red Hat Enterprise Linux上,也可以作爲其他發行版上容易安裝的包得到。SELinux是2.6版本的Linux內核中提供的強制訪問控制(MAC)系統。對於目前可用的Linux安全模塊來說,SELinux是功能最全面,而且測試最充分的,它是在20年的MAC研究基礎上建立的。SELinux在類型強制服務器中合併了多級安全性或一種可選的多類策略,並採用了基於角色的訪問控制概念。
大部分使用SELinux的人使用的都是SELinux就緒的發行版,例如Fedora、Red Hat Enterprise Linux(RHEL)、Debian或CentOS。它們都是在內核中啓用SELinux的,並且提供一個可定製的安全策略,還提供很多用戶層的庫和工具,它們都可以使用SELinux的功能。
SELinux是一種基於“域-類型”模型的強制訪問控制(MAC)安全系統,它由NSA編寫並設計成內核模塊包含到內核中,相應的某些安全相關的應用也被打了SELinux的補丁,最後還有一個相應的安全策略。任何程序對其資源享有完全的控制權。假設某個程序打算把含有潛在重要信息的文件扔到/tmp目錄下,那麼在DAC情況下沒人能阻止他。SELinux提供了比傳統的UNIX權限更好的訪問控制。
傳統的文件控制方式是通過設置權限來實現的,例如一個文件我們設置的權限是777,那麼這個文件任何人都可以讀取、修改並刪除,文件操作完全由權限來控制,這種方式稱爲DAC(主動訪問控制)。而SELinux則是通過通過標籤的方式來進行訪問控制,例如a進程訪問一個文件aa,它的標籤是aa-fa,另一個b進程訪問文件是bb,它的標籤是bb-fb,同時bb文件的權限是777,如果此時a進程想要訪問bb文件,即使權限全部是可讀可寫可執行,但是由於標籤不相同,所以也仍然是無法訪問的。所以SELinux就是特定標記的進程,只能訪問特定標記的資源,就是上下文的概念。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰


(二)瞭解SELinux的上下文
(2.1)我們先在vms002主機上將http服務安裝起來,並設置開機自動啓動。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.2)由於SELinux服務還沒有開啓,所以可以設置開啓的狀態。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.3)使用# ps axZ | grep httpd命令可以查看httpd服務及其上下文的信息。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.4)因爲我們知道/var/www/html/目錄的的上下文是httpd_sys_content_t,如果我們在根下面創建一個/www目錄,並設置192.168.26.102/www指向根下面創建的/www目錄。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.5)接着我們在/etc/httpd/conf/目錄下的httpd.conf配置文件中設置/www目錄的Directory參數信息。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.6)我們發現/www目錄的上下文是default_t,並不是和/var/www/html/目錄的上下文httpd_sys_content_t一致。我們使用如下的命令修改上下文。
# chcon -R -t httpd_sys_content_t /www
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.7)由於上下文是一致的,此時發現訪問http://192.168.26.102/www/ 這個目錄可以正常的進行顯示。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.8)如果我們想恢復出廠默認值,則可以使用# restorecon -R /www/命令。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.9)如果我們想直接引用/var/www/html/目錄的上下文,則可以使用reference參數。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.10)如果我們有時候具體的上下文記得不是很清楚,可以使用萬能上下文來進行設置。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.11)如果我們想查詢當前系統中所有上下文的信息,可以使用# semanage fcontext -l進行查詢。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.12)例如像/var/www/html(/.*)?的正則表達式表示的就是/var/www/html目錄及其下面的所有文件或者目錄都可以進行匹配的。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.13)如果我們需要修改對應目錄默認的上下文信息,可以使用# semanage fcontext -a -t public_content_t '/www(/.*)?'命令,這樣當使用# restorecon -R /www/命令恢復出廠默認值的時候,就會顯示semanage命令設置的信息。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(2.14)如果我們想要刪除默認的上下文設置,則可以使用# semanage fcontext -d -t public_content_t "/www(/.*)?
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰


(三)瞭解SELinux的幾種模式
(3.1)查看SELinux模式類型的命令是getenforce。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(3.2)enforcing----->強制模式,必須要滿足SELinux的條件,不滿足的話,則阻止訪問且警報。
permissive----->允許模式,可以不滿足SELinux的條件,不滿足也可以訪問,但是有警報。所以有時候我們訪問不了服務器的時候,想想是不是SELinux導致的,可以臨時關閉SELinux,就是切換到了permissive模式。
(3.3)由於setenforce命令只是臨時切換,當我們重啓機器之後就不在生效了,如果希望服務器重啓後也生效,則可以在/etc/selinux/config配置文件中進行設置。記住:如果是設置成disable禁止的話,修改完之後必須要重啓才能生效。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(3.4)由於/etc/sysconfig/selinux目錄下的配置文件是指向/etc/selinux/config配置文件的軟連接,所以也可以對這個文件進行修改。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰


(四)瞭解SELinux的布爾值
一個服務有很多功能,比如是否允許寫,是否允許匿名寫等等。是否開啓這個功能,完全由配置文件來決定,但是如果SELinux功能啓用後,那麼決定服務是否啓動的一個條件是SELinux也要允許服務啓動。
(4.1)我們首先在vms002主機上安裝vsftpd服務。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.2)接着在vms001主機上安裝lftp和ftp的客戶端軟件。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.3)首先我們在vms001主機上通過客戶端軟件登錄vms002主機的ftp服務器,並準備將本地的books.txt文件上傳到ftp服務器。但是系統顯示“put: Access failed: 550 Permission denied. (books.txt)”報錯。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.4)首先檢查配置文件/etc/vsftpd/vsftpd.conf中的匿名用戶權限是否都有開啓。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.5)開啓匿名用戶的權限後,發現仍然沒有上傳文件的權限,系統顯示“put: Access failed: 553 Could not create file. (books.txt)”
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.6)創建一個/var/ftp/xx目錄,並且設置目錄的屬主和屬組爲ftp用戶,此時在vms001主機的客戶端上進入xx目錄後,嘗試上傳文件,發現仍然有“put: Access failed: 553 Could not create file. (books.txt)”報錯信息。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.7)我們查詢到在vms002主機上關於ftp布爾值的參數ftpd_anon_write和ftpd_full_access均爲off,在/etc/vsftpd/目錄下的vsftpd.conf的配置文件中已經有註釋提示布爾值設置問題。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.8)接着我們將ftpd_anon_write和ftpd_full_access參數設置爲on
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.9)如果我們希望設置的布爾值在系統重啓後也能繼續生效,可以加上-P的參數。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.10)總結:如果我們搭建了某個服務,從客戶端上開始往服務器上傳輸文件,但是沒法傳輸上去,應該從以下3條來檢查:1.檢查配置文件是否允許寫;2.檢查文件系統是否有權限;3.檢查SELinux的權限設置情況,一般SELinux涉及的就是上下文和布爾值量方面。
(4.11)我們除了使用命令行來進行SELinux的設置,也可以使用圖形化的界面方式來設置SELinux。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.12)SELinux對端口也是有設置上下文的。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.13)我們在httpd.conf配置文件中添加一個監聽的端口808,此時將httpd服務重啓後發現服務是無法正常啓動的。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.14)此時我們可以查找模板文件在/etc/ssh/sshd_config文件中查看。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
(4.15)給httpd服務設置808端口的上下文,此時httpd服務就可以正常的重啓了。
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰
【我的Linux,我做主!】企業軍工級安全策略--SELinux實戰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章