SELinux
-----------------------------------------------------------------------------------------------------------------------------------------------
Security-Enhanced Linux
安全增強Linux
DAC:Discretionary Access Control自由通路控制
MAC:Mandatory Access Control強制通路控制
SELinux工作類型
<1>SELinux有四種工作類型:
strict: centos5,每個程序都受到selinux的控制
targeted: 用來保護常見的網絡服務,僅有限程序受到selinux控制,隻監控容易被***的程序,centos4隻保護13個服務,centos5保護88個服務
minimum:centos7,修改的targeted,隻對選擇的網絡服務
mls:提供MLS(多級安全)機制的安全性
<2>targeted為預設類型,minimum和mls穩定性不足,未加以應用,strict已不再使用
SELinux安全上下文
<1>傳統Linux,一切皆檔案,由使用者,組,權限控制通路
<2>在SELinux中,一切皆對象(object),由存放在inode的擴充屬性域的安全元素所控制其通路
<3>所有檔案和端口資源和程序都具備安全标簽:安全上下文(security context)
<4>安全上下文有五個元素組成:
user:role:type:sensitivity:category
user_u:object_r:tmp_t:s0:c0
實際上下文:存放在檔案系統中,ls –Z;ps –Z
<5>期望(預設)上下文:存放在二進制的SELinux政策庫(映射目錄和期望安全上下文)中
semanage fcontext –l
五個安全元素
<1>User:訓示登入系統的使用者類型,如root,user_u,system_u,多數本地程序都屬于自由(unconfined)程序
<2>Role:定義檔案,程序和使用者的用途:檔案:object_r,程序和使用者:system_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政策
<1>對象(object):所有可以讀取的對象,包括檔案、目錄和程序,端口等
<2>主體:程序稱為主體(subject)
<3>SELinux中對所有的檔案都賦予一個type的檔案類型标簽,對于所有的程序也賦予各自的一個domain的标簽。domain标簽能夠執行的操作由安全政策裡定義
<4>當一個subject試圖通路一個object,Kernel中的政策執行伺服器将檢查AVC (通路矢量緩存Access Vector Cache), 在AVC中,subject和object的權限被緩存(cached),查找“應用+檔案”的安全環境。然後根據查詢結果允許或拒絕通路
<5>安全政策:定義主體讀取對象的規則資料庫,規則中記錄了哪個類型的主體使用哪個方法讀取哪一個對象是允許還是拒絕的,并且定義了哪種行為是充許或拒絕
設定SELinux
<1>配置SELinux:
SELinux是否啟用
給檔案重新打安全标簽
給端口設定安全标簽
設定某些操作的布爾型開關
SELinux的日志管理
<2>SELinux的狀态:
enforcing: 強制,每個受限的程序都必然受限
permissive: 允許,每個受限的程序違規操作不會被禁止,但會被記錄于審計日志
disabled: 禁用
setenforce 0 臨時切換為permissive
setenforce 1 臨時切換為disabled
sestatus 檢視selinux狀态
enforcing和permissive互相切換可以不用重新開機就立即生效,但enforcing與disabled互相切換、permissive與disabled互相切換必須切換
配置SELinux
<1>相關指令:
getenforce: 擷取selinux目前狀态
sestatus :檢視selinux狀态
setenforce 0|1
0: 設定為permissive
1: 設定為enforcing
<2>配置檔案:
/boot/grub/grub.conf
使用selinux=0禁用SELinux
/etc/selinux/config
/etc/sysconfig/selinux
SELINUX={disabled|enforcing|permissive}
修改SELinux安全标簽
<1>給檔案重新打安全标簽:
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:遞歸打标;
<2>恢複目錄或檔案預設的安全上下文:
restorecon [-R] /path/to/somewhere
預設安全上下文查詢與修改
<1>Semanage:來自policycoreutils-python包
<2>檢視預設的安全上下文
semanage fcontext –l
<3>添加安全上下文
semanage fcontext -a –t httpd_sys_content_t ‘/testdir(/.*)?’
restorecon –Rv /testdir
<4>删除安全上下文
semanage fcontext -d –t httpd_sys_content_t ‘/testdir(/.*)?’
Selinux端口标簽
<1>檢視端口标簽
semanage port –l
<2>添加端口
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>修改現有端口為新标簽
semanage port -m -t port_label -p tcp|udp PORT
semanage port -m -t http_port_t -p tcp 9527
SELinux布爾值
<1>布爾型規則:
getsebool
setsebool
<2>檢視bool指令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 檢視修改過的布爾值
<3>設定bool值指令:
setsebool [-P] boolean value(on,off)
setsebool [-P] Boolean=value(0,1)
舉例:setsebool -P samba_enable_home_dirs on
SELinux日志管理
<1>yum install setroubleshoot(重新開機生效)
将錯誤的資訊寫入/var/log/message
<2>grep setroubleshoot /var/log/messages
<3>sealert -l UUID
檢視安全事件日志說明
<4>sealert -a /var/log/audit/audit.log
掃描并分析日志
SELinux幫助
<1>yum –y install selinux-policy-devel ( centos7.2)
<2>yum –y install selinux-policy-doc
<3>mandb | makewhatis
<4>man -k _selinux
semanage port -l |grep http:檢視selinux政策啟用下httpd允許使用的端口
semanage port -a -t http_port_t -p tcp 9527:給http端口增加9527端口
semanage port -l:檢視所有端口