第137集:SELinux 配置

教学目标

  • 掌握SELinux策略的管理和配置方法
  • 学会创建和管理自定义SELinux策略
  • 理解和使用SELinux布尔值
  • 掌握安全上下文的高级管理技巧
  • 能够解决SELinux配置中的常见问题

主要知识点

  • SELinux策略管理
  • 自定义SELinux策略创建
  • SELinux布尔值管理
  • 安全上下文高级配置
  • SELinux模块管理
  • SELinux日志分析和故障排除

实用案例分析

案例1:管理SELinux布尔值

场景描述:需要允许Web服务器访问用户主目录中的内容,同时保持系统安全。

配置步骤

  1. 查看当前布尔值状态

    # 查看所有布尔值
    getsebool -a
    
    # 查看与httpd相关的布尔值
    getsebool -a | grep httpd
  2. 修改布尔值

    # 临时修改布尔值(重启后失效)
    setsebool httpd_enable_homedirs on
    
    # 永久修改布尔值
    setsebool -P httpd_enable_homedirs on
  3. 验证修改结果

    getsebool httpd_enable_homedirs

案例2:管理SELinux模块

场景描述:需要安装和管理自定义SELinux模块。

配置步骤

  1. 查看已安装的模块

    semodule -l
  2. 安装新模块

    # 安装模块
    semodule -i mymodule.pp
    
    # 重新加载模块
    semodule -R
  3. 禁用和启用模块

    # 禁用模块
    semodule -d mymodule
    
    # 启用模块
    semodule -e mymodule

案例3:自定义SELinux策略

场景描述:需要为自定义应用程序创建SELinux策略。

配置步骤

  1. 创建策略文件

    # 创建策略文件
    cat > myapp.te << 'EOF'
    policy_module(myapp, 1.0.0)
    
    type myapp_t;
    type myapp_exec_t;
    type myapp_var_lib_t;
    
    domain_type(myapp_t)
    domain_entry_file(myapp_t, myapp_exec_t)
    
    type_transition myapp_t var_lib_t:dir myapp_var_lib_t;
    
    allow myapp_t self:process { fork execmem };
    allow myapp_t myapp_exec_t:file { read execute };
    allow myapp_t myapp_var_lib_t:dir { read write add_name remove_name };
    allow myapp_t myapp_var_lib_t:file { read write create unlink };
    allow myapp_t etc_t:file read;
    allow myapp_t proc_t:file read;
    allow myapp_t sysfs_t:file read;
    EOF
  2. 编译和安装策略

    # 编译策略
    make -f /usr/share/selinux/devel/Makefile myapp.pp
    
    # 安装策略
    semodule -i myapp.pp
  3. 设置安全上下文

    # 设置可执行文件的安全上下文
    chcon -t myapp_exec_t /usr/bin/myapp
    
    # 设置数据目录的安全上下文
    mkdir -p /var/lib/myapp
    semanage fcontext -a -t myapp_var_lib_t "/var/lib/myapp(/.*)?"
    restorecon -R /var/lib/myapp

案例4:SELinux日志分析和故障排除

场景描述:应用程序在SELinux启用时无法正常运行,需要分析和解决问题。

配置步骤

  1. 查看SELinux日志

    # 使用ausearch查看SELinux相关日志
    ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent
    
    # 使用grep查看audit日志
    grep "AVC" /var/log/audit/audit.log
  2. 使用audit2allow工具分析日志

    # 生成允许规则
    audit2allow -a
    
    # 生成策略模块
    audit2allow -a -M myappfix
    
    # 安装生成的策略模块
    semodule -i myappfix.pp
  3. 临时放宽SELinux限制进行测试

    # 临时将SELinux设置为Permissive模式
    setenforce 0
    
    # 测试应用程序
    # ...
    
    # 恢复Enforcing模式
    setenforce 1

课后练习

  1. 练习1:管理SELinux布尔值

    • 查看所有与ftp相关的SELinux布尔值
    • 临时启用ftp_home_dir布尔值
    • 验证修改是否生效
    • 永久启用该布尔值
  2. 练习2:创建自定义SELinux策略

    • 为一个简单的自定义脚本创建SELinux策略
    • 编译和安装该策略
    • 设置正确的安全上下文
    • 测试脚本在SELinux启用时是否正常运行
  3. 练习3:SELinux故障排除

    • 故意创建一个会触发SELinux AVC拒绝的场景
    • 查看和分析SELinux日志
    • 使用audit2allow工具生成修复策略
    • 应用修复策略并验证问题是否解决
  4. 练习4:SELinux模块管理

    • 列出所有已安装的SELinux模块
    • 禁用一个非关键模块
    • 重新启用该模块
    • 验证模块状态

总结

本集详细介绍了SELinux的高级配置方法,包括:

  1. SELinux布尔值管理:通过getsebool和setsebool命令查看和修改布尔值,临时或永久调整SELinux行为。

  2. SELinux模块管理:使用semodule命令安装、卸载、启用和禁用SELinux模块。

  3. 自定义SELinux策略创建:通过编写策略文件、编译和安装,为自定义应用程序创建安全的SELinux策略。

  4. 安全上下文高级配置:使用chcon、semanage fcontext和restorecon命令管理文件和目录的安全上下文。

  5. SELinux故障排除:通过分析audit日志、使用audit2allow工具和临时调整SELinux模式来解决配置问题。

掌握这些SELinux配置技巧,可以在保持系统安全的同时,确保应用程序的正常运行,为Linux系统提供更高级别的安全保障。

« 上一篇 SELinux 基础 下一篇 » AppArmor 基础