温馨提示×

selinux如何自定义ubuntu规则

小樊
53
2025-09-27 10:20:35
栏目: 智能运维

1. 安装SELinux管理工具
在Ubuntu上自定义SELinux规则前,需先安装必要的工具包。执行以下命令安装selinux-basics(基础SELinux管理工具)、selinux-policy-default(默认策略)及auditd(审计工具,用于收集拒绝日志):

sudo apt update
sudo apt install selinux-basics selinux-policy-default auditd

2. 启用SELinux并设置为Permissive模式
Ubuntu默认可能未启用SELinux,需通过修改配置文件开启。编辑/etc/selinux/config文件,取消SELINUXSELINUXTYPE的注释,并设置为以下值:

SELINUX=permissive  # 先设为permissive模式(仅记录拒绝事件,不阻止操作)
SELINUXTYPE=targeted  # 使用targeted策略(针对特定进程,不影响系统整体)

保存后重启系统使配置生效:

sudo reboot

:Permissive模式是自定义规则的必要步骤,避免因规则错误导致系统无法正常运行。

3. 创建自定义SELinux策略模块
自定义规则需通过.te(类型启用)文件定义。以下以“允许my_script进程访问/var/www/html目录”为例,步骤如下:

  • 创建策略文件目录
    mkdir -p ~/selinux-custom-policy
    cd ~/selinux-custom-policy
    
  • 编写.te文件
    创建my_custom_policy.te文件,内容如下(关键部分说明见注释):
    policy_module(my_custom_policy, 1.0)  # 定义模块名称(my_custom_policy)和版本(1.0)
    
    # 声明类型(若未定义,需手动添加)
    type my_script_t;        # 进程类型(对应my_script的可执行文件)
    type my_script_exec_t;   # 可执行文件类型
    type httpd_sys_rw_content_t;  # 目标目录类型(Apache默认可读写目录)
    
    # 定义进程域(将进程与可执行文件关联)
    init_daemon_domain(my_script_t, my_script_exec_t)
    
    # 允许规则(允许my_script_t进程对httpd_sys_rw_content_t类型的目录进行读写)
    allow my_script_t httpd_sys_rw_content_t:dir { read write };
    
    保存文件后,可通过audit2allow工具从系统拒绝日志快速生成规则(适用于已知拒绝事件的场景):
    grep avc /var/log/audit/audit.log | audit2allow -M my_custom_policy
    
    此命令会生成my_custom_policy.te(类型定义)和my_custom_policy.pp(编译后的策略模块)文件。

4. 编译并加载自定义策略模块
使用checkmodule(编译类型定义)和semodule_package(打包策略模块)工具编译.te文件:

checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
semodule_package -o my_custom_policy.pp -m my_custom_policy.mod

编译完成后,使用semodule命令加载模块:

sudo semodule -i my_custom_policy.pp

加载后,模块会永久保存到SELinux策略中(无需重启系统)。

5. 应用文件上下文并验证规则

  • 设置文件/目录的安全上下文
    使用semanage fcontext命令为自定义目录添加上下文(关联到httpd_sys_rw_content_t类型),确保进程能识别:
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
    
    -a表示添加规则,-t指定类型,(/.*)?表示匹配/var/www/html及其子目录。
  • 应用上下文到文件系统
    使用restorecon命令恢复目录的实际上下文:
    sudo restorecon -Rv /var/www/html
    
    -R表示递归处理,-v显示详细过程。
  • 验证规则是否生效
    查看SELinux拒绝日志,确认无与新规则冲突的拒绝事件:
    sudo ausearch -m avc -ts recent | audit2why
    
    若输出显示“avc: denied”事件消失,则说明规则生效。

注意事项

  • 自定义规则需谨慎编写,错误的规则可能导致系统安全性降低或功能受限(如允许进程访问敏感文件)。
  • 建议在测试环境中验证规则,确认无误后再应用到生产环境。
  • Ubuntu对SELinux的支持不如CentOS/RHEL完善,部分高级功能可能无法使用,若需更全面的SELinux支持,建议选择后者。

0