selinux是什么:Linux安全强制访问控制系统
selinux是什么,它是集成在Linux内核里的强制访问控制安全模块,用来限制进程、文件、目录之间的访问权限,弥补传统Linux自主权限模型的缺陷,普通服务器运维人员日常部署网站、数据库时经常会遇到它拦截业务访问,你可以选择开启、宽容、关闭三种运行模式,生产环境推荐保持开启,仅在临时排错时切换宽容模式,不要永久关闭,该模块仅作用于搭载selinux内核的RHEL、CentOS、RockyLinux等发行版,Debian、Ubuntu默认不启用selinux,改用AppArmor。
selinux核心工作原理
传统Linux依靠用户、用户组、rwx权限做访问校验,只要进程所属用户拥有文件权限就能读取修改,一旦进程被入侵,攻击者就能拿到该用户对应的全部资源权限。selinux会给系统内每一个进程、文件、端口打上安全上下文标签,访问动作必须同时匹配传统权限和selinux策略规则,即便进程以root身份运行,没有对应上下文策略,依旧无法访问目标文件。策略规则提前定义各类主体允许执行的操作,系统内置大量预设策略,也能自定义策略模块适配业务。
安全上下文是selinux识别资源的标记,由用户、角色、类型、范围四段组成,日常排查问题重点看类型字段。网页文件默认类型是httpd_sys_content_t,如果把网站文件放在/home目录,目录类型为home_root_t,httpd进程就无法读取文件,网页直接报403,这是运维最常碰到的故障场景。
selinux三种运行模式
| 模式名称 | 行为表现 | 适用场景 |
|---|---|---|
| enforcing强制模式 | 拦截违规访问,写入审计日志 | 生产业务服务器 |
| permissive宽容模式 | 不拦截访问,仅记录违规日志 | 故障排查、策略调试 |
| disabled关闭模式 | selinux完全不加载,无校验 | 不推荐长期使用 |
你可以执行getenforce命令快速查看当前selinux运行模式,setenforce0临时切换到宽容模式,setenforce1开启强制模式,临时修改重启服务器后失效。永久修改需要编辑/etc/selinux/config配置文件,修改SELINUX字段,修改后重启系统生效。
改配置关闭selinux,系统重启时会重新标记全部文件上下文,大容量磁盘会消耗较长时间,期间服务器启动速度明显变慢。
日志是定位selinux拦截问题的核心依据。
selinux的审计日志默认存放在/var/log/audit/audit.log,日志会记录被阻止的进程动作、资源上下文,使用audit2allow工具可以直接根据日志生成自定义策略模块,用来放行合法业务访问,避免直接关闭安全模块。
selinux常见运维操作
- ls-Z查看文件或目录的selinux安全上下文
- ps-Z查看运行进程对应的安全上下文
- chcon临时修改文件上下文,文件重建会丢失设置
- restorecon恢复文件为系统默认上下文,适合修复误改标签
- semanagefcontext永久定义目录上下文规则
该模块的适用边界是,它只管控Linux本地资源访问,不会对网络防火墙层面的端口放行、应用账号密码校验提供保护,不能替代firewalld或者iptables,两者需要搭配使用才能构建完整服务器防护体系。
修改selinux策略放行业务时,尽量缩小权限范围,只给业务所需最小访问权限,不要直接放宽全局策略,减少潜在安全暴露面。
