有人为了省事对整个临时目录做了递归七百七十七,之后 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 就是粘滞位,少了它任何用户都能删别人的临时文件,安全风险比服务起不来更大。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189