第六章 SELinux

news/2025/2/12 8:36:41/

目录

1.概述

1.1.概念

1.2.作用:

1.3.SELinux与传统的权限区别

2.SELinux工作原理

2.1.名词解释

2.2文件安全上下文查看

3. SELinux的启动、关闭与查看

3.1.三种配置模式

3.2 原理图:

3.3 模式管理

3.4.selinux的状态

3.5.selinux配置文件

4.修改安全上下文

4.1.chcon命令

示例一:

示例二:

4.2.semanage命令

 常用命令组:

4.3 实验


1.概述

1.1.概念

        SELinux(Security-Enhanced Linux)是美国国家安全局在 Linux 开源社区的帮助下开发的-个强制访问控制(MAC,Mandatory Access Control)的安全子系统,用于各个服务进程都受到约束,使其仅获取到本应获取的资源
        例如,电脑上下载了一个美图软件,当您全神贯注地使用它给照片进行美颜的时候,它却在后台默默监听着浏览器中输入的密码信息,而这显然不应该是它应做的事情

1.2.作用:

        SELinux 域限制: 对服务程序的功能进行限制,以确保服务程序做不了出格的事情。

        SELinux安全上下文: 对文件资源的访问限制,确保文件资源只能被其所属的服务程序访问

1.3.SELinux与传统的权限区别

        传统的文件权限与账号的关系: 属于自主访问控制DAC (Discretionary Access Control),某个进程想要对文件进行访问时,系统就会根据该进程的所有者/用户组,并比较文件的权限,若通过权限检查,就可以访问该文件,注意:各种权限设置对root用户是无效的

        SELinux的以策略规则制定特定程序读取特定文件: 属于强制访问控制DAC(MandatoryAccess Control),可以针对特定的进程与特定的文件资源来进行权限的控制,即使你是root在使用不同的进程时,你所能取得的权限并不一定是root,而得要看当时该进程的设置而定,则就可以针对进程来进行访问控制

2.SELinux工作原理

2.1.名词解释

2.1.1.主体(Subject)

        主体就是想要访问文件或目录资源的进程

        进程得到资源流程:由用户调用命令,由命令产生进程,由进程去访问文件或目录资源

        自主访问控制系统中(Linux 默认权限中),靠权限控制的主体是用户

        强制访问控制系统中 (SELinux 中),靠策略规则控制的主体则是进程

2.1.2.目标(Object)

        目标就是需要访问的文件或目录资源

2.1.3策略 (Policy)

        Linux 系统中进程与文件的数量庞大,限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,那么SELinux 的可用性就会极低,所以SELinux 默认定义了两个策略来制订规则
        2个默认策略

                -targeted: 默认策略,用于限制网络服务 (dhcpd,httpd,named,nscd,ntpd.0portmap,snmpd,squid,以及 syslogd),对本机系统的限制极少

                -mls:多级安全保护策略,该策略限制更为严格.

2.1.4.安全上下文(Security Context)

        所有进程、文件和目录都有自己的安全上下文

        进程是否能够访问文件或目录,就要其安全上下文是否匹配

        例: 找对象时,男人看作主体,女人就是目标,男人是否可以追到女人 (主体是否可以访问目标),主要看两人的性格是否合适(主体和目标的安全上下文是否匹配),但两个人的性格是否合适,是需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断的(安全上下文是否匹配是需要通过策略中的规则来确定的)

关系图: 

解释:

        当主体(进程)访问目标(文件)时,首先和 SELinux 中定义好的策略进行匹配

        若符合定义的规则,且主体的安全上下文和目标的安全上下文匹配则允许访问文件

        若安全上下文比较失败,则拒绝访问,并通过 AVC (Access Vector Cache,访问向量缓存,主要用于记录所有和 SELinux 相关的访问统计信息)生成拒绝访问信息

        注意:最终是否可以访问到目标文件,还要匹配产生进程 (主体)的用户是否对目标文件拥有合理的rwx权限

