Ssh

在 openssh-server 中使用基於密鑰的身份驗證時如何正確 chroot

  • May 6, 2018

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

我想將 chroots 與 OpenSSH 伺服器的內部 SFTP 系統結合使用。我目前的設置似乎有效,不幸的是不包括 chroot。

我在 Debian Stretch 機器上的 serverfault 上設置了一個類似於這個問題的 OpenSSH 伺服器,並在問題的答案中解釋了改編:

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 sftpuser@server.com:/ /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 no-more-sessions@openssh.com
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 sftpuser@server.com:/srv/sftp/sftpuser /mnt; echo $?
0

我必須改變什麼才能使 chroot 工作?

問題是/srv/sftp/sftpuser目錄的權限,正如serverfault 的這個答案中已經解釋的那樣。

引用自:https://serverfault.com/questions/910951