外观
SELinux 排错
RHEL 系默认开着 SELinux。多数「明明权限对了却 Permission denied」都是它干的。
先确认是不是它
bash
getenforce # Enforcing / Permissive / Disabled临时切成 Permissive 测一下,问题消失就是 SELinux:
bash
setenforce 0
# 测完记得切回来
setenforce 1不要图省事永久关掉,多数问题一条命令就能修。
看它拦了什么
bash
ausearch -m avc -ts recent
# 或者
grep denied /var/log/audit/audit.log | tail最常见的两类
文件上下文不对
比如手动往 /root/.ssh/ 里放了 authorized_keys,或者从别处复制了网站文件过来,标签跟目录不匹配。
bash
ls -Z /root/.ssh/ # 看当前标签
restorecon -Rv /root/.ssh # 恢复成目录应有的标签
restorecon -Rv /var/www/htmlrestorecon 是万能第一招,改完密钥登录不上、nginx 读不到文件,先跑它。
端口没登记
nginx 要监听一个非标准端口,SELinux 会拦:
bash
semanage port -l | grep http_port_t # 看已允许的
semanage port -a -t http_port_t -p tcp 8443 # 加一个semanage 在 policycoreutils-python-utils 包里。
布尔开关
有些行为是开关控制的,比如允许 nginx 发起对外连接(反代必需):
bash
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect 1-P 是永久。
容器
Docker 挂载目录进容器时加 :z 或 :Z 后缀,Docker 会自动打标签:
yaml
volumes:
- ./data:/data:z:z 允许多个容器共享,:Z 只给这一个容器用。