有人为了省事对整个临时目录做了递归七百七十七,之后 nginx 和 php-fpm 都起不来,日志里报 Failed at step EXEC。
原因不止一个,得分开看。临时目录丢了粘滞位,systemd 的私有临时目录校验失败。少数情况下是服务开了严格的保护模式,权限异常直接触发拒绝。
不容易想到的是,tmpfiles 的规则被改过,重启之后目录属性还是不对。
恢复标准权限和属主
chmod 1777 /tmp && chown root:root /tmp
再往下确认改动落在正确挂载点上
stat -c '%a %U %n' /tmp
接着让 systemd 重新应用规则
systemd-tmpfiles --create
剩下的就是重启失败的服务验证
systemctl restart nginx php-fpm
白天有业务在跑,能验证的部分都压到了晚上做。
当时还开着另一个排查窗口,两边日志对照着看才定位到。
恢复的判定其实很直接。ls 查看临时目录显示带 t 的权限位,相关服务全部处于运行状态,写入临时文件正常。
补一句。那个一千七百七十七里的 1 就是粘滞位,少了它任何用户都能删别人的临时文件,安全风险比服务起不来更大。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。