Seliux安全配置


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(/.*)?




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