2.2文件安全上下文查看

2.2.1.命令:

[root@server ~]# ls -Z


 

2.2.2.分析

[root@server ~]# ls -Z        # 查看安全上下文

system_u:object_r:admin_home_t:        s0         anaconda-ks.cfg

身份:        角色 :  类型(安全上下文):灵敏度        文件名           

        安全上下文用冒号分为四个字段

 seinfo 命令:

             作用:查询身份、角色等信息,需要安装才可使用

                 [root@server ~]# yum install setools-console

            格式:         seinfo         -参数

            参数:

                    -u:  列出SELinux中所有的身份 (user)

                    -r:  列出SELinux中所有的角色 (role)     

                    -t:  列出SELinux中所有的类型 (type);

                    -b:  列出所有的布尔值 (也就是策略中的具体规则名称)

                    -x:  显示更多的信息:

身份标识 (Identify) : 相当于账号方面的身份标识,有三种类型:

       system_u:系统用户身份,其中”u”代表user

        root: 安全上下文的身份是 root,默认会映射为unconfined_u,可以通过以下命令查看映射关系:                

         [root@server ~]# semanage login -l  (系统自带命令,不是seinof内置命令

         注意: user 字段只用于标识数据或进程被哪个身份所拥有,系统数据的 user 字段是system_u,用户数据 user 字段是 user_u

角色 (role):

                 表示此数据是进程还是文件或目录包含 (了解就行)。

                object_r:代表该数据是文件或目录,r代表 role (角色的意思)

                system_r:进程r代表 role

