带有多个匹配部分的sshd,覆盖设置

gur*_*ert 5 ssh configuration sshd

我有sshd应该只允许sftp访问一组用户的情况。

只需添加匹配部分即可轻松完成此操作

Match Group groupname
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

现在,我需要排除一个属于该组成员的用户。他应该具有正常的外壳访问权限。

Match User username
    ChrootDirectory ???
    ForceCommand ???
Run Code Online (Sandbox Code Playgroud)

我在这里设置什么?是否可以通过其他匹配部分取消预先设置的配置指令?

ann*_*neb 9

首先将设置应用于组,不包括用户用户名,然后将(其他)设置应用于用户用户名。如果您不使用用户名的“ForceCommand”设置,则不会应用它。

Match Group groupname User !username
   ChrootDirectory /srv/ftp
   ForceCommand internal-sftp
Match User username
   PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

另一个例子是,如果用户从不同的 IP 地址登录,您可能需要不同的设置

#all users except username1 and username2 default to sftp
Match User *,!username1,!username2
    PasswordAuthentication yes
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp -f LOCAL0 -l INFO

#normal ssh allowed for users username1 and username2 from the local network
Match User username1,username2 Address 192.168.0.0/16
    PasswordAuthentication yes

#users username1 and username2 not allowed from other networks
Match User username1,username2 Address *,!192.168.0.0/16
    PasswordAuthentication yes
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)


dav*_*420 6

不要添加Match User部分。而是通过从原始匹配中排除用户来排除用户。

Match Group groupname User !username
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

Match要应用此部分,必须满足该行上的所有条件。

我不确定确切的语法。您可能需要引号。

Match Group groupname User "!username"
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

  • 对于其他偶然发现此问题的人,直到阅读了https://bbs.archlinux.org/viewtopic.php?id=121945,我才能使它正常工作。事实证明,在模式匹配中存在一个错误,您需要按照我的预期立即执行“匹配组组名,用户* 、!用户名”。 (2认同)