在 openssh-server 中使用基于密钥的身份验证时如何正确 chroot

在 openssh-server 中使用基于密钥的身份验证时如何正确 chroot

我正在运行 Debian Stretch x86_64 服务器,带有 OpenSSH_7.4p1 Debian-10+deb9u3、OpenSSL 1.0.2l 2017 年 5 月 25 日。

我想将 chroot 与 OpenSSH 服务器的内部 SFTP 系统结合使用。我当前的设置似乎可以工作,但不幸的是排除了 chroot。

我设置了一个类似于的 OpenSSH 服务器这个问题在 Debian Stretch 机器上的 serverfault 上,其改编解释如下问题的答案

root@server # grep _NAME /etc/os-release | cut -d= -f2
"Debian GNU/Linux 9 (stretch)"

root@server # tail -9 /etc/ssh/sshd_config
# Use internal sftp server
Subsystem sftp internal-sftp

Match group sftponly
     AuthorizedKeysFile /etc/ssh/authorized_keys/%u
     ChrootDirectory /srv/sftp/%u
     AllowTcpForwarding no
     PermitTunnel no
     ForceCommand internal-sftp

root@server # stat -c "%a %A" /srv/sftp/sftpuser
700 drwx------

sshfs当使用以下设置时,尝试通过挂载目录失败(注意远程路径/):

user@client $ sshfs [email protected]:/ /mnt -o ssh_command=ssh\ -vvv,sshfs_debug,debug
[...]
debug1: Authentication succeeded (publickey).
Authenticated to server.com ([1.2.3.4]:22).
debug2: fd 4 setting O_NONBLOCK
debug3: fd 5 is O_NONBLOCK
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: send packet: type 1
packet_write_wait: Connection to 1.2.3.4 port 22: Broken pipe
read: Connection reset by peer

但是,当我注释掉该ChrootDirectory/etc/ssh/sshd_config并重新加载系统服务时,它就可以正常工作了sshd。之后,连接和访问目录没有任何问题,但根本的缺点是没有使用我想要的 chroot(注意远程路径/srv/sftp/sftpuser

user@client $ sshfs [email protected]:/srv/sftp/sftpuser /mnt; echo $?
0

我必须做哪些改变才能使 chroot 正常工作?

答案1

问题在于/srv/sftp/sftpuser目录的权限,正如在serverfault 上的这个答案

相关内容