【问题标题】:Public key authorization on sftp chroot directorysftp chroot 目录上的公钥授权
【发布时间】:2014-06-20 08:43:18
【问题描述】:

我想将公钥授权添加到我的 sftp chroot 目录,但我总是得到:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/test/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
Couldn't read packet: Connection reset by peer

Chroot 之所以有效,是因为可以使用密码进行授权。 我在这个主机上有其他没有 chroot 的帐户,它可以使用这个密钥。 我试了很多次,还是不行。

在 auth.log 中的服务器上只有: 连接被 xxx [preauth] 关闭

这是我的目录:

ls -laR /sftp/
/sftp/:
total 12
drwxr-xr-x  3 root root 4096 May  3 16:55 .
drwxr-xr-x 23 root root 4096 May  3 14:46 ..
drwxr-xr-x  3 root root 4096 May  3 16:45 backup

/sftp/backup:
total 12
drwxr-xr-x 3 root     root      4096 May  3 16:45 .
drwxr-xr-x 3 root     root      4096 May  3 16:55 ..
drwxr-xr-x 3 backup sftpusers 4096 May  3 16:55 incoming

/sftp/backup/incoming:
total 12
drwxr-xr-x 3 backup sftpusers 4096 May  3 16:55 .
drwxr-xr-x 3 root     root      4096 May  3 16:45 ..
drwx------ 2 backup sftpusers 4096 May  3 21:06 .ssh

/sftp/backup/incoming/.ssh:
total 12
drwx------ 2 backup sftpusers 4096 May  3 21:06 .
drwxr-xr-x 3 backup sftpusers 4096 May  3 16:55 ..
-rw------- 1 backup sftpusers  391 May  3 21:06 authorized_keys

我的用户:

backup:x:1002:1003::/incoming:/usr/sbin/nologin

我的 ssh 配置:

Match Group sftpusers
  ChrootDirectory /sftp/%u
  AuthorizedKeysFile  /sftp/backup/incoming/.ssh/authorized_keys
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

请帮忙。

