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 # 查看文件的安全上下文📌 三、三种工作模式
Enforcing(强制):策略生效,违反者会被阻止并记录日志。
Permissive(宽容):不会阻止行为,但会记录违规日志(用于调试)。
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 很重要。