歡迎您光臨本站 註冊首頁

Linux中的SELinux原理與應用

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
SElinux的前身是NSA(美國國家安全局)發起的一個項目.它的目的是將系統加固到可以達到軍方級別.secutity enhanced linux 為什麼NSA選擇Linux呢? 在目前市面上大多數操作系統都是商用閉源的,只有Linux是開源的,這樣修改並加入這項功能就方便許多,而且沒有版權糾紛.,現在selinux就成為了Linux內核的一部分.
在了解selinux之間,我們需要知道DAC和CS的概念,它們是linux系統本身的安全機制. DAC:Discretionary Access Control 自主(任意)訪問控制 每一個用戶為了能夠實現和其他用戶共享文件,在使用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 規定目錄屬於哪個進程的範圍 《《《《《《《《《《《《 進程的執行本來是取決於用戶所擁有的許可權rwx,我們只想讓gentoo對a.txt具有寫許可權,進行修改.對其他任何文件都不能修改. 那麼我們就需要對他進行一些限制,將他能執行的操作僅限於a.txt這個文件. 我們就藉助sandbox:沙盒 將他的許可權限定在某個特定目標 我們定義一個進程類型為t1,在定義一個目標為t2 我們制定一個策略表,t1隻能對t2執行什麼操作,把活動範圍限制在沙盒. 就是提供了一個域,將活動範圍限定在這個域之內. subject:domain(type) 例如:一個web網站,linux系統上需要用戶發起httpd進程來訪問.這個用戶擁有rx許可權.我們只需要用戶查看網頁就行了,不能讓他訪問我們的系統,那麼只要將他限定在一個域內就行了.比如我們建一個目錄 /var/www,我們把用戶的httpd進程活動範圍限制在這個目錄.他就算搞破壞,也只是針對這個目錄,無法搞壞我們整個系統. MAC做進了內核,-->SELinux selinux的模型: strict模型:安全級別太高,每一個進程都需要嚴格設定,五角大樓才用 - -!! target模型:只對可能有風險的進行限定,web,ftp,http等 在/etc/selinux/config定義了類型 SELINUXTYPE=target在一行 可以關閉,只要修改SELINUX=enforcing enforcing-狀態為生效 permissive-狀態為生效,但不強制,只警告不阻止.發送郵件至日誌 disabled-不開啟 下次開機生效

#getenforce 查看當前生效的模型 #setenforce 0 或1改變狀態,在enforcing與permissive之間切換 /etc/sysconfig/selinux鏈接/etc/selinux/config 類型強制:selinux為每一個進程分配了一個標籤 label:標籤 user:用戶 role:組 type:類型 #ls -Z 欄位user:role:type 查看文件標籤 #ps -axZ 查看進程標籤 定義規則,策略在/etc/selinux/targeted/policy/policy.21 它是二進位格式,不可直接制定,需要文本文件,在進行轉換 改變文件的類型# chcon -t 類型 文件名 我們可以通過修改文件標籤來限制進程訪問文件 #restorecon -vvF 恢復文件類型 如果是目錄,只改目錄本身.要想對其子目錄及其文件生效,使用-R 如果ftp被selinux限制,就不能上傳了. 使用getsebool -a | less 查看進程功能的開啟與關閉 修改方法:setsebool 功能名 no或off 當前生效,永久有效要加-P選項 》》》》》》》》》》》》》》》》 啟動使用selinux 1.啟用selinux
  1. vim /etc/sysconfig/selinux
  2. SELINUX=enforcing #任何進程都受selinux控制
  3. permissive #仍然受控制,但是進程進入了別的目錄會記錄到日誌
  4. disable #乾淨徹底的關閉
  5. setenforce
  6. genenforce
2.顯示標籤
  1. ls -Z 顯示文件的標籤
  2. 一共五段 角色:selinux里另外定義的用戶
  3. object_r: 有點類似於組
  4. user_home_t: 域或者類型(最重要)通過改變它可以控制訪問.類型強制的機制就是通過它實現的

  5. ps -Z 顯示進程的標籤
  6. 所有顯示unconfined_t都表示不受selinux控制
  7. ps auxZ | grep httpd
  8. ls -dZ
在不同的目錄建立的文件類型是不一樣的,歸不同的進程管理. 3.改變一個類型的標籤
  1. chcon chage contex 改變上下文
  2. chcon -t 改類型,指定為特定類型
  3. -u
  4. -R 遞歸修改,可以改變目錄下所有目錄
  5. --reference= 以某個文件的標籤為參照改變成一樣的標籤
  6. chcon -R --reference=/var/www/html /www
  7. chcon -t default_t /www/index.html
4.恢復默認安全上下文及修改
  1. restorecon
  2. -R 遞歸
  3. -F 強制
  4. -v 顯示詳細信息
  5. restorecon -R -v -F /www # 顯示/www目錄的詳細CS信息
  6. semange
  7. -d 刪除
  8. -m 修改
  9. -r
  10. -a 附加
  11. -t 類型
6.開啟布爾類型
  1. getsebool -a | grep httpd #查看某個對應的布爾類型的值

  2. setsebool httpd_enable_cgi=on # 加上-p選項永久有效
下面通過添加一個samba目錄來測試selinux控制
1.添加tools文件夾
  1. vim /etc/samba/smb.conf
  2. [tools]
  3. path = /share #沒有的話事前創建一個
  4. public = yes
  5. write list = @mygrp #只允許mygrp組具有創建文件的許可權
  6. browseable = yes
  7. service smb start
2.添加用戶gentoo,並設置samba密碼,允許器登陸samba伺服器在tools下創建文件
  1. </pre><pre class="cpp" name="code">groupadd mygrp
  2. useradd gentoo -g mygrp
  3. [[email protected]station32 var]# smbpasswd -a gentoo
  4. New SMB password:
  5. Retype new SMB password:
  6. Added user gentoo.
  7. smbclient -L 192.168.0.32 -U gentoo # 查看samba伺服器的內容
3.我們查看下/shared目錄的CS,並且開啟selinux
  1. ls -dZ /share/
  2. drwxrwxr-x root mygrp root:object_r:default_t /share/

  3. setenforce 1
4.開啟selinux后,再使用smbclient命令就會報錯,我們看下配置文件裡面有這樣一行 # To set a label use the following: chcon-t samba_share_t /path ,我們必須把/shared文件夾的CS修改後才能正常使用samba
  1. chcon -t samba_share_t /share
5.我們關閉samba里關於訪問家目錄的布爾類型
  1. setsebool samba_enable_home_dirs off
這個時候使用win網路鄰居,以用戶gentoo登陸后,就不能進入gentoo家目錄了
6.我們將它開啟就又能訪問了,命令如下:
  1. setsebool samba_enable_home_dirs on


[火星人 ] Linux中的SELinux原理與應用已經有738次圍觀

http://coctec.com/docs/linux/show-post-47354.html