当前位置: 首页 > article >正文

SELinux 安全加固

SELinux基本操作

  1. 临时关闭:setenforce 0
  2. 永久关闭: # cat /etc/sysconfig/selinux SELINUX=disabled,因为这个是改的配置文件,是需要重启服务器才能生效的。

在里面还有一个 permissive 模式,当设置为 permissive 时,其效果和临时关闭是一样的,没关闭但是不生效。

  1. 查看当前SELinux的状态: getenforce

SELinux是什么,引入原因

在没有引入SELinux之前,我们对于文件的控制是通过权限来做的。

举个例子:

假设现在在服务器上配置了一台apache服务,然后apache会将服务器上的某个文件夹(/var/www/http)对外发布出去,提供web服务,用户就可以通过网页来访问这个服务。但是某一天,一个黑客把这个apache服务攻克了,拿到了shell权限,那么这个黑客就可以访问这个shell的权限下的所有文件。

但是在引入SELinux之后,事情就不一样了。

SELinux会将服务与文件进行绑定,apache服务共享调用的是(/var/www/http)这个文件夹,那么SELinux会将这两者绑定起来。之后哪怕黑客将apache攻克了,拿到了shell权限,他能访问的也只有(/var/www/http)这个文件夹。

没有引入SELinux示意图:

引入SELinux示意图:

SELinux配置为permissive模式:

SELinux是如何保护文件的

现在假设工作的保护等级是在targeted,在这个等级里,会有很多的规则。这些规则就定义了哪些文件是什么标签,这个标签就决定了哪些进程可以访问这些文件。

现在做个测试:

先看看home目录下的文件:

使用ll -Z,就会显示SELinux的一些标签信息了:

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

随便拿出一条,对SE Linux标签进行分解。

  • system_u:
    • 作用:表示用户身份(User)
    • 意义:system_u 是系统进程或文件的默认用户身份,通常用于系统相关的文件或进程。它表示该文件或进程属于系统用户。
  • object_r:
    • 作用:表示角色(Role)
    • 意义:object_r 是文件或目录的默认角色,表示该对象是一个普通的文件或目录,而不是进程或其他类型的对象。
  • admin_home_t:(我们主要看的就是这部分
    • 作用:表示类型或域(Type/Domain)
    • 意义:admin_home_t 是 SELinux 类型或域的标识符,用于定义文件或进程的安全上下文。admin_home_t 通常与管理员的主目录或配置文件相关联,表示这些文件或目录属于管理员的主目录类型。
  • s0:
    • 作用:表示安全级别(Security Level)
    • 意义:s0 是 MLS(Multi-Level Security)或 MCS(Multi-Category Security)的一部分,表示文件或进程的安全级别。s0 是最低的安全级别,通常用于不需要多级安全控制的系统。

admin_home_t这块的内容,称为上下文(context),一个文件能被哪些用户和进程访问都是这个标签决定的。就如示例中的admin_home_t,表示这个文件是管理员家目录访问。

那这个标签如何修改呢?

  1. 使用命令chcon:立马修改标签,但是规则库不改,重启之后就不生效了(这个看系统版本,有的系统依旧还会生效)。
  2. 使用命令semanage:可以修改规则库,重启之后也会生效。

实践案例:

先安装一个http服务:

然后启动http服务:

如果查询发现SE Linux的标签是?,可能是SELinux 未启用,到配置文件里面去启用然后重启即可。

现在就有了,然后可以看到所属进程是httpd_sys_content_t;

然后在/var/www/html/创建一个文件:

因为要去访问这个http服务,在这之前需要关闭防火墙:

访问HTTP服务,是能正常访问的:

现在,我在root目录下新建一个文件,查看SE Linux标签,是admin的:

然后把这个文件移动到/var/www/html/,替换之前的文件

注:这里可能会出现一个问题,这个视系统而定,有的Linux系统当你将文件转移的时候,它会自动更新文件的SE Linux标签。这里就出现了这个问题。

更换个系统,和之前一样的步骤,会发现,这次文件的SE Linux标签为admin的:

然后再次进行访问,发现无法访问

这个就是SE Linux阻止的。

将SE Linux临时关闭一下,然后再访问,就能成功访问到:

修改SE Linux上下文标签

当前的文件标签依旧还是admin:

临时修改标签命令:chcon -t httpd_sys_content_t /var/www/html/index.html

在未修改之前,是无法访问的

修改之后,正常访问:

SELinux布尔变量

有没有觉得改这些标签很麻烦呢?

Redhat考虑到了这个问题,所以准备了一些布尔变量,相当于一些开关,你只需要打开相应的开关,相当于应用规则,把开关关闭,规则就不放行了。(只针对Redhat系统)

使用命令:getsebool -a ,可以列出所有的布尔变量

就拿tftp_home_dir --> off举例,这个是决定是否把用户的home目录共享出去,如果设置on,那就是允许这样操作,反之就是不允许。

修改布尔值,使用命令:setsebool tftp_home_dir=1,现在就是on了

这种方法只是临时生效,如果要永久生效,在命令中加一个-P。

例子:setsebool -P tftp_home_dir=1

在实际工作中,这个布尔实用价值不高,一般不怎么用。

SELinux故障处理杀手锏

如果遇到了故障,有一种推荐的解决问题的方法,使用命令sealert -a /var/log/audit/audit.log

/var/log/audit/audit.log是SE Linux的日志存储文件,这个命令是分析SE的日志,然后返回问题的。

在使用这个命令的时候,需要先安装:sudo yum install setroubleshoot,然后才能使用。

使用命令之后,会有所有的问题,然后会给出对应的解决办法,这个能够解决大部分问题,但是有些问题还是需要人去分析解决。


http://www.kler.cn/a/570562.html

相关文章:

  • 【鸿蒙Next】鸿蒙与flutter使用自定义iconfont的ttf字体库对比总结
  • 基于GTID的主从复制
  • 静态时序分析:SDC约束命令set_clock_jitter详解
  • 学习笔记-DeepSeek在开源第四天发布DualPipe和EPLB两项技术
  • C#中泛型的协变和逆变
  • 关于常规模式下运行VScode无法正确执行“pwsh”问题
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(10)
  • 【算法刷题】leetcode hot 100 动态规划
  • 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(一)
  • 【JavaScript/JS】事件回调函数this指向不到Vue/Class 实例上下文的变量或者方法的问题
  • 网络安防系统安装与维护专业(710208)物联网基础技术实训室建设方案
  • 蓝桥杯试题:特殊的三角形
  • 基础设施安全(Infrastructure Security)是什么?
  • Golang学习笔记_41——观察者模式
  • Skynet入门(一)
  • 开源ocr
  • 19c startup ORA-00093 ORA-01078 pga_aggregate_limit
  • 千峰React:组件与逻辑封装(下)
  • Leetcode 刷题记录 01 —— 哈希
  • 医院信息科医疗语言大模型开发的风险洞察与避坑策略