设置 FTPS 服务器时,我想启用 chroot_local_user。禁用后,一切正常。但是,如果我启用它,WinSCP 会连接失败,并声称我需要客户端证书才能连接。Filezilla 会彻底失败。
如果我明确将 require_cert 设置为 NO(即使它是默认值),这个问题仍然存在。
我该如何解决这个问题?
将用户限制在其主文件夹中的替代解决方案也是可以接受的。
谢谢
答案1
WinSCP 错误消息可能是错误的(或仅仅是猜测)。当我尝试设置 vsftpd 时,chroot_local_user
我发现如果用户在 chroot 目录中具有写权限,vsftpd 将拒绝登录(出于安全原因)。这在vsftpd 常见问题解答:
问)救命!我收到错误消息“拒绝以可写 root 身份运行”。
A) vsftpd 正在保护自己免受危险配置的影响。出现此消息的原因通常是 ftp 主目录的所有权不可靠。主目录不应由 ftp 用户自己拥有。ftp 用户也不应对其进行写入。解决此问题的方法是:
chown root ~ftp; chmod -w ~ftp
另一个原因可能是尝试使用 chroot_local_user 而没有正确设置目录所有权。
要调试此问题,请将其添加log_die=YES
到 vsftpd.conf。然后日志将显示如下内容:
Nov 29 16:08:55 yourhost vsftpd[2866]: pam_userdb(vsftpd:auth): user 'testuser' granted access
Nov 29 16:08:55 yourhost vsftpd[2872]: ERROR: vsftpd: refusing to run with writable root inside chroot()
对于只读访问来说这不是问题,但如果您的用户应该能够上传文件,您必须在 chroot 目录中创建一个由相应用户拥有的文件夹。如果您想为用户的主目录提供 ftps 访问权限,那就有点麻烦了。您可能必须插入一个额外的层次结构级别,即/home/someuser
变成/home/someuser/someuser
。
对于快速测试,我发现 curl 非常方便,例如测试上传:
curl -T /tmp/blub -u testuser:testpass ftps://yourserver.example.com/in/
答案2
我遇到了这个问题。Cyberduck(只有 Cyberduck)正在向我的 vsftp 服务器请求客户端证书。
我的解决方案是将其添加到 /etc/vsftpd.conf:
ssl_request_cert=NO