Ubuntu的SFTP和Chrooting

我已经四处寻找了几天,玩弄configuration和下面的教程。

我有两个组: devsftp

开发组内的用户也是www-datasvn组的一部分。 这些用户将被chrooted到他们的主目录。 我希望他们通过符号链接访问/ var / www,或者以某种方式为他们安装目录。

sftp组内的用户不能使用ssh ,但应该允许sftp。

背景

我试图configurationsshd_config以允许sftp组sftp只能访问,重启ssh并丢弃。 幸运的是,在处理sshd_config时,我准备了一个故障安全来恢复configuration,并在此事件中每隔10分钟由cron重新启动。 尽pipe如此,我找不到替代方法或使这种方法工作。

编辑!

在回顾下面的答案后,会有其他build议吗? 我运行Ubuntu – 因此root用户被locking,而ssh_config 拒绝 rootlogin。 另外sudoers在其configuration中有两个允许的组,srv-admin和sudo(sudo不能杀死,重启,升级等)。

该组dev是允许用户访问2个目录, /home/<user>/var/www 。 该组sftp仅用于允许用户SFTP访问,仅此而已,没有SSH。

听起来像我误解了在这种情况下使用chroot。

您不能通过符号链接暴露chroot环境以外的目录(因为path根本无法访问)。 您可以通过绑定挂载 公开目录。 这使您可以在文件系统的另一部分安装文件系统的一部分。 例如:

 mount --bind /var/www /home/someuser/www 

一般来说,除非你真的限制了可用工具的数量,否则chroot环境是非常棘手的。 您将需要在chroot环境中提供适当的二进制文件以及所有必要的共享库。 如果人们希望能够正常工作,这通常最终会成为一个交互式环境(例如提供了sshlogin)的一个失败的主张。

您应该能够使用sshd_configMatch块和ForceCommand指令一起提供sftp -only访问sftp组的权限。 就像是:

 Match Group sftp ForceCommand sftp-internal 

您可以包含一个ChrootDirectory选项作为您的Match块的一部分。 以下将chroot人自己的主目录:

 ChrootDirectory %h 

请从sshd_config手册页注意以下几点:

ChrootDirectory必须包含必要的文件和目录来支持用户的会话。 对于交互式会话,这需要至less一个通常为sh(1)的shell和诸如null(4),zero(4),stdin(4),stdout(4),stderr(4),arandom等基本/ dev节点(4)和tty(4)设备。 对于使用“sftp”的文件传输会话,如果使用进程内sftp服务器,则不需要对环境进行额外configuration,尽pipe使用日志logging的会话在chroot目录内部需要/ dev / log(请参阅sftp-server(8)详情)。

记住,chroot是用于构build环境的,它不是一个安全工具。 攻击者有无数种方法可以打破chrooted环境。

如果你想隔离用户,Linux中的常规权限模型应该足够了,但是你需要locking环境本身。 总是假设一个攻击者要突破chroot,并从那里locking。

如果你想要真正的隔离,KVM / Xen风格的解决scheme可能是你想要的,但是如果你坚持使用chroot,那么你可能需要一个grsec补丁内核,它具有一些基本的安全保护措施 ,可以防止最常见的chroot破坏技术。