SELinux
创始人
2024-03-26 17:24:12
0

文章目录

  • SELinux说明
  • SELinux 的运行模式
  • SElinux命令

SELinux 是 Security-Enhanced Linux 缩写,安全强化的linux
系统资源都是通过程序进行访问的,如果将/var/www/html权限设置为777,代表所有程序均可以对该目录访问,如果已启动www服务软件,那么该软件触发的进程将可以写入该目录,而该进程是对整个internet提供服务的。
为了控制这方面的权限与进程问题,出现SELinux

SELinux说明

对程序、文件灯权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也是能够控制网络服务能否访问系统资源的一道关卡。

1、传统的文件权限与账号的关系:

自主访问控制,DAC(Discretionary Access Control)----针对用户权限

当某个进程想要对文件进行访问时,系统就会根据该进程的所有者/用户组,并比较文件的权限,若通过权限检查,就可以访问该文件了。各种权限设置对root用户无效

2、以策略规则指定特定程序读取特定文件

强制访问控制,MAC(Mandatory Access Control)----针对程序进程的权限

MAC可以针对特定的进程与特定的文件资源来进行权限的控制

即使用root权限,使用不同进程,取得的权限并不一定是root,而要看当时该进程的设置

这个进程也不能任意使用系统资源,因为每个文件资源也有针对进程设置可取用的权限

SELinux 的运行模式

通过MAC的方式控制管理进程,控制的主体是进程,而目标则是该进程能否读取的文件资源

主体subject : 进程

==目标 object : == 被主体访问的资源,可以是文件、目录、端口

==策略 policy : ==由于进程与文件数量庞大,SELinux会依据某些服务 来指定基本的访问安全策略。

这些策略还有详细规则(rule)来指定不同服务开放某些资源的访问与否

  • targeted : 针对网络服务限制多,针对本机限制少,是默认的策略
  • strict : 完整的SELinux限制, 限制方面严格

安全上下文(security context)

主体能否访问目标除了策略指定外,主体与目标的安全上下文必须相互匹配才能顺利访问

最终文件的成功访问还是与文件系统的rwx权限设置有关

查看安全上下文
在这里插入图片描述

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

  • 身份标识 (Identify):相当于账号方面的身份标识,主要有以下三种常见的类型
root            表示root的账号身份;
system_u        表示程序方面的标识,通常就是进程;
unconfined_u    代表的是一般用户账号相关的身份
  • 角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:
object_r:代表的是文件或目录等文件资源
system_r: 代表的进程
  • 类型(type):在默认的targeted 策略中, Identify 与 role字段基本上是不重要的,重要的在于这个类型字段。
type: 在文本资源上称为类型
domain:在主体程序中则成为域domain 需要与type搭配,则该程序才能够顺利读取文件资源

在这里插入图片描述

  • MLS和MCS相关,代表灵敏度,一般用s0 s1 s2命名,数字代表灵敏度的分级。数值越大、灵敏度越高
    在这里插入图片描述例如:http服务已经给程序和文件设置了安全上下文
    在这里插入图片描述

/usr/sbin/httpd:type ——> httpd_exec_t
/var/www/html ——> httpd_sys_content_t

以上两个文件的角色字段都是object_r ,代表都是文件

/usr/sbin/httpd属于httpd_exec_t类型,代表它是一个可执行的文件
/var/www/html则属于httpd_sys_content_t类型

访问过程
(1)首先,触发具有httpd_exec_t这个类型的/usr/sbin/httpd这个可执行文件

(2)该文件的类型会让这个文件所造成的主体进程具有httpd这个域,我们的策略已经针对这个域指定了许多规则,其中包括这个域可以读取的目标资源类型

(3)由于httpd_domain被设置为可读取httpd_syscontent_t这个类型的目标文件,因此httpd进程就能够读取在/var/www/html目录下面的文件了

(4)最终能否读到/var/www/html目录下面的数据,还要看rwx是否符合linux权限的规范

进程安全上下文
在这里插入图片描述http进程——>system_u:system_r:httpd_t

system_r 代表进程

文件的type字段为httpd_exec_t ----- 执行之后type字段变成httpd_t

判断httpd进程是否可以访问/var/www/html-----通过httpd进程的type字段和/var/www/html的type字段 是否匹配

httpd_t 和 httpd_sys_content_t是否匹配

目前使用的模式是targeted , 忽略id和role字段,主要看type字段

SElinux命令

1、SELinux状态

在这里插入图片描述2、查看selinux策略

在这里插入图片描述

改变策略之后需要重新启动如果由enforce或permissive改成disabled , 或由disabled 改为其他两个,也必须要重新启动将selinux模式在enforce和permissive之间切换的方法为:setenforce 0 转换成permissive  宽容模式
setenforce 1 转换成enforcing 强制模式修改完后重启

3、查询安全上下文

getsebool -a  列出目前系统上面的所有布尔值条款

在这里插入图片描述4、SELinux的启动、关闭与查看

三种模式:

  • enforcing: 强制模式,代表SELinux正在运行中,开始限制domain/type
  • permissive: 宽容模式,代表SELinux正在运行中,不过仅会有告警信息并不会实际限制domain / type的访问
  • disabled : 关闭,SELinux并没有实际运行
查看目前的模式getenforce查看目前的selinux使用策略sestatus配置目前Selinux策略
vim /etc/selinux/config

在这里插入图片描述5、还原默认的安全上下文

系统默认的目录都有特殊的selinux安全上下文,/var/www/html原本就是httpd可以读取的目录。所以如果修改错误可以使用restorecon还原默认的安全上下文

restorecon -Rv 文件或目录-R  连通子目录一起修改-v  将过程显示到屏幕上

restorecon 怎么知道每个目录记载的默认selinux type类型呢?

因为系统将每个目录的默认selinux type类型记录在/etc/selinux/target/contexts/目录内

但是该目录内有很多不同的数据,所以可以用semanage这个命令的而功能来查询与修改

6、查询和修改安全上下文

semanage  man semanage-portsemanage port -a -t http_port_t -p tcp 81
允许apache服务可以通过tcp port 81访问-t SELinux type for the object (目标的类型)

在这里插入图片描述
例:如果现在是通过安全上下文实现8089端口去访问httpd这个服务

最开始的配置
在这里插入图片描述
关闭SElinux , 看到是自定义的页面

在这里插入图片描述
开启SElinux , 只能看到测试页面
在这里插入图片描述修改vhost文件

在这里插入图片描述启动时存在问题

在这里插入图片描述
执行journalctl -xe查看报错信息

SELinux is preventing httpd from name_bind access on the tcp_socket port 8089.

SELinux阻止了通过tcp的8089端口访问httpd
在这里插入图片描述
但是这里报错信息也告诉了应该怎么做

If you want to allow httpd to bind to network port 8089
Then you need to modify the port type.
在这里插入图片描述
semanage port -a -t PORT_TYPE -p tcp 8089

这里的PORT_TYPE也给出了相关可选类型

在这里插入图片描述
所以可以这样修改

[root@localhost www]# semanage port -a -t http_port_t -p tcp 8089

没有报错,且SElinux状态是开启的
在这里插入图片描述

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...