我正在运行 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 上的这个答案。