希望不是一个骗局,但找不到这个问题的答案......我发现了这个,表面上看起来是一样的,但是很老,唯一的答案没有回答实际的问题: 设置用户作为 sftp 的 chroot 用户,但允许用户登录 SSH
我已经通过 sftp 为组 'sftp_users' 中的用户成功设置了一个工作 ChrootDirectory 环境。它运行良好,所有适当的权限等,限制对仅 sftp 的访问,并且它们可以在 ChrootDirectory 内的子目录中 rw。这对于非特权用户来说非常有用,不允许 ssh 访问并且只允许 rw 在 ChrootDirectory 内的子文件夹中。
我希望有更多的特权用户仍然能够正常使用 ssh,但是当通过 sftp 登录时将拥有 ChrootDirectory 环境。这不是一个安全问题,因为它们被认为是私有的,并且 obvi 可以在其正常用户权限内浏览 ssh 中的文件系统。问题是,当他们在 sftp 下登录而不阻止 ssh 登录时,我没有看到 Chroot 的方法。这更多是为了标准化和方便,所以当他们 sftp 时,他们就像只使用 sftp 的用户一样到达他们的 Chrooted 位置。
我认为如果我将他们的 shell 保留为默认值(不是 /bin/false 或 nologin),这将起作用。不幸的是,当他们在 sftp_only 组中时,它根本不允许他们 ssh 进入,只有 sftp。除了拥有两个单独的帐户之外,是否有解决此问题的方法——一个添加到“sftp_users”,一个不在该组中?到目前为止,我只能找到有关限制 sftp Chroot 并同时禁止 ssh(如果它们在该组中)的文档。
示例用户是“测试”。'test' 在 sftp_users 组中,因此可以通过 sftp 登录并被 Chroot 到他指定的文件夹('/sftp/test')并读取或写入绑定安装在 '/sftp/test/home' 的主文件夹. 这一切都有效。但是即使他的 shell 仍然在 /etc/passwd 中设置为 /bin/bash,如果添加到 sftp_users 组,'test' 也无法通过 ssh 登录。删除该组中的成员,他可以同时执行这两项操作,但不能在 sftp 下进行 Chroot。
不在组 'sftp_users' 中的用户仍然可以通过 ssh 或 sftp 登录,但在 sftp 下没有 Chroot。
有没有办法匹配使用的协议,和/或可能为不同的组设置额外的匹配?我只是在他们通过 sftp 登录时寻找 chroot。通过 ssh 的非 chroot 对这些用户来说很好。
以下是我的 sshd_config:
Port XXXX
#ListenAddress ::
#ListenAddress 0.0.0.0
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
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
PubkeyAuthentication yes
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd yes
PrintLastLog yes
ClientAliveCountMax 10
ClientAliveInterval 3600
TCPKeepAlive no
#Banner /etc/issue.net
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server -u 0027
UsePAM yes
PasswordAuthentication yes
Match Group sftp_users
ChrootDirectory /sftp/%u
ForceCommand internal-sftp -u 0027
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes