Linux命令-semanage(SELinux 策略管理)
Linux命令-semanageSELinux 策略管理快速参考基本语法安装 semanage管理文件安全上下文fcontext管理端口port管理布尔值boolean管理用户user管理角色role实际应用场景管理模块module故障排查semanage 与 chcon/restorecon 对比总结快速参考semanage是 SELinux 策略管理工具用于永久修改 SELinux 策略。与chcon临时修改和restorecon恢复默认不同semanage修改的是策略数据库使修改在文件系统重新标记relabel后仍然生效。semanage可以管理端口、文件上下文、用户、角色、布尔值等。核心概念semanage修改的是策略规则这些规则决定了restorecon的行为。基本语法semanage{对象}{操作}[选项]# 管理端口semanage port-a-thttp_port_t-ptcp8080# 管理文件上下文semanage fcontext-a-thttpd_sys_content_t/web(/.*)?# 管理布尔值永久semanage boolean-m--onhttpd_can_network_connect# 查看所有端口定义semanage port-l安装 semanage# Debian/Ubuntusudoaptupdatesudoaptinstallpolicycoreutils-python-utils# RHEL/CentOSsudoyuminstallpolicycoreutils-python# Fedorasudodnfinstallpolicycoreutils-python-utils# 验证安装whichsemanage管理文件安全上下文fcontext# 查看当前文件上下文规则 semanage fcontext-l|grephttpd# 添加新的文件上下文规则 # 示例让 Nginx 可以读取 /web 目录sudosemanage fcontext-a-thttpd_sys_content_t/web(/.*)?# 参数说明# -a : 添加add# -t : 类型type# -s : 用户user# -r : 角色role# /web(/.*)? 正则表达式匹配 /web 及其所有子内容# 应用新的上下文规则 # 添加规则后需要使用 restorecon 应用sudorestorecon-Rv/web/# 删除文件上下文规则 sudosemanage fcontext-d/web(/.*)?# 修改现有规则 sudosemanage fcontext-m-tvar_log_t/var/log/myapp(/.*)?管理端口port# 查看当前端口定义 semanage port-l# 按类型过滤semanage port-l|grephttp# 添加端口定义 # 示例让 Apache 监听 8080 端口sudosemanage port-a-thttp_port_t-ptcp8080# 参数说明# -a : 添加# -t : SELinux 类型# -p : 协议tcp/udp# 8080 : 端口号# 添加端口范围 sudosemanage port-a-thttp_port_t-ptcp8080-8090# 删除端口定义 sudosemanage port-d-thttp_port_t-ptcp8080# 修改端口定义 sudosemanage port-m-thttp_port_t-ptcp8080管理布尔值boolean# 查看所有布尔值 semanage boolean-l# 查看当前值getsebool-a# 永久修改布尔值 # 方法1使用 semanage推荐sudosemanage boolean-m--onhttpd_can_network_connectsudosemanage boolean-m--offhttpd_can_network_connect# 方法2使用 setsebool -P等效sudosetsebool-Phttpd_can_network_connect on# 临时修改布尔值重启后失效sudosetsebool httpd_can_network_connect on# 常用布尔值 # 允许 HTTP 服务连接网络setsebool-Phttpd_can_network_connect on# 允许 HTTP 服务访问用户目录setsebool-Phttpd_enable_homedirs on# 允许 FTP 服务访问用户目录setsebool-Pftp_home_dir on# 允许 Samba 服务访问用户目录setsebool-Psamba_enable_home_dirs on管理用户user# 查看 SELinux 用户 semanage user-l# 创建 SELinux 用户 sudosemanage user-a-Rstaff_r sysadm_r-PMCSmyuser_u# 修改 SELinux 用户 sudosemanage user-m-Rstaff_r sysadm_rmyuser_u# 删除 SELinux 用户 sudosemanage user-dmyuser_u# 将 Linux 用户映射到 SELinux 用户 sudosemanage login-a-smyuser_u username管理角色role# 查看角色 semanage role-l# 添加角色 sudosemanage role-a-thttpd_t httpd_sysadm_r# 删除角色 sudosemanage role-dhttpd_sysadm_r实际应用场景# 场景1让 Apache 监听非标准端口 # 1. 添加端口定义sudosemanage port-a-thttp_port_t-ptcp8080# 2. 修改 Apache 配置sudovim/etc/httpd/conf/httpd.conf# 修改Listen 8080# 3. 重启 Apachesudosystemctl restart httpd# 场景2让 Nginx 访问非标准目录 # 1. 添加文件上下文规则sudosemanage fcontext-a-thttpd_sys_content_t/web(/.*)?# 2. 应用规则sudorestorecon-Rv/web/# 3. 验证ls-Zd/web/# 场景3让 Samba 共享非标准目录 # 1. 添加文件上下文规则sudosemanage fcontext-a-tsamba_share_t/shared(/.*)?# 2. 应用规则sudorestorecon-Rv/shared/# 3. 设置布尔值sudosetsebool-Psamba_enable_home_dirs on管理模块module# 查看已加载模块 semanage module-l# 启用模块 sudosemanage module-emodule_name# 禁用模块 sudosemanage module-dmodule_name# 安装自定义模块 # 编译 .te 文件为 .modcheckmodule-M-mmy_policy.te-omy_policy.mod# 打包为 .ppsemodule_package-omy_policy.pp-mmy_policy.mod# 安装模块sudosemodule-imy_policy.pp故障排查# 问题1semanage 命令找不到# 解决安装 policycoreutils-python-utilssudoaptinstallpolicycoreutils-python-utils# 问题2修改不生效# 原因没有使用 restorecon 应用# 解决sudorestorecon-Rv/path/# 问题3端口定义冲突# 查看端口是否已被其他类型使用semanage port-l|grep8080# 如果冲突先删除旧的sudosemanage port-d-told_type-ptcp8080# 问题4文件上下文规则不生效# 验证正则表达式是否正确echo/web/test.txt|grep-E^/web(/.*)?$semanage 与 chcon/restorecon 对比┌─────────────────────────────────────────────┐ │ 命令 │ 作用范围 │ 持久性 │ 推荐度 │ ├─────────────────────────────────────────────┤ │ chcon │ 当前文件 │ 不持久 │ ⚠️ 临时 │ │ restorecon │ 当前文件 │ 依赖策略 │ ✅ 恢复 │ │ semanage │ 策略数据库 │ 持久 │ ✅ 永久 │ └─────────────────────────────────────────────┘总结核心价值semanage是永久修改 SELinux 策略的工具确保修改在重新标记后仍然生效。最佳实践使用semanage fcontext添加文件上下文规则使用semanage port添加端口定义使用semanage boolean -m --on永久修改布尔值修改后使用restorecon应用常用组合semanage fcontext -a -t type /path(/.*)?添加文件上下文规则semanage port -a -t type -p tcp port添加端口定义semanage boolean -l查看布尔值semanage boolean -m --on bool永久启用布尔值restorecon -Rv /path/应用文件上下文规则⚠️ 注意semanage修改的是策略数据库需要配合restorecon才能应用到文件系统。

相关新闻