类型(type):

        seinfo -t        |   more                # 5049个类型

        最重要,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全0下文类型字段相匹配

        在默认的targeted策略中

        类型字段在主体(进程)的安全上下文中被称作域 (domain)

        类型字段在目标 (文件或目录)的安全上下文中被称作类型 (type)

        进程的域与文件的类型是否匹配需要查询策略规则

         admin_home_t:安全上下文具体内容(类型),其中还包含这许多函数(该名字只是函数集合的代号) (是否放行就看该字段的内容

灵敏度:

        用s0、s1、s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高。策略灵敏度高管控的对象就多

3. SELinux的启动、关闭与查看

3.1.三种配置模式

enforcing:强制模式,启用SELinux,将拦截服务的不合法请求

permissive: 宽容模式,启用SELinux,遇到服务越权访问时,只发出警告而不强制拦截。

disabled: 关闭模式,SELinux没有运行

3.2 原理图:

3.3 模式管理

查看当前工作模式
        [root@server ~]# getenforce
临时开启selinux/临时关闭selinux
        [root@server ~]# getenforce
       
 Enforcing
        [root@server ~]# setenforce 0         # 临时关闭进入宽容模式
        [root@server ~]# getenforce
      
  Permissive
        [root@server ~]# setenforce 1         # 临时开启
        [root@server ~]# getenforce
       
 Enforcing

永久性关闭,需要修改配置文件

        进入主配置文件[root@server ~]#  vim /etc/selinux/config 

        修改为        SELINUX=disabled

注意:

        enforcing状态与permissive状态之间切换时,不需要重启系统(重启系统后状态会还原)

        enforcing、permissive与disabled之间切换时,必须重启系统才会生效

3.4.selinux的状态

命令:

         [root@server ~]# sestatus

分析:

        [root@server ~]# sestatus
SELinux status:                                           enabled                # 是否启用
SELinuxfs mount:                                       /sys/fs/selinux        # selinux临时文件系统的挂载点
SELinux root directory:                               /etc/selinux          #启动目录,配置文件位置
Loaded policy name:                                  targeted                        # 当前加载的策略类型                                                                                           # 策略类型
                                                                             # targeted: 只保护目标进行,默认
                                                                             # minimum:少数选定进程进行保护
                                                                             # mls:多级安全保护,最高级
Current mode:                                            enforcing                 # 执行的模式,重要
Mode from config file:                                enforcing                 #  配置文件的模式
Policy MLS status:                                     enabled
Policy deny_unknown status:                    allowed
Memory protection checking:                    actual (secure)
Max kernel policy version:                        33

3.5.selinux配置文件

[root@server ~]# vim /etc/selinux/config

SELINUX=enforcing                                # 设置模式

SELINUXTYPE=targeted                        # 设置策略类型

# 注意: /etc/sysconfig/selinux文件与上述配置问价内容相同,选择一个配置即可

4.修改安全上下文

4.1.chcon命令

作用:手动修改目标的上下文策略

格式:

        # 方法1
                chcon         [-R[v] ]        [-t type]         [-u user]         [-r role]        文件名

                参数:                                                                                                                

                -R: 递归修改,当前目录及目录下的所有文件都同时设置

                -v: 显示变动结果
                -t: 后面接安全上下文件的类型字段 (重要)(策略)
                -u: 后面接身份标识
                -r: 后面接角色          
        # 方法2:(直接套用范例文件的策略)
                chcon         -R        --reference=范例文件         文件名

                                                 # --reference     完整参数使用  “--”

示例一:

新建文件test 并查看其使用的SElinux策略,并尝试修改其策略与/etc/hosts使用的策略相同

[root@server ~]# touch test
[root@server ~]# ls -Z test 

unconfined_u:object_r:admin_home_t:s0 test
[root@server ~]# ls -Z /etc/hosts 
system_u:object_r:net_conf_t:s0 /etc/hosts
[root@server ~]# chcon  -v  -t  net_conf_t test 
正在更改 'test' 的安全上下文
[root@server ~]# ls -Z test 

unconfined_u:object_r:net_conf_t:s0 test

示例二:

新建文件temp直接套用/etc/passwd文件的安全上下文策略

[root@server ~]# touch temp
[root@server ~]# ls -Z temp 

unconfined_u:object_r:admin_home_t:s0 temp
[root@server ~]# ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd
[root@server ~]# chcon -v --reference=/etc/passwd   ~/temp 
正在更改 '/root/temp' 的安全上下文
[root@server ~]# ls -Z temp 
system_u:object_r:passwd_file_t:s0 temp

练习:将网页文件/web1的SElinux参数修改为/var/www/html/

                                                        (由于此处为练习模式,因此使用参数分别修改)

[root@server ~]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@server ~]# ls -Zd /web1/
unconfined_u:object_r:default_t:s0 /web1/       # 相同的参数不需要修改,否则会显示无效参数
[root@server ~]# chcon  -v -u system_u /web1/
正在更改 '/web1/' 的安全上下文
[root@server ~]# chcon  -v -t httpd_sys_content_t  /web1/
正在更改 '/web1/' 的安全上下文
[root@server ~]# ls -Zd /web1/
system_u:object_r:httpd_sys_content_t:s0 /web1/

注意:若想修web1内部文件,切记要加-Rv参数

此时重启Apache就会发现即使SElinux是开启状态也可以访问网页

4.2.semanage命令

作用:

        用于管理 SELinux的策略,查询/修改/增加/删除文件的默认SELinux安全上下文管理网络端口消息接口等
格式1:
                semanage          选项                参数                文件

选项: login | user | port | interface| fcontext | translation | boolean

               注意: fcontext查询默认安全上下文(重要)

参数:
        -l :查询;        -a :添加        -m :修改        -d :删除        -D :全部删除

        -t :类型        -r :角色-        s :用户        -f :文件

文件:设置对象文件或目录

 常用命令组:

查询默认安全上下文

#格式
semanage fcontext -1 |  grep    文件名

例子:[root@server ~]# semanage fcontext -l | grep /etc/passwd

查看允许访问的端口
#格式

 semanage  port  -1 |  grep  协议                

例子: 

4.3 实验

使用htpd服务的端口演示selinux的设定

第一步  准备工作:检查index.html文件的SElinux权限,若不符合放行标准则,修改其策略。

