SElinux的前身是NSA(美國國家安全局)發起的一個項目。它的目的是將系統加固到可以達到軍方級別。
為什麼NSA選擇Linux呢?
在目前市面上大多數操作系統都是商用閉源的,只有Linux是開源的,這樣修改並加入這項功能就方便許多,而且沒有版權糾紛。所以,現在selinux就成為了Linux內核的一部分。
在了解selinux之間,我們需要知道DAC和CS的概念,它們是linux系統本身的安全機制。
DAC:自主訪問控制
每一個用戶為了能夠實現和其他用戶共享文件,在使用ACL之前,只能通過改變這個文件其他用戶的權限,但是這中方法給系統安全帶來了無窮的隱患。
CS(安全上下文):取決於發起用戶的權限和文本本身的權限
CS+DAC給系統的安全機制帶來了漏洞,事想apache用戶可以查看/etc/passwd,如果它有寫權限,就可能被利用進而就修改passwd文件,危害系統安全。
所有才又了MAC強制訪問控制的概念
MAC: Mandatory Access Control 強制訪問控制,它是selinux實現訪問控制的基礎
還通過httpd服務來說明它的原理:
SELINUX通過type enforce (TE)強制類型策略將httpd的工作目錄定義在一個特定的目錄/var/www用戶如果在定義其他目錄,將不允許訪問,從而實現mac的強制訪問控制。
selinux是怎麼工作的
它通過operation (操作)的主和賓打一個“標簽”,在一個“類型”裡只能由特定的目錄或用戶執行。這樣可以限定一個進程的執行范圍只能在一個“沙箱”(sandbox)內了(最小權限法則)
###operation: 讀,寫,執行,等。其實是一個主謂賓的結構 Subject Operation Object
###最小權限法則:例如定義Sbjiect httpd 的目錄/var/www 為public_content_t類型,這樣,httpd只能訪問有這個特定類型的文件或目錄,這些文件就叫沙箱“sendbox”
使用selinx,必須精心設計一套訪問法則
給不同的進程打上不同的“域”,給不同的目錄打上不同的”類型“通過定義“類型”和“域”的對應規則,來實現。selinx需要域和標簽的對應關系,一對一對應 。但是系統上有上千個進程,實現起來很麻煩,所以一般情況下,並不是用selinx作為安全防范。
selinux的實現機制有兩種
strict: 任何進程都受selinux的控制,一般不用,太難設定
targeted: 紅帽開發,指定選定的進程來受SELINUX,這種機制使得selinx更加容易受到控制
policy: 規則組合起來就叫策略
規則通常是以二進制文件存在的(編輯完轉換成二進制),這樣可以降低系統資源占用
ll /etc/selinxu/policy
MLS muiti level scurity
selinxu把一些規則裡面可以方便控制的功能設定為on或者off,這些都成為布爾類型
getsebool -a 可以顯示這些布爾型的內容
fcontext 規定目錄屬於哪個進程的范圍
啟動使用selinux
1.啟用selinux
2.顯示標簽
在不同的目錄建立的文件類型是不一樣的,歸不同的進程管理。
3.改變一個類型的標簽
4.恢復默認安全上下文及修改
6.開啟布爾類型
下面通過添加一個samba目錄來測試selinux控制
1.添加tools文件夾
2.添加用戶gentoo,並設置samba密碼,允許器登陸samba服務器在tools下創建文件
3.我們查看下/shared目錄的CS,並且開啟selinux
4.開啟selinux後,再使用smbclient命令就會報錯,我們看下配置文件裡面有這樣一行 # To set a label use the following: chcon-t samba_share_t /path ,所以我們必須把/shared文件夾的CS修改後才能正常使用samba
5.我們關閉samba裡關於訪問家目錄的布爾類型
這個時候使用win網絡鄰居,以用戶gentoo登陸後,就不能進入gentoo家目錄了
6.我們將它開啟就又能訪問了,命令如下: