Linux系统SELinux功能介绍

Linux SELinux

SELinux(Security-Enhanced Linux)是一个基于强制访问控制(Mandatory Access Control,MAC)的Linux内核安全模块。它最初由美国国家安全局(NSA)开发,并被集成到主流Linux发行版中,用于加强系统的完全。

一、SELinux的基本概念

  1. SELinux的工作模式

SELinux有三种主要的运行模式:

Enforcing(强制模式):启用SELinux策略,拒绝不符合策略的操作并记录日志。
Permissive(宽容模式):仅记录不符合SELinux策略的操作,不进行阻止。
Disabled(关闭模式):完全关闭SELinux。
# 查看SELinux当前状态sestatus
# 临时修改SELinux模式setenforce 0  # 切换到Permissive模式setenforce 1  # 切换到Enforcing模式
# 永久修改SELinux模式vim /etc/selinux/configSELINUX=enforcing  # 修改为 enforcing、permissive 或 disabled
SELinux的核心概念
安全上下文(Security Context):每个文件、进程或端口都关联一个安全上下文,由user:role:type组成。例如:
system_u:object_r:httpd_sys_content_t:s0
类型(Type):是SELinux最核心的概念,用于指定资源的访问权限。
策略(Policy):定义允许或拒绝哪些操作的规则集。

二、SELinux的基本操作与配置

查看文件和进程的安全上下文
# 查看文件的安全上下文ls -Z /var/www/html
# 查看进程的安全上下文ps -eZ | grep httpd
改变文件的安全上下文
# 改变文件类型chcon -t httpd_sys_content_t /var/www/html/index.html
# 批量修改目录的安全上下文chcon -R -t httpd_sys_content_t /var/www/html/
# 恢复默认的安全上下文restorecon -v /var/www/html/index.html
修改SELinux布尔值

SELinux布尔值(Booleans)用于动态调整SELinux的策略,例如允许或禁止某些操作。

# 列出所有SELinux布尔值getsebool -a
# 修改布尔值(临时)setsebool httpd_enable_homedirs on
# 修改布尔值(永久)setsebool -P httpd_enable_homedirs on
设置策略模块

策略模块(Policy Module)是SELinux策略的可加载单元。可以创建自定义模块以适应特定需求。

# 创建策略模块audit2allow -a -M mycustompolicy
# 加载策略模块semodule -i mycustompolicy.pp
shell语句mysql -uroot -pwan -h127.0.0.1 ccrm <<EOFload data local infile 'sys.del' into table sys.del fields terminated by '|-@|' escaped by '^';show warnings;EOF将show warnings的结果赋值给变量errors


#!/bin/bash
# 使用MySQL命令执行并捕获SHOW WARNINGS的结果errors=$(mysql -uroot -pwan -h127.0.0.1 ccrm <<EOFLOAD DATA LOCAL INFILE 'sys.del' INTO TABLE sys.del FIELDS TERMINATED BY '|-@|' ESCAPED BY '^';SHOW WARNINGS;EOF)
# 打印SHOW WARNINGS的结果echo "Errors or Warnings:"echo "$errors"
shell 将ABC dafefeafse feasf fesaefeasf fea fse 换行符去除

三、SELinux的高级用法

  1. 调试SELinux问题

当某些服务因SELinux限制而无法运行时,通常需要分析日志并调整策略。

# 查看SELinux日志cat /var/log/audit/audit.log | grep AVC
# 使用audit2allow生成策略建议cat /var/log/audit/audit.log | grep AVC | audit2allow -M mypolicysemodule -i mypolicy.pp
自定义SELinux策略

以下是创建自定义SELinux策略的步骤:

(1)定义类型和规则

创建一个策略文件myapp.te:

module myapp 1.0;
require {	type httpd_t;	type var_t;	class file { read write getattr };}
# 允许httpd_t类型的进程访问var_t类型的文件allow httpd_t var_t:file { read write getattr };

(2)编译并加载策略

# 编译策略模块checkmodule -M -m -o myapp.mod myapp.te
# 生成策略包semodule_package -o myapp.pp -m myapp.mod
# 加载策略模块semodule -i myapp.pp

(3)验证新策略

测试服务功能,确认是否正常工作。

四、SELinux与实际场景结合

场景1:Apache Web服务的SELinux配置

问题:Apache无法访问/var/www/custom目录。
解决方案
  1. 确保目录权限正确。
  2. 修改目录安全上下文。
chcon -R -t httpd_sys_content_t /var/www/custom
  1. 检查是否需要启用特定布尔值:
setsebool -P httpd_can_network_connect on

场景2:FTP服务器的SELinux配置

问题:FTP用户无法上传文件。
解决方案
  1. 确认SELinux限制:
audit2allow -w -a
  1. 启用上传相关布尔值:
setsebool -P allow_ftpd_full_access on

五、SELinux的优势与不足

优势

  1. 细粒度控制:SELinux基于类型的强制访问控制可有效限制进程的权限范围。
  2. 动态调整:通过布尔值动态修改策略,无需重新启动服务。
  3. 增强系统安全:有效防止权限提升、目录遍历等攻击。

不足

  1. 复杂性:配置和调试SELinux需要较高的学习成本。
  2. 兼容性问题:某些第三方软件可能与SELinux策略冲突。
  3. 性能问题:在某些高性能环境下,SELinux可能增加系统开销。

六、总结

SELinux是Linux系统中的重要安全机制,能够有效保护系统免受许多类型的攻击。然而,合理配置SELinux需要深入理解其核心概念、策略语言和调试工具。通过掌握上述知识点,结合实际场景中的配置案例,可以更好地在生产环境中使用SELinux,实现安全与性能的平衡。

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2024/12/25/linux%e7%b3%bb%e7%bb%9fselinux%e5%8a%9f%e8%83%bd%e4%bb%8b%e7%bb%8d/

(0)
AIRFAIRF
上一篇 2024年12月16日
下一篇 2024年12月25日

相关推荐

  • Linux Shell巡检脚本

    系统一键巡检脚本: #!/bin/bash # -*- coding:utf-8 -*- echo -e “\033[31m >>>>>>&gt…

    2023年6月2日
  • Linux Python巡检脚本

    # -*- coding: utf-8 -*- “”” linux 自动化脚本 # @Time: 2022/11/4 10:20 # @Author: lln # @File: l…

    2023年6月2日
  • Linux中最常用的10个环境变量

    Linux操作系统提供了丰富的环境变量,用于配置和控制系统的行为。本文将介绍Linux中最常用的10个环境变量,并提供示例代码、输出和解析。 1. PATH PATH环境变量定义了…

    C_C++_C# 2024年1月24日
  • 宝塔面板搭配雷池WAF防火墙实战

    背景 因近期总是受到CC攻击,所以就找到了这款免费WAF 雷池是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步…

    Linux 2023年8月29日
  • nf_conntrack模块导致服务器Drop Packet

    前言 系统日志中发现 nf_conntracck: table full,dropping packet信息(服务器为GP数据库)这说明系统接到了大量的连接请求,但是系统的连接跟踪…

    Linux 2023年6月19日
  • LVM 缩减 / 根目录导致的开机错误

    前景描述 给服务器lv_var扩容,没空间扩容,于是将lv_root由200G缩小至100G,几分钟后,服务器告警,ping状态变为停止,于是登陆服务器管理口远程查看 报错过程 发…

    Linux 2022年9月25日
  • Windows 2012r2激活密钥(亲测)

    windows server 2012是服务器系统,和客户端系统一样,需要使用激活码永久激活windows2012r2。server2012激活密钥有两种,分别是永久激活和kms期…

    Windows 2023年5月10日
  • 【Linux通用】Centos系列跳过首次登陆新建用户

    前言 在安装系统后,登录的时候总是让新建一个普通用户,很是烦人,于是想办法解决一下   方法一 在CentOS上,图形化登录(如GNOME)通常要求您创建一个用户来登录。…

    2023年6月21日
  • Iptables怎么防止常见网络攻击

    什么是syn,ddos,ping SYN (Synchronize): 在 TCP(传输控制协议)中,SYN 是握手过程的一部分。当客户端尝试与服务器建立连接时,它发送一个带有 S…

    C_C++_C# 2023年12月16日
  • [Linux] 磁盘挂载出错导致开机进入emergency mode

    前景描述 应用系统管理员反应服务器无法正常SSH连接 报错过程 登陆远程kvm进行排查,查看到新建了vg_shuziren及lv–shuziren,判断为扩容lvm文件…

    Linux 2022年9月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注