SElinux: 是Linux的一個強制訪問控制的安全模塊 SElinux的相關概念: 對象:文件、目錄、進程、埠等 主體:進程稱為主體 SElinux將所有的文件都賦予一個type類型的標簽,所有的進程也賦予一個domain類型的標簽。domain標簽能夠執行的操作由安全策略里定義 #ubunt ...
SElinux: 是Linux的一個強制訪問控制的安全模塊
SElinux的相關概念:
對象:文件、目錄、進程、埠等
主體:進程稱為主體
SElinux將所有的文件都賦予一個type類型的標簽,所有的進程也賦予一個domain類型的標簽。domain標簽能夠執行的操作由安全策略里定義
#ubuntu沒有使用selinux
安全策略:定義主體讀取對象的規則資料庫,定義那些行為是允許的,那些行為是拒絕的。
SElinux的四種工作類型
-
Strict:CentOS 5,每個進程都受到selinux的控制
-
targeted:用來保護常見的網路服務,僅有限進程受到selinux控制,只監控容易被入侵的進程
-
minimum:CentOS 7,修改的targeted,只對選擇的網路服務
-
mls:提供MLS(多級安全)機制的安全性
targeted為預設類型,其他三種都不再使用了
SElinux的安全上下文
安全上下文:就是一個標簽。規定只有特定標誌的進程才能訪問特定標識的文件或目錄
在linux中,一切皆文件
在selinux中,一切皆對象。
安全上下文有五個元素組成:
user:role:type:sensitivity:category
(1)User:指示登錄系統的用戶類型,進程:如system_u為系統服務進程,是受到管制的,unconfined_u為不管制的進程,用戶自己開啟的,如 bash,文件:system_u系統進程創建的文件, unconfined_u為用戶自已創建的文件
(2)Role:定義文件,進程和用戶的用途:進程:system_r為系統服務進程,受到管制。unconfined_r 為不管制進程,通常都是用戶自己開啟的,如 bash,文件:object_r
(3)Type:指定數據類型,規則中定義何種進程類型訪問何種文件Target策略基於type實現,多服務共用:public_content_t
(4)Sensitivity:限制訪問的需要,由組織定義的分層安全級別,如unclassified,secret,top,secret, 一個對象有且只有一個sensitivity,分0-15級,s0最低,Target策略預設使用s0
(5)Category:對於特定組織劃分不分層的分類,如FBI Secret,NSA secret, 一個對象可以有多個categroy, c0-c1023共1024個分類, Target 策略不使用category
啟用和禁用selinux
selinux的狀態
enforcing:啟用selinux,強制,每個受限的進程都必然受限
permissive:啟用selinux,但是違反了策略只會報警,不會阻止
disabled:不啟用selinux
相關命令
getenforce: 獲取selinux當前狀態
sestatus :查看selinux狀態
setenforce 0|1 0: 設置為permissive 1: 設置為enforcing
通過配置文件啟用或禁用
/boot/grub/grub.conf 在kernel行使用selinux=0禁用SELinux
/boot/grub2/grub.cfg 在linux16行使用selinux=0禁用SELinux
/etc/selinux/config 或 /etc/sysconfig/selinux 中 SELINUX=
{disabled|enforcing|permissive}
文件安全標簽的管理
給文件重新打標簽:chcon工具
chcon -R -t 上下文 目錄或者文件
#-R, --recursive:遞歸處理所有的文件及子目錄
恢覆文件的預設標簽:restorecon
restorecon [-R] /path/to/somewhere #目錄文件就加R參數
修改預設的標簽:semanage工具
#查看預設的安全上下文
semanage fcontext -l
#添加安全上下文
semanage fcontext -a -t httpd_sys_content_t ‘/testdir(/.*)?’ #-a表示添加
restorecon -Rv /testdir
#刪除安全上下文
semanage fcontext -d -t httpd_sys_content_t ‘/testdir(/.*)?’
管理埠標簽
#查看埠標簽
semanage port -l
#添加埠
semanage port -a -t port_label -p tcp|udp PORT
semanage port -a -t http_port_t -p tcp 9527
#刪除埠
semanage port -d -t port_label -p tcp|udp PORT
semanage port -d -t http_port_t -p tcp 9527
#修改現有埠為新標簽
semanage port -m -t port_label -p tcp|udp PORT
semanage port -m -t http_port_t -p tcp 9527
管理SELinux布爾值
對指定服務的功能進行設置,服務能否正常啟用和服務是否正常啟動和selinux對應的bool值是否開啟共同決定。
#布爾型規則:
getsebool
setsebool
#臨時生效,重啟就不生效了 永久生效: 加上一個大寫的P
#查看指定的服務是否開啟了
getsebool -a | grep 服務名
#查看bool命令:
getsebool [-a] [boolean]
semanage boolean -l
semanage boolean -l -C 查看修改過的布爾值
#設置bool值命令:
setsebool [-P] boolean value(on,off)
setsebool [-P] Boolean=value(1,0)