sshfs:将所有非 root 用户 chroot 到特定目录

Mar*_*ter 8 ssh sftp sshfs

在服务器上,我需要 root 不受限制的 ssh 访问,并限制所有其他用户。

我想限制所有非 root 用户:

  • 没有ssh登录
  • 只允许安装/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”与以下模式列表匹配将失败:

from="!host1,!host2"
Run Code Online (Sandbox Code Playgroud)

此处的解决方案是包含一个会产生正匹配的术语,例如通配符:

from="!host1,!host2,*"
Run Code Online (Sandbox Code Playgroud)

在 Red Hat Customer Portal 上的这篇文章中找到了提示。