![SSH:排除 root 用户强制进入 chrooted sftp](https://linux22.com/image/744967/SSH%EF%BC%9A%E6%8E%92%E9%99%A4%20root%20%E7%94%A8%E6%88%B7%E5%BC%BA%E5%88%B6%E8%BF%9B%E5%85%A5%20chrooted%20sftp.png)
有一台运行 sshd 的服务器强制所有连接用户使用 chrooted SFTP。到目前为止一切正常。
我希望用户 root 能够使用公钥身份验证登录,但每当我尝试“排除”用户 root 被强制进入 SFTP 时,其他所有用户也会被排除。
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp internal-sftp
UsePAM yes
#Match User !root
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
此配置按预期工作,但只要我在文件末尾附近启用 Match-rule,每个人都可以通过 SSH 登录到常规 shell。
...
Match User !root
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
强制进入 chrooted SFTP 对所有用户都有效,或者对任何人都无效。要么我误解了什么Match
是好的 - 并且所有列出的三个规则都是上下文中支持的子集的一部分Match
- 要么它只是无法处理否定标准。我甚至尝试root
用非 root 用户的名称替换,但无济于事:只要启用规则,其他每个用户都可以登录。它是什么?
值得一提的是,当我以非 root 用户身份登录时,我也观察到了某种“令人困惑”的日志输出:
Nov 12 22:39:06 host sshd[8687]: Accepted password for nonroot from 78.254.70.12 port 54988 ssh2
Nov 12 22:39:06 host sshd[8687]: pam_unix(sshd:session): session opened for user nonroot by (uid=0)
造成这种混淆的原因是使用权限分离,并让 uid=0 为非 root 用户打开会话。但是,我认为这基本上是预期的行为,因为 uid=0 需要代表其他用户创建进程。但这是否会干扰 root 身份测试!?