Linux 进阶 L22:SELinux——最被误解的安全卫士
很多教程第一句就是"先关掉 SELinux"。它名声这么差,是冤枉的。
SELinux 是什么
Linux 本来的权限(rwx)叫自主访问控制:文件主人说了算。SELinux 加了一层强制访问控制:系统定规矩,连 root 都得遵守。
三种模式
getenforce # 看当前模式
Enforcing:强制执行;Permissive:只记日志不拦截(排错用);Disabled:彻底关掉。
sudo setenforce 0 # 临时切宽容模式
sudo setenforce 1 # 切回强制模式
为什么总"背锅"
Nginx 被 SELinux 拦,正确做法不是关掉,而是发通行证:
sudo ausearch -m avc -ts recent # 看为什么拦
sudo setsebool -P httpd_can_network_connect 1 # 允许 Nginx 连网络
核心概念:上下文
ls -Z /var/www/html/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
Nginx 只能读带 httpd_sys_content_t 标签的文件:
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/www
排错三步
setenforce 0 切宽容模式,看问题还在不在
ausearch -m avc -ts recent 看拦了啥
该打标签打标签,该开布尔值开布尔值,再 setenforce 1 切回来
小结
SELinux 拦你的时候,先问"怎么给通行证",别上来就"把保安开除"。