SELinux:
SELinux概念
SELinux配置
啟用SELinux
管理文件安全標簽
管理端口標簽
管理SELinux布爾值開關
管理日志
查看SELinux幫助
SELinux概述
SELinux: Secure Enhanced Linux, 是美國國家安全局「NSA=The National Security Agency」 和SCC( SecureComputing Corporation)開發的 SELinux是Linux的一個強制訪問控制的安全模塊。工作于內核中, 2000年以GNU GPL發布,Linux內核2.6版本后集成在內核中 Linux有自己的控制機制: DAC: Discretionary Access Control 自由訪問控制 SELinux引入新的訪問控制機制: MAC: Mandatory Access Control 強制訪問控制 ? DAC環境下進程是無束縛的 ? MAC環境下策略的規則決定控制的嚴格程度 ? MAC環境下進程可以被限制的 ? 策略被用來定義被限制的進程能夠使用那些資源(文件和端口) ? 默認情況下,沒有被明確允許的行為將被拒絕 SELinux有四種工作類型: strict: 每個進程都受到selinux的控制(centos5) targeted: 用來保護常見的網絡服務,僅有限個進程受到selinux控制,只監控容易被入侵的進程, rhel4只保護13個服務,rhel5保護88個服務 minimum: centos7,修改過的targeted,只對選擇的網絡服務 mls:提供MLS(多級安全)機制的安全性 minimum和mls穩定性不足,未加以應用 SElinux安全上下文 傳統Linux,一切皆文件,由用戶,組,權限控制訪問 在SELinux中,一切皆對象,由存放在Inode的擴展屬性域的安全元素所控制其訪問。 所有文件和端口資源和進程都具備安全標簽:安全上下文” ( security context) 安全上下文有五個元素組成: user:role:type:sensitivity:category user_u:object_r:tmp_t:s0:c0 實際上下文:存放在文件系統中, 查看安全上下文命令: ls –Z;ps –Z 期望(默認)上下文:存放在二進制的SELinux策略庫(映射目錄和期望安全上下文)中 查看命令: semanage fcontext –l selinxu規則庫: 規則:哪種域能訪問那種或那些種類型的文件 SELinux的五個安全因素 User:指示登錄系統的用戶類型,如root, user_u,system_u,多數本地進程都屬于自由( unconfined)進程 Role:定義文件,進程和用戶的用途:文件:object_r,進程和用戶: system_r Type:指定數據類型,規則中定義何種進程類型訪問何種文件Target策略基于type實現,多服務共用: public_content_t Sensitivity:限制訪問的需要,由組織定義的分層安全級別,如unclassified, secret,top,secret, 一個對象有且只有一個sensitivity,分0-15級, s0最低,Target策略默認使用s0 Category:對于特定組織劃分不分層的分類,如FBI Secret, NSA secret, 一個對象可以有多個categroy, c0-c1023共1024個分類, Target 策略不使用cateaory
SElinux配置
SELinux是否啟用 給文件重新打標 給端口設置安全標簽 設定某些操作的布爾型特性 SELinux的日志管理 1、SELinux的狀態: ·enforcing:強制,每個受限的進程都必然受限 ·permissive:啟用,每個受限的進程違規操作不會被禁止,但會被記錄于審計日志 ·disabled:關閉 ·相關命令: sestatus 查看selinux的狀態 getenforce:獲取當前selinux狀態 setenforce 0|1 修改selinux狀態 0:設置為permissive 1:設置為enforcing 注意:此設定:重啟系統后無效 配置文件: /etc/selinux/config,/etc/sysconfig/selinux SELinux={disabled|permissive|enforcing} /boot/grub/grub.conf 在kernel行追加內核參數:使用selinux=0禁用SELinux 設置selinux也可以在開機的時候設定,在/boot/grub/grub.conf文件內核那一行后面設定selinux的狀態selinux=0|1,只要配置文件或內核設定為禁用,最后selinux的狀態為禁用 注意:在從disabled狀態切換至enforcing或permissive狀態需要重啟系統,這時候系統會對每一個文件一一重打標簽,需要花費一定的時間。 2、給配置文件重新打標: chcon chcon [OPTION]… CONTEXT FILE… chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE… chcon [OPTION]… –reference=RFILE FILE… OPTION: -R 遞歸打標,對目錄而言 例如:我想給自己定義的web文檔根目錄自定義為/htdocs chcon -R httpd_sys_content_t /htdocs 3、還原文件的默認標簽(默認安全上下文): restorecon [-R] /path/to/somewhere 例如:我又將web的文檔根目錄改為原來的目錄,這時候自定義的目錄的標簽需要還原 restorecon -R /htdocs 恢復是根據策略庫當中的策略進行還原 4、默認安全上下文查詢與修改 ·需要用到的包: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|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 5、布爾型規則: getsebool setsebool ·查看bool值命令: getsebool [-a] [boolean] semanage boolean –l semanage boolean -l –C
·設置bool 值命令: setsebool [-P] boolean value (on,off) setsebool [-P] Boolean=value (0 ,1) 6、SELinux日志管理: 需要安裝settroublesshoot*,安裝此包需要重啟系統才能生效,它會將錯誤日志記錄到/var/log/message 安裝包:yum install setroublesshoot* (重啟生效) 將錯誤的信息寫入/var/log/message grep setroubleshoot /var/log/messages sealert -l UUID 查看安全事件日志說明 sealert -a /var/log/audit/audit.log 掃描并分析日志
7、SELinux幫助:
yum -y install selinux-policy-devel (centos7)
yum -y install selinux-policy-doc (centos6)
mandb | makewhatis 需要更新man幫助的數據才能查詢
man -k _selinux
總結:selinux在安全防護上確實起到了一定的作用,它是在內核層面來工作,往往有許多的漏洞,一旦黑客利用漏洞入侵系統后果不堪設想,還有其操作的繁瑣和穩定性的欠缺的導致很多企業不愿意用到selinux ,一般都會使用硬件的安全防護設備,所以我們只需要作為了解,知道有這么個東西,如何開關閉及一些簡單的操作即可。
實戰演練
1、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問 vim /etc/selinux/config SELINUX=disabled reboot 重啟才生效 systemctl status httpd yum -y install httpd systemctl start httpd netstat -tnl iptalbes -F mkdir /website ll -Z /website/ -d vim /etc/httpd/conf/httpd.conf Document Root "/website/" <Directory "/website"> systemctl restart httpd systemctl status httpd echo mywebsite > index.html semanage fcontext -l |grep website semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?" ll -Z /website/ -d restorecon -R /website/ 2、修改上述網站的http端口為9527,增加SELinux端口標簽,使網站可訪問 vim /etc/httpd/conf/httpd.conf Listen 9527 semanager port -l|grep 9527 vim /etc/httpd/conf/httpd.conf netstat -ntl httpd -t 檢查語法 systemctl restart httpd semanger port -a -t http_port_t -p tcp 9527 iptables -F 3、啟用相關的SELinux布爾值,使上述網站的用戶student的家目錄可通過http訪問 在CentOS 7上 vim /etc/httpd/conf.d/usrdir.conf #UserDir disabled UserDir public_html systemctl restart httpd su -student mkdir public_html echo welcome to studenthome > index.html links x.x.x.x/~student 訪問家目錄 ll -d /home/student ps aux|grep http setfacl -m u:apache:x /home/student 在CentOS 6上 vim /etc/httpd/conf/httpd.conf #UserDir disabled UserDir public_html service httpd restart iptables -F su -student mkdir public_html cd public html echo studenthomecentos6 > index.html cd chmod 711 /home/wang ll -d /home/wang/
原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/48216