在服务器上,我需要 root 不受限制的 ssh 访问,并限制所有其他用户。
我想限制所有非 root 用户:
/mnt/data/
使用sshfs
我看到sshd_config
允许使用Match User
,即:
Match User john
ChrootDirectory /mnt/data/
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Run Code Online (Sandbox Code Playgroud)
但是如何匹配除 root 之外的所有用户?
fra*_*san 12
ssh
的配置文件中的 Match 指令支持否定。但看起来否定条件sshd_config
有点棘手:你必须写
Match User="!root,*"
Run Code Online (Sandbox Code Playgroud)
将后续指令应用于除 root 之外的所有用户。
这是相关文档:来自man sshd_config
:
Match 引入一个条件块。
...
匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用 ssh_config(5) 的 PATTERNS 部分中描述的通配符和否定运算符。
来自man ssh_config
:
模式
模式由零个或多个非空白字符、“*”(匹配零个或多个字符的通配符)或“?”组成。(恰好匹配一个字符的通配符)。
...
请注意,否定匹配本身永远不会产生肯定结果。
例如,尝试将“host3”与以下模式列表匹配将失败:Run Code Online (Sandbox Code Playgroud)from="!host1,!host2"
此处的解决方案是包含一个会产生正匹配的术语,例如通配符:
Run Code Online (Sandbox Code Playgroud)from="!host1,!host2,*"
在 Red Hat Customer Portal 上的这篇文章中找到了提示。