我已经四处寻找了几天,尝试了各种配置并遵循了相关教程。
我有两个组:开发和安全FTP。
用户在开发团体也是www-数据和SVN 版本组。这些用户将chrooted到他们的主目录。我希望他们能够通过符号链接访问 /var/www,或者以某种方式为他们安装目录。
sftp 组内的用户,无法 ssh,但应该允许 sftp。
背景
我尝试配置 sshd_config 以允许 sftp 组仅 sftp 访问,重新启动 ssh 后就断开了。幸运的是,在处理 sshd_config 时,我准备了一个故障保护,以在这种情况下每 10 分钟通过 cron 恢复配置并重新启动。尽管如此,我还是找不到替代方案或让这种方法奏效。
编辑 !!
在查看以下答案后,是否有其他建议?我运行的是 Ubuntu - 因此 root 用户被锁定,并且ssh_config
拒绝root 登录。此外,sudoers 在其配置中拥有 2 个允许的组,srv-admin 和 sudo(sudo 无法终止、重启、升级等)。
该组dev
允许用户访问 2 个目录,/home/<user>
和/var/www
。该组sftp
仅允许用户 SFTP 访问,仅此而已,并且不允许 SSH。
听起来我误解了在这种情况下 chroot 的使用。
答案1
您不能公开目录外部通过符号链接退出 chroot 环境(因为路径根本无法访问)。能通过公开目录绑定挂载。这可让您将文件系统的一部分挂载到文件系统的另一部分。例如:
mount --bind /var/www /home/someuser/www
一般来说,chroot
除非你真的限制了可用的工具数量,否则环境是比较棘手的。你需要提供一组适当的二进制文件里面环境chroot
,以及所有必要的共享库。ssh
如果人们希望能够正常工作,那么对于交互式环境(例如提供登录)来说,这通常最终是一个失败的提议。
您应该能够使用指令中的块为组提供仅访问权限sftp
。例如:sftp
Match
sshd_config
ForceCommand
Match Group sftp
ForceCommand sftp-internal
您可以将ChrootDirectory
选项作为Match
块的一部分。以下内容将chroot
人们带到他们自己的主目录:
ChrootDirectory %h
请注意手册页中的以下内容sshd_config
:
ChrootDirectory 必须包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要一个 shell(通常为 sh(1))和基本 /dev 节点,例如 null(4)、zero(4)、stdin(4)、stdout(4)、stderr(4)、arandom(4) 和 tty(4) 设备。对于使用“sftp”的文件传输会话,如果使用进程内 sftp 服务器,则无需对环境进行额外配置,但使用日志记录的会话确实需要 chroot 目录中的 /dev/log(有关详细信息,请参阅 sftp-server(8))。