希望不是重复,但找不到这个问题的答案...我发现这个,表面上看起来是一样的,但是非常古老,其中唯一的答案并没有回答实际问题: 将用户设置为 sftp 的 chrooted,但允许用户在 SSH 中登录
我已通过 sftp 为组“sftp_users”中的用户成功设置了有效的 ChrootDirectory 环境。它运行良好,所有适当的权限等都限制为仅限 sftp 访问,并且他们可以在 ChrootDirectory 内的子目录中读写。这对于非特权用户非常有用,不允许 ssh 访问,只允许在 ChrootDirectory 内的子文件夹中读写。
我希望有更多特权的用户仍能正常使用 ssh,但通过 sftp 登录时将具有 ChrootDirectory 环境。这不是一个安全问题,因为他们被视为特权用户,显然可以在其正常用户权限范围内通过 ssh 浏览文件系统。问题是,我没有看到在他们通过 sftp 登录时 Chroot 他们而不阻止 ssh 登录的方法。这更多是为了标准化和方便,而不是其他任何事情,因此当他们使用 sftp 时,他们只会像仅使用 sftp 的用户一样到达 Chrooted 位置。
我认为如果我将他们的 shell 保留为默认设置(而不是 /bin/false 或 nologin),这将起作用。不幸的是,当他们在 sftp_only 组中时,它根本不允许他们 ssh 进入,只允许 sftp。除了拥有两个单独的帐户(一个添加到“sftp_users”,另一个不在该组中)之外,还有其他解决方法吗?到目前为止,我所能找到的只是关于限制 sftp Chroot 并同时禁止 ssh(如果他们在该组中)的文档。
示例用户是“test”。'test' 属于 sftp_users 组,因此可以通过 sftp 登录并被 Chrooted 到其指定文件夹 ('/sftp/test'),并读取或写入绑定挂载在 '/sftp/test/home' 的主文件夹。这一切都有效。但即使他的 shell 仍然在 /etc/passwd 中设置为 /bin/bash,如果将 'test' 添加到 sftp_users 组,他也无法通过 ssh 登录。删除该组的成员资格,他可以同时执行这两项操作,但不能在 sftp 下被 Chrooted。
不在“sftp_users”组内的用户仍然可以通过 ssh 或 sftp 登录,但不会被 sftp 下的 Chrooted 所影响。
有没有办法匹配所使用的协议,或者为不同的组设置额外的匹配?我只在他们通过 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
答案1
OpenSSH 不支持根据提交的命令覆盖全局关键字。您必须区分 OpenSSH 为语句提供的一些标准(组合)Match
。
可用的标准是用户、组、主机、本地地址、本地端口、RDomain 和地址(其中 RDomain 代表接收连接的 rdomain(4))
– 人 5 sshd_config
一种常见的选择是在通过备用域名(例如snapshot.backup.example
和)到达的备用 IP 上提供有意限制的服务sftp.backup.example
。
对链接问题但要把问题说清楚。
如果你认为你想sftp 访问 chrooted 为特权用户,你可能会破坏不同的角色变成相同的用户,这会带来安全风险。
通常,审计和特权分离问题可以通过以下方式得到更好的解决:使用不同的用户无论是什么原因让你考虑设置 chroot 设置,即使对于不受此限制的用户也是如此。如果有两个不同的任务,即使由同一个人,如果有意限制,则更安全的做法是,一定要设置一个新的系统用户(例如,让用户共享person
大多数person-task
限制和身份验证方法,并且只在 ssh 中限制其中一种)。
答案2
我也对这个问题感到困惑,当我为用户设置 chroot sftp 时,他们无法通过 ssh 登录。我的情况略有不同,我需要为用户提供有限的 shell 环境,同时用户仍然需要 sftp 和 scp 来访问他们的 RW 主目录,以及指定的公共目录,例如 RDONLY 的 /home/public。
首先我开发了一个jailed shell,希望这个shell能配合openssh internal-sftp实现我的需求,但是发现失败了,因为在开启chroot internal-sftp的情况下openssh不允许用户ssh登录。
因此,我不得不修改 jailed shell 以支持 home jailed sftp 和 scp。我使用 ptrace 系统调用来实现 jailed sftp,这有点棘手。如果这些信息对您有用,您可以参考 https://github.com/diggerwoo/jsh。