1、SElinux簡介
SELinux: Secure Enhanced Linux,是美國國家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)開發的Linux的一個強制訪問控制的安全模塊。2000年以GNU GPL發布,Linux內核2.6版本后集成在內核中
2、SElinux和普通linux區別:
DAC:Discretionary Access Control自由訪問控制
MAC:Mandatory Access Control 強制訪問控制
?DAC環境下進程是無束縛的
?MAC環境下策略的規則決定控制的嚴格程度
?MAC環境下進程可以被限制的
?策略被用來定義被限制的進程能夠使用那些資源(文件和端口)
?默認情況下,沒有被明確允許的行為將被拒絕
沒有SElinux的linux系統就是DAC模式的,在該模式下,進程是無約束的,如以root身份運行的進程擁有一切權限
在SELinux中沒有root這個概念,安全策略是由管理員來定義的,任何軟件都無法取代它。這意味著那些潛在的惡意軟件所能造成的損害可以被控制在最小。一般情況下只有非常注重數據安全的企業級用戶才會使用SELinux。
SELinux提供了一種靈活的強制訪問控制(MAC)系統,且內嵌于Linux Kernel中。SELinux定義了系統中每個【用戶】、【進程】、【應用】和【文件】的訪問和轉變的權限,然后它使用一個安全策略來控制這些實體(用戶、進程、應用和文件)之間的交互,安全策略指定如何嚴格或寬松地進行檢查。
只有同時滿足了【標準Linux訪問控制】和【SELinux訪問控制】時,主體才能訪問客體。
MAC與DAC的最大區別就是:DAC只針對用戶的權限,如,root,對所有文件都有至高的權限,或者一個文件的權限是664,那么這個文件的擁有者就擁有了讀寫的權限,而在MAC的模式下,即使是root,在使用不同程序時,你所取得的權限不一定是root,而要看當時該程序的設定而定,如此來,MAC體系中,針對的就是進程而不是用戶的權限。
3、SElinux的運行機制
當一個subject(如: 一個應用)試圖訪問一個object(如:一個文件),Kernel中的策略執行服務器將檢查AVC (Access Vector Cache), 在AVC中,subject和object的權限被緩存(cached)。如果基于AVC中的數據不能做出決定,則請求安全服務器,安全服務器在一個矩陣中查找“應用+文件”的安全環境。然后根據查詢結果允許或拒絕訪問,拒絕消息細節位于/var/log/messages中。
4、selinux的配置文件:
/etc/selinux/config或者/etc/sysconfig/selinux
[10:59 root@Centos6.8/var/ftp/pub]# ll /etc/selinux/config -rw-r--r--. 1 root root 458 Jul 20 02:18 /etc/selinux/config [10:59 root@Centos6.8/var/ftp/pub]# ll /etc/sysconfig/selinux lrwxrwxrwx. 1 root root 17 Jul 20 02:18 /etc/sysconfig/selinux -> ../selinux/config
該配置文件定義了:
1) 打開或關閉SELinux
2) 設置系統執行哪一個策略(policy)
3) 設置系統如何執行策略(policy)
[19:48 root@Centos6.8/usr/src/linux]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
5、SElinux的策略類型
SELinux有四種策略類型:
strict: centos5,每個進程都受到selinux的控制
targeted: 用來保護常見的網絡服務,僅有限進程受到selinux控制,只監控容易被入侵的進程,rhel4只保護13個服務,rhel5保護88個服務
minimum:centos7,修改過的targeted,只對選擇的網絡服務?
mls:提供MLS(多級安全)機制的安全性
minimum和mls穩定性不足,未加以應用
其中centos5,6只有targeted和strick兩種策略,一般默認是targeted策略,主要針對一些網絡服務來進行監管,如http、samba等
6、查看SElinux的安全上下文(secure context)
如果開啟了SElinux,在10為權限后面會有一個點(.)的標志
[10:59 root@Centos6.8/var/ftp/pub]# ll total 12 drwxr-xr-x. 2 root root 4096 Sep 14 09:57 hello -rw-r--r--. 1 root root 1192 Sep 14 09:58 ks6.cfg -rw-r--r--. 1 root root 1368 Sep 14 10:11 mylinux-ks.cfg [11:05 root@Centos6.8/var/ftp/pub]# ll -Z drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 hello -rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 ks6.cfg -rw-r--r--. root root unconfined_u:object_r:public_content_t:s0 mylinux-ks.cfg
7、安全上下文元素
所有操作系統訪問控制都是以關聯的客體和主體的某種類型的訪問控制屬性為基礎的。在SELinux中,訪問控制屬性叫做安全上下文。所有客體(文件、進程間通訊通道、套接字、網絡主機等)和主體(進程)都有與其關聯的安全上下文,一個安全上下文由三部分組成:用戶、角色和類型標識符。常常用下面的格式指定或顯示安全上下文:
安全上下文有五個元素組成:
user:role:type:sensitivity:category
User:指示登錄系統的用戶類型,如root,user_u,system_u,多數本地進程都屬于自由(unconfined)進程【以XXX_u表示】 Role:定義文件,進程和用戶的用途:文件:object_r,進程和用戶:system_r【以XXX_r表示】 Type:指定數據類型,規則中定義何種進程類型訪問何種文件Target策略基于type實現,多服務共用:public_content_t【以XXX_t表示】 Sensitivity:限制訪問的需要,由組織定義的分層安全級別,如unclassified,secret,top,secret, 一個對象有且只有一個sensitivity,分0-15級,s0最低,Target策略默認使用s0 Category:對于特定組織劃分不分層的分類,如FBI Secret,NSA secret, 一個對象可以有多個categroy,c0-c1023共1024個分類,Target 策略不使用cateaory
在targeted模式下,主要的關鍵策略就是看domain/type是否符合已定的策略,所謂的domain值得就是程序本身,而type指的是file type,只有file type在domain本身可執行的范圍內,該程序才能進程訪問文件,當然就算符合了策略,還要看文件本身的權限,等于有兩層保險。
8、SElinux的相關命令操作
(1)
getenforce: 獲取selinux當前狀態
sestatus:查看selinux狀態
setenforce 0|1
0: 設置為permissive(每個受限的進程違規操作不會被禁止,但會被記錄于審計日志)
1: 設置為enforcing(強制,每個受限的進程都必然受限)
(2)
給文件重新打安全標簽:
chcon[OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
chcon[OPTION]… –reference=RFILE FILE…
-R:遞歸打標;
恢復目錄或文件默認的安全上下文:
restorecon [-R] /path/to/somewhere
(3)
semanage:默認安全上下文查詢與修改,semanage來自policycoreutils-python包,要使用semanage要先安裝policycoreutils-python包
查看默認的安全上下文
semanage fcontext –l
添加安全上下文
semanage fcontext -a –t httpd_sys_content_t‘/testdir(/.*)?’
restorecon –Rv /testdir
刪除安全上下文
semanage fcontext -d –t httpd_sys_content_t‘/testdir(/.*)?’
查看端口標簽
semanage port –l
添加端口
semanage port -a -t port_label-p tcp|udpPORT
semanage port -a -t http_port_t -p tcp 9527
刪除端口
semanage port -d -t port_label-p tcp|udpPORT
semanage port -d -t http_port_t -p tcp 9527
修改
semanage port -m -t port_label-p tcp|udpPORT
semanage port -m -t http_port_t-p tcp9527
(4)
布爾型規則:
getsebool
setsebool
查看bool命令:
getsebool[-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改過的布爾值
設置bool值命令:
setsebool [-P] booleanvalue
setsebool [-P] Boolean=value
原創文章,作者:麥德良,如若轉載,請注明出處:http://www.www58058.com/46436