SELinux介紹
- SELinux: Secure Enhanced Linux,是美國國家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)開發(fā)的Linux的一個強制訪問 控制的安全模塊。2000年以GNU GPL 發(fā)布防楷,Linux 內(nèi)核2.6版本后集成在內(nèi)核中
- DAC:Discretionary Access Control 自由訪問控制
- MAC:Mandatory Access Control 強制訪問控制
DAC 環(huán)境下進程是無束縛的
MAC 環(huán)境下策略的規(guī)則決定控制的嚴格程度
MAC 環(huán)境下進程可以被限制的
策略被用來定義被限制的進程能夠使用那些資源(文件和端口)
默認情況下,沒有被明確允許的行為將被拒絕
SELinux 工作類型
- SELinux 有四種工作類型:
strict:centos5,每個進程都受到selinux 的控制
targeted:用來保護常見的網(wǎng)絡(luò)服務(wù), 僅有限進程受到selinux 控制则涯,只監(jiān)控容易被入侵的進程复局,centos4只保護13個服務(wù),centos5保護88個服務(wù)
minimum:centos7, 修改的targeted 粟判,只對選擇的網(wǎng)絡(luò)服務(wù)
mls: 提供MLS(多級安全)機制的安全性
- targeted為默認類型亿昏,minimum和mls 穩(wěn)定性不足,未加以應(yīng)用档礁,strict以不在使用
SELinux 安全上下文
- 傳統(tǒng)Linux角钩,一切皆文件,由用戶呻澜,組递礼,權(quán)限控制訪問
- 在SELinux中,一切皆對象(object)羹幸,由存放在inode的擴展屬性域的安全元素所控制其訪問
- 所有文件和端口資源和進程都具備安全標簽:安全上下文(security context)
- 安全上下文有五個元素組成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
- 實際上下文:存放在文件系統(tǒng)中
ls –Z 脊髓;ps –Z
- 期望( 默認)上下文:存放在二進制的SELinux 策略庫(映射目錄和期望安全上下文)中
semanage fcontext –l
五個安全元素
- User: 指示登錄系統(tǒng)的用戶類型,如root,user_u,system_u,多數(shù)本地進程都屬于自由(unconfined )進程
- Role: 定義文件,進程和用戶的用途:文件:object_r 栅受,進程和用戶:system_r
- Type: 指定數(shù)據(jù)類型供炼,規(guī)則中定義何種進程類型訪問何種文件Target策略基于type實現(xiàn), 多服務(wù)共用:public_content_t
- Sensitivity:限制訪問的需要,由組織定義的分層安全級別窘疮,如unclassified, secret,top,secret,一個對象有且只有一個sensitivity,分0-15級袋哼,s0最低,Target 策略默認使用s0
- Category:對于特定組織劃分不分層的分類,如FBI Secret闸衫,NSA secret,一個對象可以有多個categroy涛贯,c0-c1023共1024個分類,Target策略不使用category
SELinux 策略
對象(object):所有可以讀取的對象蔚出,包括文件弟翘、目錄和進程,端口等
主體:進程稱為主體(subject)
SELinux 中對所有的文件都賦予一個type的文件類型標簽骄酗,對于所有的進程也賦予各自的一個domain的標簽稀余。domain 標簽?zāi)軌驁?zhí)行的操作由安全策略里定義
當(dāng)一個subject 試圖訪問一個object ,Kernel 中的策略執(zhí)行服務(wù)器將檢查AVC ( 訪問矢量緩存Access Vector Cache), 在AVC中趋翻,subject和object的權(quán)限被緩存(cached) 睛琳,查找“應(yīng)用+文件”的安全環(huán)境。然后根據(jù)查詢結(jié)果允許或拒絕訪問
安全策略:定義主體讀取對象的規(guī)則數(shù)據(jù)庫,規(guī)則中記錄了哪個類型的主體使用哪個方法讀取哪一個對象是允許還是拒絕的师骗,并且定義了哪種行為是充許或拒絕
文件移動的時候历等,會保留文件的context值,cp復(fù)制文件時辟癌,會繼承目標文件的context值
圖1
- SELinux規(guī)則庫:
規(guī)則:哪種域能訪問或哪些種類型內(nèi)文件寒屯;
設(shè)置SELinux
- 配置SELinux:
SELinux是否啟用
給文件重新打安全標簽
給端口設(shè)置安全標簽
設(shè)定某些操作的布爾型開關(guān)
SELinux的日志管理
- SELinux的狀態(tài):
enforcing:強制,每個受限的進程都必然受限
permissive:啟用黍少,每個受限的進程違規(guī)操作不會被禁止寡夹,但會被記錄于審計日志
disabled:禁用關(guān)閉
- 相關(guān)命令:
getenforce:獲取selinux當(dāng)前狀態(tài)
sestatus:查看selinux狀態(tài)
setenforce 0|1
0:設(shè)置為permissive
1:設(shè)置為enforcing
- 配置文件:
/boot/grub/grub.conf
使用selinux=0禁用SELinux
/etc/selinux/config
/etc/sysconfig/selinux
SELINUX={disabled|enforcing|permissive}
修改SELinux 安全標簽
- 給文件重新打安全標簽:
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:遞歸打標;
圖2
- 恢復(fù)目錄或文件默認的安全 上下文:
restorecon [-R] /path/to/somewhere
默認安全上下文查詢與修改
- 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(/.*)?’
Selinux端口標簽
- 查看端口標簽
semanage port –l
- 添加端口
semanage port -a -t port_label -p tcp|udp PORT
semanage port -a -t http_port_t -p tcp 9527
圖3
- 刪除端口
semanage port -d -t port_label -p tcp|udp PORT
semanage port -d -t http_port_t -p tcp 9527
圖4
- 修改現(xiàn)有端口為新標簽
semanage port -m -t port_label -p tcp|udp PORT
semanage port -m -t http_port_t -p tcp 9527
圖5
SELinux 布爾值
- 布爾型規(guī)則:
getsebool 查看布爾值
setsebool 設(shè)置布爾值
- 查看bool命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改過的布爾值
圖6
- 設(shè)置bool值命令:
setsebool [-P] boolean value (on,off)
setsebool [-P] boolean=value (0 厂置,1)
-P 修改bool值并保存磁盤要出,永久生效
圖7
SELinux日志管理
yum install setroubleshoot(重啟生效)
將錯誤的信息寫入/var/log/message
grep setroubleshoot /var/log/messages
sealert -l UUID(UUID為message文件中的日志報錯事件的UUID)
查看安全事件日志說明
sealert -a /var/log/audit/audit.log
掃描并分析日志
SELinux幫助
yum –y install selinux-policy-devel ( centos7.2)
yum –y install selinux-policy-doc
mandb | makewhatis 更新數(shù)據(jù)庫
man -k _selinux 查看幫助
yum install setroubleshoot*
安裝圖形化SELinux故障排錯包
練習(xí)
1、啟用SELinux 策略并安裝httpd 服務(wù)农渊,改變網(wǎng)站的默認主目錄為/website,添加SELinux文件標簽規(guī)則患蹂,使網(wǎng)站可訪問
2、修改上述網(wǎng)站的http端口為9527 砸紊,增加SELinux端口標簽传于,使網(wǎng)站可訪問
3、啟用相關(guān)的SELinux布爾值醉顽,使上述網(wǎng)站的用戶student的家目錄可通過http訪問
4沼溜、編寫腳本selinux.sh,實現(xiàn)開啟或禁用SELinux功能
sed -ri.bak 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config
sed -ri.bak '/^SELINUX=/s/.*/SELINUX=disabled/' /etc/selinux/config