[root@server ~]# ls -Zd /web1/
system_u:object_r:httpd_sys_content_t:s0 /web1/
[root@server ~]# ls -Z /web1/

unconfined_u:object_r:default_t:s0 index.html                                               

[root@server ~]# chcon -Rv --reference=/web1 /web1/index.html   

                                                                    # 直接套用符合规则的文件的策略

[root@server ~]# ls -Z /web1/
system_u:object_r:httpd_sys_content_t:s0 index.html

第二步:进入主配置文件定位47行,对端口经行修改,修改为7777。

[root@server ~]# vim /etc/httpd/conf/httpd.conf 

第三步:重启APache

[root@server ~]# systemctl start httpd

[root@server ~]# systemctl status httpd.service           # 提示权限不够
        

解决错误问题

        第一步:查看此时放行的端口。(发现并无7777端口)

        第二步:通过 semanage 的 -a参数添加http协议的放行端口

[root@server ~]# semanage port -a -t http_port_t -p tcp 7777
                -a :添加 

                 -t: 给出SElinux安全上下文的类型    

                -p: 指明端口号(和协议不可分离)   

此时重启APache服务就不会产生报错了


http://www.ppmy.cn/news/1233834.html

相关文章

【Windows 常用工具系列 11 -- 福昕PDF搜索高亮过的文本】

文章目录 福昕 PDF 搜索高亮过的文本 福昕 PDF 搜索高亮过的文本 在 pdf 文档阅读过程中,我们需要经常高亮一些文本,以方便下次阅读时找到重点。我这边使用的是 福昕PDF 阅读器,下面就介绍下如何在福昕阅读器中搜索已经高亮过的文本。

【CSH 入门基础 11 -- csh 判断命令是否执行成功】

文章目录 CSH 命令执行情况判断BASH 命令执行情况判断CSH 命令执行情况判断 在 csh 或 tcsh 脚本中,可以使用 $status 变量来检查上一个命令的退出状态。如果 $status 的值为零 (0),这表示上一个命令执行成功。任何非零值表示命令执行失败。 以下是一个 csh 脚本的示例,它执…

指针学习(五)

一.函数指针数组 定义:函数指针放进数组中,就叫函数指针数组,准确的说,将一个函数的地址存到⼀个数组中 那这个数组就叫函数指针数组。 int (*pi[5])(int); 解读:pi先和[]结合,因此是数组,加i…

错题集(c语言)

一、 #include <stdio.h> int main() {int x, y;for (x 30, y 0; x > 10, y<10; x--, y)x / 2, y 2;printf("x%d,y%d\n", x, y);return 0; }思路&#xff1a; 第一次循环开始前&#xff1a;x30&#xff0c;y0&#xff0c;结束&#xff1a;x15&#…

Bellman-Ford算法

初步了解 Bellman-Ford算法是一种用于寻找带有负权边的图中的单源最短路径的算法。它可以处理一般的图&#xff0c;包括存在负权边和负权环的情况。 以下是Bellman-Ford算法的基本思想和步骤&#xff1a; 初始化&#xff1a;将源节点的距离设置为0&#xff0c;将所有其他节点…

Linux:安装MySQL服务(非docker方式)

1、下载安装包 下载MySQL安装包&#xff0c;需要Oracle官网的账号 下面是网友提供的账号及密码&#xff0c;亲测有效。 账户&#xff1a;3028064308qq.com 我用的这个&#xff0c;可以登陆 密码&#xff1a;OraclePassword123!Oracle Account: 602205528qq.com Oracle Pass…

Redis+整合SpringDataRedis

Nosql和缓存的背景 数据库架构设计的发展史 第一阶段&#xff1a;单库&#xff1a;随着访问量的增加出现了性能问题 第二阶段&#xff1a;缓存&#xff1a;通过缓存&#xff0c;缓解数据库的压力&#xff0c;优化数据结构和索引 第三阶段&#xff1a;读写分离&#xff1a;数据…