pidfile仅声明pid写入路径,不控制权限;能否写入取决于路径父目录是否对root可写、是否只读挂载、文件系统是否支持,需确保/var/run或/run目录权限为drwxr-xr-x且属主root:root。

PidFile 参数本身不负责路径的读写权限控制,它只是告诉 sshd 进程把当前主进程的 PID 写入哪个文件。能否成功写入、是否“锁定在只读路径”,完全取决于该路径所在目录的文件系统权限和属主归属,而非 PidFile 配置项本身的语法。
换句话说:
✅ PidFile /var/run/sshd.pid 是合法配置;
❌ 但若 /var/run 目录对 sshd 运行用户(通常是 root)不可写,sshd 启动就会失败,并报类似 Could not write pid file to /var/run/sshd.pid: Permission denied 的错误 —— 此时不是“锁定在只读路径”,而是根本无法启动。
所以,正确理解与操作应聚焦在 路径可写性 + 运行时保障 上:
PidFile 路径必须满足的三个前提
- 路径所在的父目录(如
/var/run)必须存在且对 root 可写(因为sshd主进程以 root 身份运行); - 该路径不应是只读挂载的文件系统(如
mount -o ro /tmp后的/tmp); - 文件本身无需预先创建,
sshd启动时会自动创建并写入 PID(但目录必须就绪)。
常见安全实践建议
- 使用标准路径:
PidFile /var/run/sshd.pid或PidFile /run/sshd.pid(现代 systemd 系统中/run是 tmpfs,重启即清空,更安全); - 确保
/run或/var/run权限为drwxr-xr-x,属主root:root; - 不要手动将
sshd.pid设为只读(如chmod 444 /var/run/sshd.pid),否则sshd无法更新或重写,导致服务无法优雅重启或状态异常; - 若需防止意外覆盖,靠的是目录权限隔离,而非文件只读 —— 比如确保只有
root能写/run/下的子目录,普通用户无法touch /run/sshd.pid。
验证是否生效的方法
# 修改 /etc/ssh/sshd_config 后 sudo sshd -t # 检查语法无误 sudo systemctl restart sshd ls -l /run/sshd.pid # 应显示 -rw-r--r-- root root,大小非零 cat /run/sshd.pid # 输出一个数字(即主进程 PID) ps -p $(cat /run/sshd.pid) # 应显示 sshd 进程
本质上,PidFile 是一个“声明式记录点”,不是权限控制器。它的可靠性来自操作系统级的路径管控,而不是配置项本身的功能扩展。










