SELinux(Security-Enhanced Linux)是由美国国家安全局(NSA)和其他组织合作开发的一种强制访问控制(MAC,Mandatory Access Control)安全机制,目的是增强 Linux 系统的安全性。


📌 一、SELinux 是什么?

它是一种在 Linux 内核中实现的安全模块(LSM: Linux Security Module),用于控制进程(程序)对文件、端口、设备等系统资源的访问权限。

与传统的 Linux 权限系统(如用户/组权限)不同,SELinux 可以实现更细粒度、更强制性的安全策略。


📌 二、工作方式概览

SELinux 在系统运行时会:

  • 为每个进程、文件等对象分配一个安全上下文(Security Context)

  • 根据策略规则决定是否允许访问(如一个进程是否能读取某个文件、监听某个端口)。

比如:

ps -Z         # 查看进程的安全上下文
ls -Z         # 查看文件的安全上下文

📌 三、三种工作模式

  1. Enforcing(强制):策略生效,违反者会被阻止并记录日志。

  2. Permissive(宽容):不会阻止行为,但会记录违规日志(用于调试)。

  3. Disabled(关闭):完全禁用 SELinux。

查看当前状态:

getenforce

切换模式:

setenforce 0  # 切换为 Permissive
setenforce 1  # 切换为 Enforcing

永久修改 /etc/selinux/config 文件:

SELINUX=enforcing   # 或 permissive、disabled

📌 四、常见用途

  • 限制 Web 服务(如 Apache)访问非授权目录。

  • 防止被入侵后横向扩展。

  • 控制用户、进程对文件、网络的操作权限。

  • Android 系统也使用 SELinux 保护核心组件。


📌 五、优缺点

优点

缺点

提供精细的访问控制,阻止漏洞利用

初学者配置难度大

系统被入侵时限制攻击面

出错时可能导致服务无法启动

支持审计记录,有利于问题追踪

调试和排查问题需要经验


📌 六、简单示例

比如 httpd 进程默认不能访问 /home/www,哪怕你修改了权限,也可能因为 SELinux 拦截而无法访问,需要设置适当的上下文:

chcon -R -t httpd_sys_content_t /home/www

如需深入了解,可以使用命令查看当前策略:

semanage boolean -l       # 查看策略布尔值
semanage fcontext -l      # 查看文件上下文规则

在 Android、Red Hat、CentOS、Fedora 或某些嵌入式系统中开发,SELinux 很重要。