第137集:SELinux 配置
教学目标
- 掌握SELinux策略的管理和配置方法
- 学会创建和管理自定义SELinux策略
- 理解和使用SELinux布尔值
- 掌握安全上下文的高级管理技巧
- 能够解决SELinux配置中的常见问题
主要知识点
- SELinux策略管理
- 自定义SELinux策略创建
- SELinux布尔值管理
- 安全上下文高级配置
- SELinux模块管理
- SELinux日志分析和故障排除
实用案例分析
案例1:管理SELinux布尔值
场景描述:需要允许Web服务器访问用户主目录中的内容,同时保持系统安全。
配置步骤:
查看当前布尔值状态:
# 查看所有布尔值 getsebool -a # 查看与httpd相关的布尔值 getsebool -a | grep httpd修改布尔值:
# 临时修改布尔值(重启后失效) setsebool httpd_enable_homedirs on # 永久修改布尔值 setsebool -P httpd_enable_homedirs on验证修改结果:
getsebool httpd_enable_homedirs
案例2:管理SELinux模块
场景描述:需要安装和管理自定义SELinux模块。
配置步骤:
查看已安装的模块:
semodule -l安装新模块:
# 安装模块 semodule -i mymodule.pp # 重新加载模块 semodule -R禁用和启用模块:
# 禁用模块 semodule -d mymodule # 启用模块 semodule -e mymodule
案例3:自定义SELinux策略
场景描述:需要为自定义应用程序创建SELinux策略。
配置步骤:
创建策略文件:
# 创建策略文件 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编译和安装策略:
# 编译策略 make -f /usr/share/selinux/devel/Makefile myapp.pp # 安装策略 semodule -i myapp.pp设置安全上下文:
# 设置可执行文件的安全上下文 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启用时无法正常运行,需要分析和解决问题。
配置步骤:
查看SELinux日志:
# 使用ausearch查看SELinux相关日志 ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent # 使用grep查看audit日志 grep "AVC" /var/log/audit/audit.log使用audit2allow工具分析日志:
# 生成允许规则 audit2allow -a # 生成策略模块 audit2allow -a -M myappfix # 安装生成的策略模块 semodule -i myappfix.pp临时放宽SELinux限制进行测试:
# 临时将SELinux设置为Permissive模式 setenforce 0 # 测试应用程序 # ... # 恢复Enforcing模式 setenforce 1
课后练习
练习1:管理SELinux布尔值
- 查看所有与ftp相关的SELinux布尔值
- 临时启用ftp_home_dir布尔值
- 验证修改是否生效
- 永久启用该布尔值
练习2:创建自定义SELinux策略
- 为一个简单的自定义脚本创建SELinux策略
- 编译和安装该策略
- 设置正确的安全上下文
- 测试脚本在SELinux启用时是否正常运行
练习3:SELinux故障排除
- 故意创建一个会触发SELinux AVC拒绝的场景
- 查看和分析SELinux日志
- 使用audit2allow工具生成修复策略
- 应用修复策略并验证问题是否解决
练习4:SELinux模块管理
- 列出所有已安装的SELinux模块
- 禁用一个非关键模块
- 重新启用该模块
- 验证模块状态
总结
本集详细介绍了SELinux的高级配置方法,包括:
SELinux布尔值管理:通过getsebool和setsebool命令查看和修改布尔值,临时或永久调整SELinux行为。
SELinux模块管理:使用semodule命令安装、卸载、启用和禁用SELinux模块。
自定义SELinux策略创建:通过编写策略文件、编译和安装,为自定义应用程序创建安全的SELinux策略。
安全上下文高级配置:使用chcon、semanage fcontext和restorecon命令管理文件和目录的安全上下文。
SELinux故障排除:通过分析audit日志、使用audit2allow工具和临时调整SELinux模式来解决配置问题。
掌握这些SELinux配置技巧,可以在保持系统安全的同时,确保应用程序的正常运行,为Linux系统提供更高级别的安全保障。