![sshfs:将所有非 root 用户 chroot 到特定目录](https://linux22.com/image/141806/sshfs%EF%BC%9A%E5%B0%86%E6%89%80%E6%9C%89%E9%9D%9E%20root%20%E7%94%A8%E6%88%B7%20chroot%20%E5%88%B0%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95.png)
在服务器上,我需要 root 不受限制的 ssh 访问,并限制所有其他用户的访问。
我想限制所有非 root 用户:
- 没有 ssh 登录
- 只允许
/mnt/data/
使用挂载sshfs
我看到sshd_config
允许使用Match User
,即:
Match User john
ChrootDirectory /mnt/data/
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
但如何匹配除 root 之外的所有用户?
答案1
ssh
的配置文件中的 Match 指令支持否定。但看起来否定条件有点sshd_config
棘手:你必须写
Match User="!root,*"
将后续指令应用于除 root 之外的所有用户。
这是相关文档:来自man sshd_config
:
Match 引入条件块。
...
匹配模式可以由单个条目或逗号分隔的列表组成,并且可以使用 ssh_config(5) 的模式部分中描述的通配符和否定运算符。
并来自man ssh_config
:
模式
模式由零个或多个非空白字符、“*”(匹配零个或多个字符的通配符)或“?”组成(与一个字符完全匹配的通配符)。
...
请注意,否定匹配本身永远不会产生肯定结果。
例如,尝试将“host3”与以下模式列表进行匹配将会失败:from="!host1,!host2"
这里的解决方案是包含一个将产生正匹配的术语,例如通配符:
from="!host1,!host2,*"
提示发现于本文在红帽客户门户上。