我们有一个 Web 服务器,允许用户在 chroot 环境中上传 (SFTP) 大型文件。我们还希望能够使用 SSH 来管理此服务器。
在我们以前的情况下,我们使用系统 sshd 和 chroot 环境,其中有一个单独的 sshd 在里面运行。我希望我可以使用“新”的 ChrootDirectory 选项简化配置。
我们的服务器有两个 IP 地址,一个用于公共访问,一个用于内部访问。单个 sshd 是否可以监听两个单独的 IP/接口但对它们进行不同的处理?在我读过的所有文档中,似乎只能区分用户或组,而不能区分 IP/接口。
如果这不可能,双 sshd 设置是否是最好的选择,我是否应该做更好的用户管理来按组过滤它们,或者是否有更优雅的方式来设置这样的服务器?
答案1
您可以Match
反向使用。默认情况下使用 Chroot,然后如果从内部网络连接则否定该指令。
ChrootDirectory /chroot/somedir
Match Address 10.0.0.0/24
ChrootDirectory none
User
但是,您应该考虑在网络上做出安全决策的影响。包括经过身份验证的用户可能通过环回创建新会话以绕过此类策略。通常,如果可能的话,定义并执行此类策略会更安全Group
。
(编辑:在正确阅读之前输入)
答案2
我最终采用的解决方案如下:
Subsystem sftp internal-sftp
ChrootDirectory <my chroot directory>
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Match User <my admin account> Address <my ip>
ChrootDirectory none
X11Forwarding yes
AllowTcpForwarding yes
ForceCommand /bin/bash
Match User <my admin account>
ForceCommand none
因此,这是我之前看到的答案的混合体,我制作了两个 Match 块,这样来自其他 IP 的人,但尝试使用我的管理员帐户将无法使用 sftp 或 ssh。我将密切监视服务器上的活动,看看这是否可行,但内部测试看起来很有希望。
答案3
我创建了一个名为 sftpuplod 的组。每个没有 ssh 访问权限的客户都在这个组中,并且只能使用 sftp:
# sshd_config:
Subsystem sftp internal-sftp
Match group sftpupload
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
您还可以使用Chroot目录 %h真正进入 chroot 吧~
查看手册页