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

Posted

技术标签:

【中文标题】具有多个匹配部分的 sshd,覆盖设置【英文标题】:sshd with multiple match sections, override settings 【发布时间】:2012-06-05 11:32:19 【问题描述】:

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

这很容易通过添加一个匹配部分来完成

Match Group groupname
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp

现在我需要排除一个属于该组的用户。他应该有正常的 shell 访问权限。

Match User username
    ChrootDirectory ???
    ForceCommand ???

我在这里设置什么? 是否可以取消设置先前使用另一个匹配部分设置的配置指令?

【问题讨论】:

【参考方案1】:

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

Match Group groupname User !username
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp

必须满足Match 行上的所有条件才能应用该部分。

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

Match Group groupname User "!username"
    ChrootDirectory /srv/ftp
    ForceCommand internal-sftp

【讨论】:

不需要引号 对于其他偶然发现此问题的人,我只是在阅读bbs.archlinux.org/viewtopic.php?id=121945 之前无法让它工作。结果发现模式匹配中存在错误,您需要执行“匹配组组名,用户 *,!用户名”,在我这样做之后它会立即按预期工作。 @NicolasMommaerts 使用 SSH 配置,the doc says "Criteria 可以通过在前面加上感叹号 ('!') 来否定。" 你能做到吗?也用 SSHD 来做这件事? Match Group foo !User bar baz【参考方案2】:

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

Match Group groupname User !username
   ChrootDirectory /srv/ftp
   ForceCommand internal-sftp
Match User username
   PasswordAuthentication yes

另一个例子是,如果用户从不同的 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

【讨论】:

您的第二个示例正是我所需要的,因此非常感谢。为了将“坏”用户分组,我引入了一个组,例如,badusersMatch Group badusers Address *,!192.168.0.0/16 PasswordAuthentication no【参考方案3】:

对我有用的是将用户规则放在首位:

Match user lee
    ChrootDirectory /mnt/s3
    ForceCommand internal-sftp

Match group ftp
    ChrootDirectory /home/%u
    ForceCommand internal-sftp

【讨论】:

以上是关于具有多个匹配部分的 sshd,覆盖设置的主要内容,如果未能解决你的问题,请参考以下文章

将悬停覆盖在具有多个 div 的容器上? (弹性盒)

设置具有多个部分和按钮的 tableviewcontroller

将覆盖悬停在具有多个div的容器中? (Flexbox的)

iOS:实现具有多个部分的设置的最佳方法 [关闭]

匹配 Elixir 二进制文件中的多个部分以解析 HTTP/2.0 帧

具有多个“步骤”的 Android 设置活动