如何从 SSHD 中的“匹配组”中排除?

eva*_*ine 15 openssh sshd

SSHD 配置中有一个 Match 组:

cat /etc/ssh/sshd_config
...
    Match Group FOOGROUP
    ForceCommand /bin/customshell
...
Run Code Online (Sandbox Code Playgroud)

机器上有许多用户在“FOOGROUP”中。

我的问题:如何从“匹配组”中排除“FOOGROUP”中的给定用户?

D_B*_*Bye 17

Match运营商可以采取多个参数,能够实现非常灵活的规则。在这种情况下,你可以做这样的事情来实现你想要的。

Match Group FOOGROUP User !username
  ForceCommand /bin/customshell
Run Code Online (Sandbox Code Playgroud)

!否定传递给参数User标准,因此即使用户username是该组中FOOGROUP,将Match不会成功,并且username将不给予在记录的定制外壳英寸

  • 似乎 `*,!username` 是一种更干净的方法。您的解决方案失败的另一种情况是将这种“匹配”与“ChrootDirectory”混合(在 openssh 5.3p1 和 7.4p1 上测试)。 (3认同)
  • 是的。我在发布之前对其进行了测试,它按我的描述工作。 (2认同)

小智 7

您需要在配置文件条目中使用多个子句,但要以非常特定的方式使用。某些设置中存在一个错误,导致通常推荐的、最简单的语法(“Match Group FOOGROUP User !username”)要么导致组中的其他人无法匹配,要么让他们逃脱他们的 chroot jail。

在使用 OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.2d 的 Debian Jessie 上,我得到的结果是组中的其他人无法再连接。 其他人报告越狱。在这两种情况下,语法都是

Match Group FOOGROUP User *,!username
Run Code Online (Sandbox Code Playgroud)

似乎没有副作用。毫无疑问,解析器中存在某种错误。