无需 chroot 即可实现 ProFTPd 服务器

无需 chroot 即可实现 ProFTPd 服务器

我可以在不使用chroot监狱的情况下使用 ProFTPd(从而防止访问 FTP 根目录之外的任何内容)吗?我需要在 FTP 源中包含指向我的 FTP 服务根目录之外的位置的符号链接。

我在 ProFTPd 上读到的所有文档和讨论都讨论了如何使用 chroot 功能(甚至在 StackExchange 内),但我想知道是否可以绕过它并使用不同的方法来服务我的 FTP 根目录。由于符号链接必须保留为符号链接,因此通过挂载目录作为绕过 chroot 限制(问题的巧妙“解决方案”)的方法不起作用。

答案1

问题是 FTP 是在互联网最早的史前时期就定义的,因此安全规定(纯文本密码,...)。这就是为什么 FTP 服务器通常仅用于匿名登录,并且由于它向 Internet 开放并具有丰富的命令集(以及许多非常令人惊讶的功能,因此创建它是为了在具有以下功能的计算机之间传输文件)真的奇怪的架构、不同的字符表示和奇怪的操作系统)。出于理智,人们应该将这些野兽镇压起来。

是否可以选择使用 scp(1) 之类的东西?使用网络服务器代替(甚至应该更有效)?

为什么符号链接必须是符号链接?

答案2

ProFTPD 具有模组vroot模块以此目的。您可以自己将此模块编译到 ProFTPD 中,或者如果您的存储库有该模块(apt-get install proftpd-mod-vroot对于某些 Debian 存储库),则可以安装它。

模组vroot允许用户配置“虚拟 chroot”,设置默认根目录指令(会话的初始/根目录;ProFTPD 将 chroot 到该目录,而无需模组vroot),但允许符号链接指向外部默认根目录小路。 mod_vroot 还支持VRoot服务器根指令,ProFTPD 将对其执行真正的 chroot,这意味着符号链接可以指向外部默认根目录,但必须定位范围内的位置VRoot服务器根小路。

配置示例:

<IfModule mod_vroot.c>
    VRootEngine on

    VRootServerRoot /usr/share/ # Symlinks can only point to location within /usr/share/
    VRootOptions allowSymlinks
    DefaultRoot /usr/share/ftproot/
</IfModule>

相关内容