带有 chroot_local_user 的 vsftpd 需要客户端证书

带有 chroot_local_user 的 vsftpd 需要客户端证书

设置 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

我遇到了这个问题。Cyber​​duck(只有 Cyber​​duck)正在向我的 vsftp 服务器请求客户端证书。

我的解决方案是将其添加到 /etc/vsftpd.conf:

ssl_request_cert=NO

相关内容