我希望所有用户都使用您的公钥/私钥对我的服务器进行任何类型的访问。在 SSH 配置中,我将设置 3 个组:
sshaccess
:用户可以使用shell、SFTP和隧道;sftpaccess
:用户不能使用shell,但可以使用SFTP;mysqlaccess
:用户无法使用 shell,但可以使用 TCP 转发到端口 3306。
我将只允许这 3 个组使用 SSH 连接:
AllowGroups sshaccess sftpaccess mysqlaccess
对于有组的用户sftpaccess
,我将强制 SFTP 并将用户锁定在您的主文件夹中:
Match Group sftpaccess
ForceCommand internal-sftp
ChrootDirectory %h
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
对于有组的用户mysqlaccess
,我将允许端口 3306 上的隧道:
Match Group mysqlaccess
Banner no
PermitTunnel yes
AllowTcpForwarding yes
PermitOpen 127.0.0.1:3306
但是,假设我有用户caique
并且他需要:
- 访问 SFTP,锁定在您的主文件夹中;
- 访问 MySQL 隧道以使用您的凭据进行连接。
我不想创建一个用于 SFTP 的用户和另一个用于 MySQL Tunnel 的用户,那么实现此目的的最佳方法是什么?
我不想暴露 MySQL 端口,因此我使用 MySQL Tunnel。但是,在我的测试中,我无法将 Tunnel 用于与 关联的用户sftpaccess
,我错过了什么?
答案1
像这样的部分怎么样:
Match Group sftpaccess Group mysqlaccess
ForceCommand internal-sftp
ChrootDirectory %h
AllowAgentForwarding no
Banner no
PermitTunnel yes
AllowTcpForwarding yes
PermitOpen 127.0.0.1:3306
不可否认,这需要重复,并且可能有效也可能无效,具体取决于 sshd 是否加载所有用户组(我怀疑它确实如此)。
或者,您可以创建特定于用户的Match
(这往往假设您不会获得更多此类用户。
我怀疑规则的顺序很重要,但我不确定这应该是第一个还是最后一个(相对于其他两个)。我认为应该是第一。