1.什麼是Selinux,
selinux就是 Security Enhanced Linux 中文意思就是安全強化的Linux。
2.Selinux的目標。
在傳統的DAC(Discretionary Access Control)自主訪問控制上,就是依據程序的擁有者(所在組)和文件的權限來決定是否有存取的能力。
這樣在擁有高級權限例如:root用戶啓動的程序就會有root自身所擁有的權限,這將會造成一些***事件的發生。
Selinux使用的是MAC(Mandatory Access Control)委任式訪問控制的方法。所以即使程序是root權限,也不一定能夠任意的讀取系統的文件,
這要看文件對這個程序設定的可取用的權限。但是這樣一來Selinux就要有很多的控件條目,Selinux就提供了一些預設的政策(Policy),並在
政策中提供了很多的規則。
總結:Selinux就是降主體由用戶變成程序,程序使用文件,文件是否讓該程序使用,雙向的都要設定。
3.selinux運作
1.主體:程序
2.目標:文件系統
3.政策:主要兩個 targeted:針對網絡服務限制多,針對本機限制少,預設政策。
strict:完整的Selinux限制,限制嚴格。
4.安全性本文(security context):主體能不能存取目標,有兩個限制條件1.政策是否允許。2.主體和目標的安全性文本是否一致。
過程:Selinux的主體要想讀取目標,首先要滿足政策,然後才能對比安全性本文,然後還要看用戶權限是否能夠有讀取文件的權限。
注意:這裏如果安全性本文有錯誤,那麼主體就不能存取文件系統,就會產生權限不符的提示。
4.說說安全性本文,安全性本文是程序和文件操作系統都需要一份。程序運行的時候當然是在內存中,所以程序的安全性文本就在內存中。
文件的安全性文本是在文件的inode中,所以讀取文件的inode就可以對比安全性本文和文件的權限來確定是否程序能夠讀取文件。
使用ls -Z是能夠顯示Selinux安全性本文的信息。
例如:system_u:object_r:user_home_t:s0
字段解釋:身份識別:角色:類型
身份識別:root(表示root身份)、system_u(表示系統程序)、user_u(表示一般用戶)
注意:在身份的識別中,系統上面大部分的數據都會是system_u和root,在/home這種文件中大部分都會是user_u這種。
角色:1.object_r(代表是檔案或者是目錄)2.system_r(代表的就是程序,有時候也代表使用者)
類型:(最重要)
在預設的targeted政策中,身份系別和角色基本上是不重要的,重要的在於這個類型(type)字段上,
基本上主體程序能不能讀取這個文件,與類型字段有關!類型字段在檔案和程序定義不相同
1.type:在文件資源(object)上面稱爲類型。
2.domain:在主體的程序(subject)則稱爲領域。
注意:domain和type要搭配在一起才能夠讀取檔案。
解釋一下Selinux type字段的相關性。
身份識別角色 對應在targeted的意義
root system_r 代表供root賬號登入是所取得的權限
system_usystem_r由於是系統賬號,是非交談式的系統運作程序
user_usystem_r一般可以登入用戶的程序
過程:-rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
1. 首先,我們觸發一個可執行的目標檔案,那就是具有 httpd_exec_t 這個類型的usr/sbin/httpd
文檔 。
2. 該文件的類型會讓這個檔案所造成的主體程序 (Subject) 具有 httpd 這個領域 (domain) ,我們
的政策針對這個領域已經制定了講多規則,其中包括這個領域可以讀取的目標資源類型;
3. 由於 httpd domain 被設定爲可以讀取 httpd_sys_content_t 這個類型的目標檔文件(Object) ,
因此你的網頁放置到 /var/www/html/ 目錄下,就能夠被 httpd 那支程序所諾取了;
4. 但最終能不能讀到正確的資料,還得要看 rwx 是否符合 Linux 權限的規範!
以上注意:政策內需要制定詳細的domain/type相關性。
5.以上是關於Selinux的原理性的問題,那麼下面說一下使用
1.Selinux支持的三種模式;1.enforcing強制模式:表明開始限制domain/type
2.permissive寬容模式:有警告信息,但是沒有domain/type限制。
3.diabled關閉
2.getenforce 查詢Selinux的狀態。
3.sestatus [-vb] v:檢查/etc/sestatus.conf內的文件
b:將目前的政策的規則布爾值列出。
4.Selinux的配置文件 /etc/selinux/config(這裏面有啓動的模式和政策的模式)
5.Selinux的啓動問題:
1)先要改變配置文件中的模式爲enfocing 或者 permissive.
2)到/boot/grup/menu.lst(其實這個是grup.conf的鏈接文件)去掉selinux=0(有了這個那麼內核在
啓動的時候就會忽略掉/etc/selinux/config的設定值,就不會加載Selinux)
以上注意:Selinux是加載在內核中的所以必須要重啓生效。
6.模式切換:在Selinux中可以在enforcing 和permissive之間切換,但是不能和disable切換(要重啓)
切換的指令setenforce [0|1] 0是permissive,1是enforcing。
6.實例:在/var/www/html 下建立的Index.html是可以執行的,ls -Z的屬性是
-rw-r--r-- root root user_u:object_r:httpd_sys_content_t:s0 /var/www/html/index1.html
注意:httpd_sys_content_t類型是可以被httpd_t 域讀取的
例如:在/root下建立的目錄
-rw-r--r-- root root user_u:object_r:user_home_t:s0 index.html
user_home_t 類型是不可以被httpd_t 域讀取的。
解決這個的辦法就是:重置Selinux安全性本文。
1.使用chcon( change file SELinux security context)命令處理:
chcon [-R] [-t type] [-u user] [-r role] 文件
或者:chcon [-R] --reference=範例文件 檔案
參數:-R :遞歸修改。
-t :後面接安全性文本的類型字段 例如:httpd_sys_content_t
-u :後面接身份識別,例如:system_u
-r :後面接角色例如:sytem_r
例如:chcon -t httpd_sys_content_t /var/www/html/index.html
chcon --reference=/etc/passwd index.html
2.系統默認的文件都有特殊的Selinux安全新本文,例如、/var/www/html 原本就是httpd能夠讀取的目錄,
所以就可以用還原的方式即:restorecon(restore file(s) default SELinux security contexts.
)命令。
參數:-R 遞歸
-v:將過程顯示到屏幕上。
7.Selinux的排錯:
1.Selinux是整合到內核中的服務,所以幾乎不用其他的服務支持,開機就好了。但是如果要一動一些文件到其他目錄下可能沒有更改安全性本文,‘
會產生錯誤,這裏就要用到其他的服務幫助了。
2.setroubleshoot服務會將錯誤信息寫入到/var/log/messages中,通過cat /var/log/messages | grep "setroubleshoot"可以查到。
3.使用auditd 把詳細的資料寫入到/var/log/audit/audit.log
auditd是覈查的意思.這裏的auditd服務會把很多的信息寫入/var/log/audit/audit.log,注意不只是錯誤信息。
使用audit2why可以幫助我們查詢。
以上兩種方法setroubleshoot更加好用
8.Selinux的政策與規則管理
1.首先要會查閱政策的相關內容。seinfo:-A 列出所有Selinux的狀態,規則布爾值,身份標誌,角色,類別等。
-t 列出Selinux所有類別
-r 所有的角色
-u 所有的身份標誌
-b 列出規則布爾值
想要知道更加詳細的的內容可以用sesearch [-a] [-s 主體類別] [-t 目標類型] [-b 布爾值]
-a 列出該類別或布爾值的所有相關信息
-s 後面接主體程序
-t 後面還要接類別:如 -t http_t
-b 後面還要接布爾值的規則,例如 -b http_enable_ftp_server
注意:以上兩個查詢很重要,有時候會遇到一些服務器無法訪問的問題,可以使用ps -aux -Z來找到主程序的domain 然後可以
利用sesearch 找到主程序能夠讀取的文件。
2.布爾值:裏面規範了很多的主體程序和文件的之間的讀取問題。其實就是一堆的規則。這個布爾值可以將規則設定爲啓動(1)或者關閉(0)
1.布爾值的查詢與修改。
1)seinfo -b可以用來查詢系統有多少布爾值,但是每個布爾值是否能夠啓動用getsebool命令查詢:
-a :列出目前系統上面的所有布爾值條款設定爲開啓或關閉值。
2)修改布爾值,關閉或者是啓動
setsebool [-P] 布爾值=[0|1]
-P:直接將設定值寫入配置文件,該設定數據未來會生效的。
例如:getsebool httpd_enable_homedirs
setsebool -P httpd_enable_homedirs=0
以上兩個布爾值的命令式很有用的。
3.默認目錄的安全性本文查詢與修改。
restorecon是能夠將文件恢復到文件所在位置的默認的安全性本文。
semanage是用來查詢默認的安全性本文。
#semanage {login|user|port|interface|fcontext|translation} -l
#semanage fcontext -{a|d|m} [-frst] file_spec
參數:fcontext:主要用在安全性文本方面的用途,-l爲查詢的意思;
-a 增加的意思,你可以增加一些目錄的默認安全性本文類型設定;
-m:修改的意思
-d:刪除的意思
例如:#semanage fcontext -a -t public_content_t(將默認文件的安全性本文加上 public_content_t)
注意:#semanage fcontext -l這個查詢到的是所有的默認的安全性本文的內容。
semanage fcontext -a -t public_content_t "/srv/samba(/.*)?
注意以上的格式/srv/samba(/.*)?