cat /var/log/secure
Jul 2 12:29:10 localhost sshd[32918]:Accepted password for sftp from 10.40.34.50 port 52386 ssh2 Jul 2 12:29:10 localhost sshd[32918]: pam_unix(sshd:session): session opened for user sftp by (uid=0) Jul 2 12:29:10 localhost sshd[32918]: fatal: bad ownership or modes for chroot directory "/home/data/sftp" [postauth] Jul 2 12:29:10 localhost sshd[32918]: pam_unix(sshd:session): session closed for user sftp还是报错
日志指出,通过 SSH 连接(特别是 SFTP)成功认证后,出现了关于 chroot 环境设置的错误。错误 fatal: bad ownership or modes for chroot directory "/home/data/sftp" [postauth]
表示 chroot 目录 /home/data/sftp
的所有者(ownership)或权限(modes)设置不符合 SSHD 的要求。
在 SSHD 的配置中,使用了基于 ChrootDirectory 指令的环境,当用户连接时,他们的活动被限制在指定的目录(即“chroot jail”)中。为了确保安全和隔离,SSH 服务要求该目录仅由 root 用户拥有,且其他用户(特别是将被锁定在该目录中的用户)不能拥有对此目录的写权限。目录的普通设置应为 755
(即 drwxr-xr-x
)。
您需要确保 /home/data/sftp
目录:
- 是由 root 用户拥有。
- 设置了正确的权限,通常为 755。
要解决问题,请按照以下步骤操作:
- 修改
/home/data/sftp
目录的所有权和权限:
1sudo chown root:root /home/data/sftp 2sudo chmod 755 /home/data/sftp
- 如果该目录是要给 SFTP 用户作为主目录的话,您应该为用户在
/home/data/sftp
内部创建一个他们可写入的目录(如files
),因为 sftp 用户无法直接在他们的主目录中写入文件。
1sudo mkdir /home/data/sftp/files 2sudo chown sftp_user:sftp_group /home/data/sftp/files 3sudo chmod 755 /home/data/sftp/files
请将 sftp_user
和 sftp_group
替换为相应的用户和组名称。
- 重启 SSH 服务器以应用修改:
1sudo systemctl restart sshd 2# 或者 3sudo service sshd restart
执行上述步骤后重试 SFTP 连接,如果设置正确,不应再报 bad ownership or modes for chroot directory
错误。如果仍然有问题,请确认 SELinux 没有干涉这些操作,可以暂时禁用 SELinux (setenforce 0
) 进行测试,记得测试结束后重新启用 (setenforce 1
)。