我遇到了一个问题,我已经折腾了好几个小时了,但还是不明白发生了什么。我读了很多关于这个问题的指南,在 Ubuntu 上应该只需要 2 分钟的设置任务,但我仍然无法让它工作。
问题是:
我已经设置了正确的 sshd_config,至少我希望我做对了……
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /var/www
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
/var /www 都具有 755 root:root 的权限。是的,我已经无数次重启了我的 ssh 服务。是的,我已经阅读了大约 30 篇关于此类内容的 stackoverflow 帖子,但从未发现任何与我的问题密切相关的内容。
现在我已经完成了先决条件,接下来是真正的问题:当我尝试使用 SFTP 连接时,我在身份验证日志中看到以下内容:
Nov 8 22:38:07 hidden_server_name sshd[7436]: Accepted password for wordpress_user from imagine_my_hp_address_here port 49508 ssh2
Nov 8 22:38:07 hidden_server_name sshd[7436]: pam_unix(sshd:session): session opened for user wordpress_user by (uid=0)
Nov 8 22:38:07 hidden_server_name systemd: pam_unix(systemd-user:session): session opened for user wordpress_user by (uid=0)
Nov 8 22:38:07 hidden_server_name systemd-logind[1462]: New session 241 of user wordpress_user.
Nov 8 22:38:07 hidden_server_name sshd[7481]: fatal: bad ownership or modes for chroot directory component "/"
Nov 8 22:38:07 hidden_server_name sshd[7436]: pam_unix(sshd:session): session closed for user wordpress_user
Nov 8 22:38:07 hidden_server_name systemd-logind[1462]: Removed session 241.
当然,“wordpress_user”是“sftpusers”组的成员,问题出在这一行:
Nov 8 22:38:07 hidden_server_name sshd[7481]: fatal: bad ownership or modes for chroot directory component "/"
为什么它要 chroot 到服务器的根目录,而它显然已设置为 /var/www?
甚至尝试多次将主目录更改为用户的各种内容。
请谁能帮我缓解一下头痛,好痛啊!:D
答案1
ChrootDirectory /var/www
...
bad ownership or modes for chroot directory component "/"
ChrootDirectory 选项要求 chroot 目录及其所有父目录属于根。从文档(强调添加):
Chroot目录
指定在认证后 chroot(2) 到的目录路径名。在会话启动时,sshd(8) 检查路径名的所有组件都是根拥有的目录,任何其他用户或组都无法写入. chroot 之后,sshd(8) 将工作目录更改为用户的主目录。
在您的例子中,ssh 服务器抱怨系统的根目录“/”。显然,根目录的权限不符合这些要求。
最简单的解决方法是将根目录的权限调整为 0755,所有者为 root。我知道的唯一替代方案是构建你自己的 SSH 服务器副本此项检查已禁用。
答案2
这是设计使然。
严格权限会强制您以 root 身份填充/var/www/
目录,并将文件和子目录分配给您的用户或组。这不是最佳选择。
最好创建一个子目录,/var/www/
让你的用户对其进行写入,而只留给/var/www/
root 进行操作。
如果您的 Web 服务器上只有一个虚拟主机,那么这就是您可以执行的操作的一个示例。
sudo chown root:root /var/www/
sudo chmod u=rwx,g=rx,o=rx /var/www/
sudo mkdir /var/www/site1/
sudo chgrp sftponly /var/www/site1
sudo chmod u=rwx,g=rwxs,o=rx /var/www/site1/
在您的 SSH 服务器的配置文件中添加如下内容:
Match group sftponly
ChrootDirectory /var/www/
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -d site1