2021-05-12 14:32:11
SELinux入門和基本設定
SElinux的概念:
SELinux[Security Enhanced Linux (安全強化 Linux)],是工作在核心中的MAC (Mandatory Access Control,強制存取控制系統)的一個實現,目的在於明確的指明某個進程可以存取哪些資源(檔案、網路埠等)。強制存取控制系統的用途在於增強系統抵禦 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。所以它不是網路防火牆或 ACL 的替代品,在用途上也不重複。
DAC和MAC的聯絡和區別:
一般系統上採用的DAC的環境,selinux則是MAC(強制存取控制)
DAC環境下進程是無束縛的
MAC環境下策略的規則決定控制的嚴格程度
MAC環境下進程可以被限制的
策略被用來定義被限制的進程能夠使用那些資源(檔案和埠)
預設情況下,沒有被明確允許的行為將被拒絕
對於selinux的通俗理解:
selinux,它給一些特定程式(這些程式也在不斷增加)做了一個沙箱,它將檔案打上了一個安全標籤,這些標籤屬於不同的類,也只能執行特定的操作,也就是規定了某個應用程式設定了你可以存取那些檔案或目錄。
subject operation object
主體:進程稱為主體(subject)
物件(object):所有可以讀取的物件,包括檔案、目錄和進程,埠等,
SELinux中對所有的檔案都賦予一個type的檔案型別標籤,對於所有的進程也賦予各自的一個domain的標籤。Domain標簽能夠執行的 操作由安全策略裡定義。當一個subject試圖存取一個object,Kernel中的策略執行伺服器將檢查AVC (存取向量快取Access Vector Cache), 在AVC中,subject和object的許可權被快取(cached),查詢“應用+檔案”的安全環境。然後根據查詢結果允許或拒絕存取
安全策略:定義主體讀取物件的規則資料庫,規則中記錄了哪個型別的主體使用哪個方法讀取哪一個物件是允許還是拒絕的,並且定義了哪種行為是充許或拒絕
了解和設定 SELinux
1. 獲取當前 SELinux 執行狀態
getenforce
可能返回結果有三種:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表僅記錄安全警告但不阻止可疑行為,Enforcing 代表記錄警告且阻止可疑行為。
2. 改變 SELinux 執行狀態
setenforce [ 1 | 0 ]
切換disabled狀態或者從disabled狀態切換至別的狀態都需要重新啟動。而enforceing和Permissive兩種狀態間切換不需要重新啟動
重新啟動時會為整個檔案系統重新建立安全標籤(touch /.autorelabel && reboot)。
只要grub中或者組態檔中有一個設定了disabled ,那麼seLinux就是不啟動的。
若是想要永久變更系統 SELinux 執行環境,可以通過更改組態檔 /etc/sysconfig/selinux實現。
3. SELinux 執行策略
strict: CentOS5,每個進程都受到selinux的控制
targeted: 用來保護常見的網路服務,僅有限進程受到selinux控制,只監控容易被入侵的進程,rhel4只保護13個服務,rhel5保護88個服務
minimum:centos7,修改過的targeted,只對選擇的網路服務
mls:提供MLS(多級安全)機制的安全性
minimum和mls穩定性不足,未加以應用
一般都是預設採用targeted,不用修改
4. 安全標籤
a.檢視程式的安全標籤
#ps auxZ | grep lldpad
system_u:system_r:initrc_t:s0 root 1000 8.9 0.0 3040 668 ? Ss 21:01 6:08 /usr/sbin/lldpad -d
b.檢視檔案的安全標籤:有.就是有安全標籤
#ls -Z /usr/lib/xulrunner-2/libmozjs.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/lib/xulrunner-2/libmozjs.so
安全標籤有多個選項,我們只需要關注第三個type就行。
Type:指定資料型別,規則中定義何種進程型別存取何種檔案Target策略基於type實現,多服務共用:public_content_t
給檔案重新打安全標籤:
chcon [-t TYPE] FILE...
chcon[OPTION]... --reference=RFILE FILE...
-R:遞回打標;
恢復目錄或檔案預設的安全上下文:
restorecon[-R] /path/to/somewhere
5.安全上下文
semanage來自policycoreutils-Python包,centos 6上預設沒安裝
檢視預設的安全上下文
semanage fcontext –l
新增安全上下文
semanage fcontext -a –t httpd_sys_content_t‘/testdir(/.*)?’
restorecon –Rv /testdir
刪除安全上下文
semanage fcontext -d –t httpd_sys_content_t‘/testdir(/.*)?’
6.埠
檢視埠標籤
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
7.布林規則
布林型規則:
getsebool
setsebool
檢視bool命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 檢視修改過的布林值
設定bool值命令:
setsebool [-P] booleanvalue
setsebool [-P] Boolean=value
8.紀錄檔
yum install setroublesshoot*(重新啟動生效)
將錯誤的資訊寫入/var/log/message
grep setroubleshoot/var/log/messages
sealert-l UUID
檢視安全事件紀錄檔說明
sealert-a /var/log/audit/audit.log
掃描並分析紀錄檔
Apache SELinux 設定範例
1、安裝httpd服務,改變網站的預設主目錄為/website,新增SELinux檔案標籤規則,設定http_sys_content_t到/website及目錄下所有檔案,使網站可存取
[root@~]# mkdir /website
[root@~]# ll -Z /website -d
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /websit
[root@~]# ll -Z /var/www/html/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
[root@~]# chcon --reference=/var/www/html /website
[root@~]#ll -Z /website/
-rwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
[root@~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/website"
[root@~]# service httpd restart
[root@~]#echo "test website" > /website/index.html
測試:
在瀏覽器上輸入地址,可以正常存取到
2、修改網站埠為9527,增加SELinux埠標籤,使網站可存取
[root@~]# semanage port -l | grep "http_port_t"
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
[root@~]# semanage port -a -t http_port_t -p tcp 9527
[root@~]# semanage port -l | grep "http_port_t"
http_port_t tcp 9527,80, 81, 443, 488, 8008, 8009, 8443, 9000
[root@~]#vim /etc/httpd/conf/httpd.conf
Listen 9527
測試:
3、啟用SELinux布林值,使使用者student的家目錄可通過http存取
[root@~]#vim /etc/httpd/conf/httpd.conf
修改為:
# UserDir disabled
UserDir public_html
[root@~]# chmod 711 /home/jay
[root@~]#mkdir /home/jay/public_html
[root@~]#echo "jay home" > /home/jay/public_html/index.html
檢視布林規則:
[root@~]# semanage boolean -l | grep "homedir"
httpd_enable_homedirs (off , off) Allow httpd to read home directories
修改布林規則:
[root@~]# setsebool -P httpd_enable_homedirs on
測試:
SELinux安全上下文初探 http://www.linuxidc.com/Linux/2014-04/99508.htm
一次由SELinux引起的SSH公鑰認證失敗問題 http://www.linuxidc.com/Linux/2013-07/87267.htm
SELinux 入門教學 http://www.linuxidc.com/Linux/2013-04/82371.htm
SELinux簡單設定 http://www.linuxidc.com/Linux/2012-12/77032.htm
CentOS系統如何快速關閉SELinux http://www.linuxidc.com/Linux/2012-11/74613.htm
CentOS/RHEL下如何關閉SELinux http://www.linuxidc.com/Linux/2011-05/36486.htm
SELinux 入門指南 http://www.linuxidc.com/Linux/2016-05/131162.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-09/135202.htm
相關文章