1、SELinux簡介html
一、selinux(Security-Enhanced Linux)是美國國家安全局(NSA)和SCC開發的Linux的一個強制訪問控制的安全模塊。selinux是一種基於 強制訪問控制(MAC)安全系統。
linux
二、Linux訪問方式:
正則表達式
1)DAC自主訪問控制:徹底依賴於Linux系統權限的設置(rwx);
apache
2)MAC強制訪問控制:是由策略規則所控制,策略的規則決定控制的嚴格程度。策略規則例如:文件、進程、端口的上下文標籤,selinux布爾值。
vim
2、SELinux的三種模式安全
● enforcing強制訪問:必須經過策略的配置才能夠訪問,會攔截非法的資源訪問並記錄相關日誌。bash
● permissive警告模式:容許訪問,當訪問無權限的資源時會警告並記錄相關日誌,不會攔截訪問。網絡
● disabled禁用:禁用selinux功能。ssh
一、修改selinux模式的命令(臨時生效,重啓系統後會變回默認的模式)
ide
setenforce命令只能在enforcing與permissive兩種模式之間進行切換。
命令:
命令 | 含義 |
getenforce | 查看當前的selinux模式 |
setenforce | 修改selinux模式,0爲permissive模式,1爲enforcing模式 |
二、修改配置文件(永久生效,重啓系統後生效)
[root@vms002 /]# vim /etc/selinux/config # 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=permissive #selinux模式,修改後重啓系統後纔會生效 # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
selinux配置文件有兩個,一個爲真實配置文件,一個爲軟連接,不管修改哪個配置文件均可以。以下所示:
[root@vms002 /]# ls -l /etc/selinux/config #真實配置文件 -rw-r--r--. 1 root root 548 8月 13 2018 /etc/selinux/config [root@vms002 /]# ls -l /etc/sysconfig/selinux #軟連接 lrwxrwxrwx. 1 root root 17 8月 13 2018 /etc/sysconfig/selinux -> ../selinux/config
3、SELinux安全上下文標籤
一、上下文件標籤簡介
Linux中的文件、進程、端口都有安全上下文標籤,當運行selinux後全部的安全上下文標籤都是訪問控制的依據。
二、上下文標籤的相關命令
命令 | 含義 |
ls -Z | 查看文件的上下文 |
ps -Z | 查看進程的上下文 |
chcon | 更改文件selinux安全上下文 |
restorecon | 恢復文件默認的selinux安全上下文 |
semanage | selinux策略管理工具 |
三、安全上下文實戰演示
1)查看文件和進程的安全上下文
[root@vms001 /]# ls -lZ /var/www/html/index.html #查看文件的安全上下文 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html [root@vms001 /]# ls -ldZ /var/www/html/ #查看目錄的安全上下文 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ [root@vms001 /]# ps -efZ | grep httpd #查看httpd進程的上下文 system_u:system_r:httpd_t:s0 root 49796 1 0 10:40 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 apache 49797 49796 0 10:40 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 apache 49798 49796 0 10:40 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 apache 49799 49796 0 10:40 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 apache 49800 49796 0 10:40 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND system_u:system_r:httpd_t:s0 apache 49801 49796 0 10:40 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 54695 4104 0 15:01 pts/1 00:00:00 grep --color=auto httpd
2)chcon命令修改文件的安全上下文
用法:chcon [選項] [-u selinux用戶] [-r 角色] [-l 範圍] [-t 類型] 文件
經常使用選項:
--reference=參考文件 文件
-r 修改角色屬性
-l 修改範圍屬性
-t 修改類型屬性
-R 遞歸
[root@vms001 /]# ls -ldZ /data/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /data/ [root@vms001 /]# chcon -R -t httpd_sys_content_t /data/ [root@vms001 /]# ls -ldZ /data/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /data/
提示:當咱們用chcon命令修改安全上下文時,只是臨時生效,重置selinux安全標籤或使用restorecon命令恢復文件默認的安全上下文後,chcon命令修改的安全上下文就會失效。以下代碼所示:
[root@vms001 /]# ls -ldZ /data/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /data/ [root@vms001 /]# restorecon -R /data/ [root@vms001 /]# ls -ldZ /data/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /data/
3)semanage命令
經常使用選項:
fcontext 管理文件上下文映射定義
port 管理網絡端口類型定義
-a 添加預設安全上下文
-d 刪除指定的預設安全上下文
-l 查看預設安全上下文
-t 修改類型屬性
示例:
① 查看selinux策略默認的預設安全上下文信息
[root@vms001 /]# semanage fcontext -l
② 修改策略,添加一條新的預設安全上下文信息,恢復文件的默認安全上下文
[root@vms001 /]# ls -ldZ /oldboy/ #查看安全上下文 drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /oldboy/ [root@vms001 /]# semanage fcontext -a -t httpd_sys_content_t /oldboy #修改默認的安全上下文 [root@vms001 /]# ls -ldZ /oldboy/ #查看安全上下文 drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /oldboy/ [root@vms001 /]# restorecon -R /oldboy/ #恢復默認的安全上下文 [root@vms001 /]# ls -ldZ /oldboy/ #查看安全上下文 drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /oldboy/
③ 利用正則表達式 遞歸設置目錄的預設安全上下文
[root@vms001 /]# mkdir /www [root@vms001 /]# touch /www/file-{01..03} [root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /www/ [root@vms001 /]# ls -lZ /www/ -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-01 -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-02 -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-03 [root@vms001 /]# [root@vms001 /]# semanage fcontext -a -t httpd_sys_content_t "/www(/.*)?" [root@vms001 /]# [root@vms001 /]# restorecon -R /www/ [root@vms001 /]# [root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /www/ [root@vms001 /]# ls -lZ /www/ -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file-01 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file-02 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 file-03
④ 刪除預設安全上下文
[root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /www/ [root@vms001 /]# [root@vms001 /]# restorecon -R /www/ [root@vms001 /]# [root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /www/ [root@vms001 /]# [root@vms001 /]# semanage fcontext -d "/www(/.*)?" [root@vms001 /]# [root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /www/ [root@vms001 /]# [root@vms001 /]# restorecon -R /www/ [root@vms001 /]# [root@vms001 /]# ls -ldZ /www/ drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /www/ [root@vms001 /]# ls -lZ /www/ -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-01 -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-02 -rw-r--r--. root root unconfined_u:object_r:default_t:s0 file-03
4、SELinux布爾值
一、selinux布爾值簡介
selinux布爾值咱們能夠理解爲是一個開關,當selinux開啓時,布爾值功能也同時開啓,而且大部分默認的布爾值都是關閉的。須要實現一個功能時,同時也須要開啓對應的布爾值,若是對應的布爾值沒有開啓,那麼這個功能也沒法實現。selinux布爾值至關因而在服務上多加了一個開關,服務自己以及布爾值這兩個開關同時開啓,這個服務纔是真正的開啓。
二、selinux布爾值相關命令
命令 | 含義 |
getsebool | 獲取selinux布爾值 |
setsebool | 設置selinux布爾值 |
三、示例
咱們用ftp作示例。
1)查看ftp的selinux布爾值(getsebool)
[root@vms002 /]# getsebool -a | grep ftp ftp_home_dir --> off ftpd_anon_write --> off ftpd_connect_all_unreserved --> off ftpd_connect_db --> off ftpd_full_access --> off ftpd_use_cifs --> off ftpd_use_fusefs --> off ftpd_use_nfs --> off ftpd_use_passive_mode --> off httpd_can_connect_ftp --> off httpd_enable_ftp_server --> off sftpd_anon_write --> off sftpd_enable_homedirs --> off sftpd_full_access --> off sftpd_write_ssh_home --> off tftp_anon_write --> off tftp_home_dir --> off
2)設置ftp的selinux布爾值,容許匿名用戶能夠上傳文件或目錄。(setsebool)代碼以下:
[root@vms002 /]# setsebool -P ftpd_anon_write on #-P永久生效,同時寫入到配置文件中。 [root@vms002 /]# [root@vms002 /]# getsebool -a | grep "ftpd_anon_write" ftpd_anon_write --> on sftpd_anon_write --> off
提示:on 或 1 爲開啓狀態;off 或 0 爲關閉狀態。-P(大寫)爲永久生效。
五、排錯
當咱們沒法訪問或沒法寫入時,能夠從如下三個方面進行排錯:
一、服務的配置文件是否開啓了權限;
二、Linux系統文件是否有權限;
三、selinux的上下文以及布爾值是否開啓了對應的功能。
6、總結
一、selinux三種模式:
1)enforcing:強制開啓訪問控制;
2)permissive:容許,警告模式;
3)disabled:強制關閉selinux功能。
二、selinux安全上下文標籤:
1)ls -Z:查看文件的安全上下文;
2)ls -ldZ:查看目錄的安全上下文;
3)ps -Z:查看進程的安全上下文;
4)chcon:修改文件或目錄的安全上下文:(臨時生效,重置selinux或恢復默認安全上下文後失效)
--reference=參考文件 文件
-t 修改類型屬性
-R 遞歸
5)restorecon:恢復文件或目錄的默認安全上下文
-R 遞歸恢復目錄的安全上下文
6)semanage:selinux策略管理工具:
fcontext 管理文件的安全上下文映射定義
port 管理網絡端口類型定義
-a 添加預設安全上下文
-d 刪除預設安全上下文
-t 修改類型屬性
-l 顯示預設安全上下文
三、selinux布爾值:
1)getsebool -a:查看布爾值
2)setsebool:修改布爾值
-P 永久生效,同時寫入到配置文件中
3)on 或 1 爲開啓
4)off 或 0 爲關閉