Selinux全称为Security-Enhanced Linux,是由美国国家安全局开发并贡献给开源社区的内核级安全增强模块,它从内核层面为Linux系统提供强制访问控制能力,比传统的自主访问控制机制有更严格的安全约束。

Selinux的核心作用
传统的Linux权限控制基于用户、用户组和其他用户的rwx权限位,只要进程拥有对应的权限就可以执行操作,这种机制下如果进程被恶意利用,就可能获取超出预期的权限。而Selinux会给每个进程、文件、端口都打上安全上下文标签,进程的操作不仅要符合传统权限,还要匹配Selinux的安全策略规则,即使进程被入侵,也无法执行策略之外的操作。
Selinux的三种工作模式
Selinux有三种常见的工作模式,用户可以根据需求切换:
- enforcing:强制模式,Selinux会严格执行所有安全策略,违反规则的操作会被直接拒绝并记录日志。
- permissive:宽容模式,Selinux不会拒绝违反规则的操作,但会把相关违规记录到日志中,一般用于调试策略规则。
- disabled:关闭模式,Selinux功能完全关闭,系统不会加载相关安全策略。
安全上下文的基本结构
安全上下文是Selinux识别进程、文件等资源的核心标识,基本格式为用户:角色:类型:级别,其中类型字段是最常用的匹配依据。可以通过ls -Z命令查看文件的安全上下文,通过ps -Z查看进程的安全上下文:
# 查看/home/test.txt文件的安全上下文 ls -Z /home/test.txt # 输出示例:unconfined_u:object_r:user_home_t:s0 /home/test.txt # 查看当前运行的httpd进程的安全上下文 ps -Z -C httpd # 输出示例:system_u:system_r:httpd_t:s0 1234 ? 00:00:00 httpd
常用Selinux管理命令
日常使用中可以通过下面的命令查看和修改Selinux的状态:
查看Selinux状态
# 查看Selinux的运行状态和工作模式 getenforce # 输出示例:Enforcing # 查看更详细的Selinux配置信息 sestatus
临时切换工作模式
临时切换不需要重启系统,但重启后会恢复原来的配置:
# 临时切换到宽容模式 setenforce 0 # 临时切换到强制模式 setenforce 1
永久修改工作模式
永久修改需要编辑Selinux的配置文件,修改后重启系统生效:
# 编辑Selinux配置文件 vi /etc/selinux/config # 修改文件中的SELINUX字段,可选值为enforcing、permissive、disabled # 例如设置为强制模式:SELINUX=enforcing
Selinux常见使用场景
当遇到服务启动失败、端口无法访问、文件无法读取等问题时,如果传统权限检查没有问题,可以排查是否是Selinux策略限制导致的。比如httpd服务默认只能访问httpd_sys_content_t类型的文件,如果把网站文件放在其他目录且没有修改对应的安全上下文,即使文件权限正确,httpd也无法读取文件内容。这时候可以通过chcon命令临时修改文件的安全上下文,或者用semanage命令永久修改:
# 临时修改/var/www/html/test.html的安全上下文为httpd可访问的类型 chcon -t httpd_sys_content_t /var/www/html/test.html # 永久修改/var/www/html目录的安全上下文类型 semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" restorecon -Rv /var/www/html