SELinux

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 爲關閉

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息