尝试理解 vsftpd 的符号链接行为

尝试理解 vsftpd 的符号链接行为

我最近将我的网站移至 CentOS 6 VPS(从启用 HyperVM 的 CentOS 5 VPS)。我设置了 vsftpd 来处理我们的 FTP 需求。我为所有需要使用 FTP 的人创建了一个本地用户。对于我的用户 Joe,他使用 FileZilla 登录并进入/home/joe。Joe 可以将该文件夹用作私人存储,但我放置了一个符号链接,以便他可以访问 上的公共存储/var/www/html/storage

因此,在他的目录中,我以 root 身份执行了以下操作: ln -s /var/www/html/storage/ storage

由于某种原因,结尾/是必要的,否则storage将在 FileZilla 中显示为文件而不是目录的快捷方式。

无论如何,/home/joe当 Joe 导航到 时,storage他的路径突然变成/var/www/html/storage而不是/home/joe/storage。这使得很难导航回他的主目录中的父文件夹。

有办法纠正这个问题吗?

chroot在我的服务器上已禁用,这很好。我信任我的用户,但通过符号链接将他们扔到文件系统中对他们来说很不方便。如果我启用,chroot那么他们将根本无法访问/var/www

奇怪的是,这在我之前使用 HyperVM 的 VPS 上是有效的。但那个 VPS 使用的是 PureFTP 而不是 vsftp。我认为它在机器上创建了虚拟用户而不是真实的本地用户。虚拟用户是否是按我想要的方式创建符号链接所必需的?

我研究的另一个解决方案是使用mount --bind,但我不确定这是否是最好的做法。拥有大量挂载点会破坏我的文件系统吗?当ln -s应该工作时,它也感觉不合适。如果我以 Joe 的身份通过 SSH 进入我的服务器,我可以/home/joe/storage在 bash shell 中访问。那么为什么我不能在 FTP 中这样做呢?

附注:这与FTP 客户端中的LISTversus有关吗MLSD?我有一个 Mac 用户,他根本无法将符号链接视为符号链接,即使我/在链接中放置了尾随符号。

答案1

我会执行 mount --bind 选项..因为它至少会保留 filezilla 中的路径。

如果你想在 vsftp 中启用 chroot,这样用户就会将 /home/user 视为 /,这会增加更多的安全性,但 mount --bind 会允许用户仍然访问该目录,而符号链接则不会

相关内容