在一个配置中使用 SFTP 来 chroot 并使用 SSH 来管理系统?

在一个配置中使用 SFTP 来 chroot 并使用 SSH 来管理系统?

我们有一个 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 吧~

查看手册页

相关内容