我可以在不使用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>