【问题讨论】:

    标签: linux ssh sftp chroot


    【解决方案1】:

    问题已解决。

    我已经改变了它: AuthorizedKeysFile /sftp/backup/incoming/.ssh/authorized_keys 到: AuthorizedKeysFile /sftp/%u/.ssh/authorized_keys

    【讨论】:

    • 感谢您的跟进。
    【解决方案2】:

    我尝试了这个解决方案(将 AuthorizedKeysFile 放入 Match 块中)并且 sshd -T 抱怨:

    /etc/ssh/sshd_config line 153: Directive 'AuthorizedKeysFile' is not allowed within a Match block
    

    (RHEL 6.6,openssh 5.3p1-104)

    解决方案:authorized_keys 文件(以及用户的 .ssh 目录)必须存在于 /etc/passwd 定义的主目录位置,在 chroot 目录之外

    例如(使用 OP 用户名/uid):
    /etc/passwd:

    backup:x:1002:1003::/home/backup:/sbin/nologin
    

    创建目录/home/backup,由root拥有
    创建目录/home/backup/.ssh,将所有权更改为备份,chmod 700 /home/backup/.ssh
    将authorized_keys文件复制到/home/backup/.sshchmod 400 authorized_keys

    ls -laR /home
    
    /home:
    total 12
    drwxr-xr-x 3 root     root      4096 Jul  9 12:25 .
    drwxr-xr-x 3 root     root      4096 Sep 22 2014  ..
    drwxr-xr-x 3 root     root      4096 Jul  9 12:25 backup
    
    /home/backup:
    total 12
    drwxr-xr-x 3 root     root      4096 Jul  9 12:25 .
    drwxr-xr-x 3 root     root      4096 Jul  9 12:25 ..
    drwx------ 3 backup   sftpusers 4096 Jul  9 12:28 .ssh
    
    /home/backup/.ssh:
    total 12
    drwx------ 3 backup   sftpusers 4096 Jul  9 12:28 .
    drwxr-xr-x 3 root     root      4096 Jul  9 12:25 ..
    -r-------- 3 backup   sftpusers 391  Jul  9 12:29 authorized_keys 
    

    /etc/ssh/sshd_config 变为:

    Match Group sftpusers
      ChrootDirectory /sftp/%u
      ForceCommand internal-sftp
      AllowTcpForwarding no
      X11Forwarding no
    

    那么chroot目录结构是:

    ls -laR /sftp/
    /sftp/:
    total 12
    drwxr-xr-x  3 root root 4096 May  3 16:55 .
    drwxr-xr-x 23 root root 4096 May  3 14:46 ..
    drwxr-xr-x  3 root root 4096 May  3 16:45 backup
    
    /sftp/backup:
    total 12
    drwxr-xr-x 3 root     root      4096 May  3 16:45 .
    drwxr-xr-x 3 root     root      4096 May  3 16:55 ..
    drwxr-xr-x 3 backup   sftpusers 4096 May  3 16:55 incoming
    drwxr-xr-x 3 root     root      4096 May  3 16:55 home
    
    /sftp/backup/incoming:
    total 12
    drwxr-xr-x 3 backup sftpusers 4096 May  3 16:55 .
    drwxr-xr-x 3 root     root      4096 May  3 16:45 ..
    
    /sftp/backup/home:
    total 12
    drwxr-xr-x 3 root     root      4096 May  3 16:55 .
    drwxr-xr-x 3 root     root      4096 May  3 16:45 ..
    drwx------ 2 backup   sftpusers 4096 May  3 21:06 backup
    
    /sftp/backup/home/backup:
    total 12
    drwx------ 3 backup   sftpusers 4096 May  3 21:06 .
    drwxr-xr-x 3 root     root      4096 May  3 16:55 ..
    

    注意:/sftp/backup/home/backup 是空的,它只是用来提供一个看起来像非 chroot 的路径 /home/backup -- .ssh 目录是 /home/backup/.ssh 不是 @987654336 @

    【讨论】:

    • 值得一提的是,SELinux 可以在 Redhat 发行版上咬你一口。我发现我需要运行 restorecon -R /home/backup/.ssh 来修复我在 sshd 调试输出中看到的“权限被拒绝”错误。
    【解决方案3】:

    Stephen Buchanan's answer(解决 RHEL6 无法在 Match 块中设置 AuthorizedKeys 的问题)将密钥拆分为 /home,将内容拆分为 /sftp,但可以将所有内容放在 /home 下。

    您可以通过在用户的主目录下创建用户的 chroot 来做到这一点。例如,在sshd_config 中,将chroot 设置为/home/<user>/sftp

    Match Group sftphome
      ChrootDirectory /home/%u/sftp
      ForceCommand internal-sftp
      AllowTcpForwarding no
      X11Forwarding no
    

    和以前一样,确保/home/<user> 归根用户所有,并将 .ssh 密钥放在/home/<user>/.ssh 中,以便用户具有读取权限。现在创建/home/<user>/sftp/home/<user>,所有目录都归root所有,除了最后一个<user>,它应该归用户所有。最后,确保用户的主目录是/etc/passwd 中的/home/<user>

    现在当用户登录时,根据/etc/passwd/home/<user>/.ssh 中查找ssh 密钥,在/home/<user>/sftp 中完成一个chroot,然后在/home/<user> 中完成一个cd 在 chroot 内部。也就是说,用户的远程工作目录将显示为/home/<user>

    您可以选择在/home/<user>/sftp/home/<user> 下或/home/<user>/sftp 下的任何位置绑定挂载目录(从用户的角度来看是/)。

    可以省略sftp/ 目录,创建/home/<user>/home/<user> 和chroot 到/home/<user>,但这可能会造成混淆,因为.ssh 目录和任何其他文件都会在用户的/ 中显示. sftp/ 目录保持干净。

    注意:实际上,如果缺少用户的主目录,sftp 通常只会将cd 转换为/。您可能通过不在 chroot 中创建 /home/<user> 来滥用此属性,因此用户从 / 而不是 /home/<user> 开始。这有点脆弱,但可以派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2013-07-23
      • 2017-07-02
      • 1970-01-01
      • 2014-09-27
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多