11

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

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

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

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

Match User username
    ChrootDirectory ???
    ForceCommand ???

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

4

3 回答 3

9

首先将设置应用于组,不包括用户名,然后将(其他)设置应用于用户名。如果您不对用户用户名使用“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
于 2016-03-17T22:15:52.130 回答
8

不要添加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
于 2012-05-31T09:56:16.313 回答
0

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

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

Match group ftp
    ChrootDirectory /home/%u
    ForceCommand internal-sftp
于 2021-02-24T14:48:55.147 回答