sshd_config 中出现意外的匹配行为

sshd_config 中出现意外的匹配行为

我正在尝试在我的中配置以下限制sshd_config

  1. 具有本地 IP 地址的用户不受任何限制
  2. 组中具有非本地 IP 地址的用户sftp可以在 chroot Jail 中使用 sftp
  3. 不属于该sftp组的具有非本地 IP 地址的用户不允许执行任何操作。

这是我想出的:

Match Address 10.0.0.0/24,172.16.0.0/20,192.168.0.0/16
        X11Forwarding yes

Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group sftp
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory %h
        ForceCommand internal-sftp

Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group *,!sftp
        X11Forwarding no
        AllowTcpForwarding no
        ForceCommand /sbin/nologin

问题:当我尝试从内部地址登录时,作为非 sftp 用户,我被拒绝了;第三场比赛触发。

根据sshd_config联机帮助页,只有满足所有子句时,匹配才算满足,但就我而言,第一个子句不满足(我从 IP 地址为 172.16.0.0/20 的机器进入),只有第二个是(我不在sftp组中)。

手册页错误吗sshd_config?有可能做我想做的事吗?

更新:根据@steve的建议,我在调试模式下运行了sshd,并得到了这个:

debug1: userauth-request for user root service ssh-connection method none
debug1: attempt 0 failures 0
debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 144
debug1: user root does not match group list sftp at line 144
debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 150
debug1: user root matched group list *,!sftp at line 150
debug1: PAM: initializing for "root"

no-internal-adress 子句是匹配的;另外,调试日志中没有提到第一个匹配,这看起来很奇怪。

更新:

正如@Gilles 指出的,上面显示的我的地址规范是不正确的。我应该使用的是 10.0.0.0/8,而不是 10.0.0.0/24,以及 172.16.0.0/12,而不是 172.16.0.0/20。我从 32 开始向下数掩码位,而不是从 0 开始向上数。哎呀。

有了正确的地址,配置就可以工作了。谢谢吉尔斯和乌列尔!

(我还将最后一行中的 /sbin/nologin 更改为 /bin/false;前者会导致来自 sftp: 的奇怪错误消息。Received message too long 1416128883

答案1

我在回答类似的问题超级用户网站,但在回复之后我不再确定它是否正确。

简而言之,我认为目前这是不可能的,甚至openssh-7.0是不可能的,但这些错误还没有修复,所以我们必须敦促上游。

还有带有积极反馈的替代答案,但我想这就是您试图实现结果的方式。我没有尝试过,但这看起来只与团体相关。否则匹配*,!something就没多大意义。

不要在这里责怪上游并没有带来任何建设性的反馈,我可以建议您sshd在不同的端口上运行两个单独的服务。一个人会使用AllowGroup sftp并强制sftp服务器。另一个只会回答来自您内部网络的请求。

答案2

您的网络标记不正确。如果您想包含专用网络,您应该使用:

10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

这可能就是您不匹配的原因,而不是错误ssh

相关内容