Ubuntu中SELinux权限如何设置
小樊
34
2025-12-24 08:40:51
Ubuntu 中 SELinux 权限设置指南
一 前置说明与准备
- Ubuntu 默认启用的是 AppArmor,并非 SELinux。如确需使用 SELinux,需要手动安装组件并切换安全模块。准备步骤:
- 安装基础工具与策略包:
- sudo apt update
- sudo apt install selinux-basics selinux-utils auditd policycoreutils selinux-policy-default
- 激活 SELinux(写入内核启动参数并准备首次打标):
- sudo selinux-activate
- 为首次启用或标签异常时创建自动重打标标记:sudo touch /.autorelabel
- 重启系统:sudo reboot
- 说明:首次从“禁用”切到“启用”会触发全量重打标,耗时较长属正常。
二 查看状态与模式切换
- 查看状态与当前模式:
- getenforce(返回:Enforcing / Permissive / Disabled)
- sestatus(显示是否启用、当前模式、策略名称等)
- 临时切换模式(无需重启,仅对当前会话有效):
- 设为宽容模式:sudo setenforce 0
- 设为强制模式:sudo setenforce 1
- 永久生效需编辑配置文件:/etc/selinux/config
- 示例:
- SELINUX=enforcing 或 permissive 或 disabled
- SELINUXTYPE=default(或 mls;部分环境可见 targeted)
- 重要限制:
- 从 Disabled ↔ Enforcing/Permissive 的切换必须重启;
- 在 Enforcing/Permissive 之间可用 setenforce 即时切换;
- 从 Disabled 首次启用时,建议保留 /.autorelabel 以完成文件系统重打标。
三 常见权限设置场景与命令
- 文件与目录上下文(类型与标签)
- 查询与设置文件上下文:
- 查看:sudo semanage fcontext -l
- 添加规则:sudo semanage fcontext -a -t httpd_sys_content_t “/var/www/html/my_dir(/.*)?”
- 应用上下文变更:sudo restorecon -Rv /var/www/html/my_dir
- 临时修改(不持久):sudo chcon -t httpd_sys_content_t /var/www/html/file
- 进程域与布尔值
- 查看进程域:ps -Z、ls -Z(用于确认进程与文件的 SELinux 标签)
- 开关布尔值(示例):sudo setsebool -P ftp_home_dir on
- 日志与排错
- 查看 AVC 拒绝日志:sudo ausearch -m avc -ts recent
- 图形化分析工具:sudo sealert -a /var/log/audit/audit.log
- 自定义策略模块(进阶)
- 安装开发包:sudo apt install selinux-policy-dev
- 生成模板与编译安装(示例):
- sepolgen --init
- 编辑策略源文件(.te),然后:
- make -f /usr/share/selinux/devel/Makefile
- sudo semodule -i my_policy.pp
四 故障排查与最佳实践
- 排错流程
- 将系统切到 Permissive(sudo setenforce 0),确认问题是否由 SELinux 引起;
- 使用 ausearch/sealert 定位拒绝原因,优先通过 restorecon、semanage fcontext 修正标签或布尔值;
- 必要时再切回 Enforcing 验证。
- 安全与变更建议
- 生产环境优先采用 SELINUX=enforcing;调试期可先用 permissive;
- 避免直接 disabled,如需变更模式请规划维护窗口并重启;
- 变更策略或首次启用后,保留 /.autorelabel 以确保标签一致性;
- 若仅需“类似 MAC”的能力且团队更熟悉 AppArmor,可继续使用 AppArmor 以降低维护复杂度。