歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> SELinux 入門

SELinux 入門

日期:2017/2/28 17:12:13   编辑:Linux教程

1.背景

SELinux 是「Security-Enhanced Linux」的簡稱,是美國國家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)開發的 Linux的一個擴張強制訪問控制安全模塊。原先是在Fluke上開發的,2000年以 GNU GPL 發布。

現在以Linux作為因特網服務器是越來越普遍的事了。在我這幾年作過的項目裡,WEB的開發基本都是基於Linux的,這裡有給大公司做的,也給政府部門做的,當然更多的是中小企業做的。這其中給政府做的,我們把SELinux作為一個賣點,接受了不少項目。

2.我們需要安全操作系統的理由

現在不論是政府還是民間企業,大家對信息安全問題是越來越關心了,因為企業的業務平台的服務器上存儲著大量的商務機密,個人資料,個人資料它直接關系到個人的隱私問題。特別是我們政府的網站,作為信息公開的平台,它的安全就更顯得重要了。這些連到互聯網的服務器,不可避免的要受到來自世界各地的各種威脅。最壞的時候我們的服務器被入侵,主頁文件被替換,機密文件被盜走。除了來自外部的威脅外,內部人員的不法訪問,攻擊也是不可忽視的。對於這些攻擊或者說是威脅,當然有很多的辦法,有防火牆,入侵檢測系統,打補丁等等。因為Linux也和其他的商用UNIX一樣,不斷有各類的安全漏洞被發現。我們對付這些漏洞不得不花很多的人力來堵住它。在這些手段之中,提高OS系統自身的牢固性就顯得非常的重要。

2.1傳統的Linux OS的不足之處

雖然Linux 比起 Windows 來說,它的可靠性,穩定定要好得多,但是他也是和其他的UNIX 一樣,有以下這些不足之處。

1)存在特權用戶root

  任何人只要得到root的權限,對於整個系統都可以為所欲為。這一點Windows也一樣。

2)對於文件的訪問權的劃分不夠細

  在linux系統裡,對於文件的操作,只有「所有者」,「所有組」,「其他」這3類的劃分。

  對於「其他」這一類裡的用戶再細細的劃分的話就沒有辦法了。

3)SUID程序的權限升級

  如果設置了SUID權限的程序有了漏洞的話,很容易被攻擊者所利用。

4)DAC(Discretionary Access Control)問題

  文件目錄的所有者可以對文件進行所有的操作,這給系統整體的管理帶來不便。

對於以上這些的不足,防火牆,入侵檢測系統都是無能為力的。

在這種背景下,對於訪問權限大幅強化的OS SELinux來說,它的魅力的無窮的。

2.2 SELinux的優點

SELinux系統比起通常的Linux系統來,安全性能要高的多,它通過對於用戶,進程權限的最小化,即使受到攻擊,進程或者用戶權限被奪去,也不會對整個系統造成重大影響。

接下來我來介紹SELinux的一些特點。

特點1:MAC(Mandatory Access Control)―――對訪問的控制徹底化

對於所有的文件,目錄,端口這類的資源的訪問,都可以是基於策略設定的,這些策略是由管理員定制的、一般用戶是沒有權限更改的。

特點2: TE (Type Enforcement)――― 對於進程只付與最小的權限

Te概念在 SELinux裡非常的重要。它的特點是對所有的文件都賦予一個叫type的文件類型標簽,對於所有的進程也賦予各自的一個叫 domain的 標簽。Domain標簽能夠執行的操作也是由access vector在策略裡定好的。

我們熟悉的apache服務器,httpd進程只能在httpd_t 裡運行,這個httpd_t 的domain能執行的操作,比如能讀網頁內容文件賦予httpd_sys_content_t, 密碼文件賦予shadow_t, TCP的80端口賦予 http_port_t等等。如果在access vector裡我們不允許 http_t來對http_port_t進行操作的花,Apache啟動都啟動不了。反過來說,我們只允許80端口,只允許讀取被標為 httpd_sys_content_t的文件,httpd_t就不能用別的端口,也不能更改那些被標為httpd_sys_content_t的文件(read only)。

特點3: domain遷移 ―― 防止權限升級

在用戶環境裡運行點對點下載軟件 azureus,你當前的domain是fu_t, 但是,你考慮到安全問題,你打算讓他在azureus_t裡運行,你要是在terminal裡用命令啟動azureus的話,它的進程的domain就會默認繼承你實行的shell的fu_t。

有了domain遷移的話,我們就可以讓azureus在我們指定的azureus_t裡運行,在安全上面,這種做法更可取,它不會影響到你的fu_t。

下面是domain遷移指示的例子:

domain_auto_trans(fu_t, azureus_exec_t, azureus_t)

意思就是,當在 fu_t domain裡,實行了 被標為 azureus_exec_t的文件時,domain 從fu_t遷移到 azureus_t 。下面是Apache啟動的遷移圖。注意了,因為從哪一個domain能遷移到httpd_t是在策略裡定好了,所以要是我們手動 (/etc/init.d/httpd start)啟動apache的話,可能仍然留在sysadm_t裡,這樣就不能完成正確的遷移。要用run_init命令來手動啟動。

特點4: RBAC(role base access control) ――――― 對於用戶只付與最小的權限

對於用戶來說,被劃分成一些ROLE,即使是ROOT用戶,你要是不在sysadm_r裡,也還是不能實行sysadm_t管理操作的。因為,那些ROLE可以執行那些domain也是在策略裡設定的。ROLE也是可以遷移的,但是也只能安策略規定的遷移。

Copyright © Linux教程網 All Rights Reserved