1、SELinux配置文件html
在CentOS 7系統中部署SELinux很是簡單,因爲SELinux已經做爲模塊集成到內核中,默認SELinux已經處於激活狀態。對管理員來講,更多的是須要配置與管理SELinux,CentOS 7系統中SELinux全局配置文件爲/etc/sysconfig/selinux,內容以下:linux
1web 2vim 3centos 4安全 5服務器 6app 7dom 8tcp 9 10 11 12 |
[root@centos7 ~]# vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted |
SELinux=enforcing爲SELinux總開關,有效值能夠是enforcing、permissive或disabled。
其中,disabled表明禁用SELinux功能,因爲SELinux是內核模塊功能,因此若是設置禁用,須要重啓計算機。permissive表明僅警告模式,處於此狀態下時,當主題程序試圖訪問無權限的資源時,SELinux會記錄日誌但不會攔截該訪問,也就是最終訪問是成功的,只是在SELinux日誌中記錄而已。enforcing模式表明強制開啓,SELinux會攔截非法的資源訪問並記錄相關日誌。
使用setenforce能夠臨時在enforcing模式與permissive模式之間切換,切換會被馬上應用於當前系統,計算機重啓後無效,永久修改模式須要修改配置文件。
1 2 |
[root@centos7 ~]# setenforce 0 #設置SELinux爲permissive模式 [root@centos7 ~]# setenforce 1 #設置SELinux爲enforcing模式 |
2、SELinux安全上下文
SELinux會爲進程與文件添加安全信息標籤,如:SELinux用戶、角色、類型以及可選的級別。當運行SELinux後全部這些信息都是訪問控制的依據。下面經過一個實例文件查看SELinux安全上下文,使用ls -Z命令就能夠看到文件或目錄的這些上下文信息,而ps aux –Z則能夠查看進程的安全上下文信息:
1 2 3 |
[root@centos7 ~]# ls -Z anaconda-ks.cfg -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg [root@centos7 ~]# ps aux -Z |
SELinux的安全上下文包括
用戶:角色:類型:級別
3、SELinux排錯
無論SELinux策略是容許仍是拒絕資源的訪問請求行爲,都會記錄日誌,也就是AVC(Access Vector Cache)。全部SELinux拒絕的消息都會被記錄進日誌,根據系統中安裝運行的服務進程不一樣,拒絕日誌消息會被記錄到不一樣的文件中,表6-2列出了進程與日誌文件的關係。
表6-2
日誌文件 進程
/var/log/audit/audit.log auditd服務開啓
/var/log/messages auditd服務關閉,rsyslogd服務開啓
/var/log/audit/audit.log,/var/log/messages安裝setroubleshoot相關軟件包
autitd與rsyslogd同時開啓
對於大多數生產環境中的服務器而言,更多的是沒有部署安裝圖形界面的Linux系統,咱們須要手動查看日誌文件。在此建議管理員安裝setroubleshoot相關的軟件包,這樣能夠將本來生澀的AVC拒絕日誌轉換爲可讀性比較高的setroubleshoot日誌。查看日誌能夠使用以下兩種方法:
1 2 |
[root@centos7 ~]# grep setroubleshoot /var/log/messages [root@centos7 ~]# grep denied /var/log/audit/audit.log |
查看messages日誌會提示,根據黑體字提示運行sealert命令才能夠看到人性化報錯信息。
setroubleshoot: SELinux is preventing /usr/sbin/httpd from read access on the file index.html. For complete SELinux messages. run sealert -l 7082b8b4-70f4-42fb-92ea-08a51299d080
1 |
[root@centos7 ~]# sealert -l 7082b8b4-70f4-42fb-92ea-08a51299d080 |
4、修改安全上下文
有多種方式能夠修改與管理SELinux安全上下文,如:chcon、semanage、fcontext以及restorecon命令。
1. chcon命令
描述:修改文件SELinux安全上下文。
用法:chcon [選項] [-u SELinux用戶] [-r 角色] [-l 範圍] [-t 類型] 文件
chcon [選項] --reference=參考文件 文件
選項:-u 修改用戶屬性
-r 修改角色屬性
-l 修改範圍屬性
-t 修改類型屬性
示例:
(1)修改文件安全上下文。
1 2 3 4 |
[root@centos7 ~]# cp --preserve=all /etc/passwd /root/ #複製文件(保留上下文信息) [root@centos7 ~]# ls -Z /root/passwd #查看文件SELinux安全上下文 [root@centos7 ~]# chcon -t admin_home_t /root/passwd #修改文件安全上下文中的類型 [root@centos7 ~]# ls -Z /root/passwd |
(2)修改目錄安全上下文。
1 |
[root@centos7 ~]# chcon -R -t admin_home_t /root/ #遞歸修改目錄安全上下文 |
(3)根據參考文件修改目標文件安全上下文。
1 |
[root@centos7 ~]# chcon --reference=/etc/passwd /root/passwd |
經過chcon修改的安全上下文並非SELinux預設的安全上下文,當文件系統重置SELinux安全標籤或使用restorecon命令重置指定目錄的安全標籤後,全部文件與目錄的安全標籤會被還原爲系統預設值,若是須要修改SELinux默認的預設安全上下文,須要使用semanage命令添加或修改。
5、semanage命令
描述:SELinux策略管理工具。
用法:semanage fcontext [-S store] -{a|d|m|l|n|D} [-frst] file_spec
選項:-a,--add添加預設安全上下文
-d,--delete刪除指定的預設安全上下文
-D,--deleteall 刪除全部的預設自定義上下文
-m,--modify修改指定的預設安全上下文
-l,--list 顯示預設安全上下文
-n,--noheading 不顯示頭部信息
示例:
(1)查看SELinux策略默認的預設安全上下文信息,系統將列出策略中定義的全部目錄與安全上下文信息。
1 |
[root@centos7 ~]#semanage fcontext -l |
(2)修改策略,添加一條新的預設安全上下文信息。
1 2 3 |
[root@centos7 ~]# semanage fcontext -a -t samba_share_t /test/test.txt [root@centos7 ~]# mkdir /test; touch /test/test.txt [root@centos7 ~]# ls -Z /test/test.txt |
(3)使用restorecon命令,還原test.txt文件的安全上下文爲預設值。
1 2 |
[root@centos7 ~]# restorecon /test/test.txt [root@centos7 ~]# ls -Z /test/test.txt |
(4)遞歸設置目錄的預設安全上下文。
1 2 3 4 5 |
[root@centos7 ~]# semanage fcontext -a -t httpd_sys_content_t "/site/www(/.*)?" [root@centos7 ~]# mkdir -p /site/www/{web1,web2} [root@centos7 ~]# touch /site/www/{web1,web2}/index.html [root@centos7 ~]# ls -RZ /site/www [root@centos7 ~]# restorecon -R /site/ |
(5)刪除預設安全上下文。
1 |
[root@centos7 ~]# semanage fcontext -d /test/ test.txt |
(6)檢查預設SELinux安全上下文。
1 |
[root@centos7 ~]# matchpathcon /site/www/ |
6.2.6 查看與修改布爾值
SELinux布爾值能夠實時被修改。如,你能夠在不從新加載或編譯SELinux策略的狀況下容許服務訪問NFS文件系統。getsebool是用來查看SELinux布爾值的命令,用法比較簡單,-a選項用來查看全部的布爾值。通常建議管理員經過管道過濾本身須要的布爾值參數,如getsebool -a |grep ftp過濾與FTP相關的布爾值信息,顯示效果中左側爲關鍵詞,右側爲開關,on表明開,off表明關,具體命令以下。
1 2 3 4 5 6 7 8 9 10 |
[root@centos7 ~]# getsebool -a abrt_anon_write off abrt_handle_event off allow_console_login on allow_cvs_read_shadow off allow_daemons_dump_core on allow_daemons_use_tcp_wrapper off allow_daemons_use_tty on allow_domain_fd_use on … …部份內容省略… … |
修改SELinux布爾值狀態也很是簡單,使用setsebool name X便可實現。其中,name是布爾值名稱,X表明on或off。默認setsebool命令修改的布爾值參數會當即生效,但計算機重啓後會被還原,若是但願永久修改,須要使用-p參數。
1 2 |
[root@centos7 ~]# setsebool ftp_home_dir on [root@centos7 ~]# setsebool -p ftp_home_dir on |