sftp chroot目录上的公钥授权

时间:2014-05-03 19:30:30

标签: linux ssh sftp chroot

我想将公钥授权添加到我的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

请帮忙。

3 个答案:

答案 0 :(得分:15)

我尝试了这个解决方案(将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目录)必须存在于chroot目录的/ etc / passwd,外部定义的主目录位置。

例如(使用OP usernames / uids):
/ etc / passwd中:

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

创建由root拥有的目录/home/backup 创建目录/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 /sftp/backup/home/backup/.ssh

答案 1 :(得分:8)

问题已解决。

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

答案 2 :(得分:1)

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

您可以通过在用户的主目录下创建其chroot来执行此操作。例如,在/home中,将chroot设置为sshd_config

/home/<user>/sftp

像以前一样,确保Match Group sftphome ChrootDirectory /home/%u/sftp ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no 由root拥有,并将.ssh密钥放置在/home/<user>中,以使用户具有读取权限。现在创建/home/<user>/.ssh,所有目录均由root拥有,但最后一个/home/<user>/sftp/home/<user>应该由用户拥有。最后,确保用户的主目录位于/ etc / passwd中的<user>

现在,当用户登录时,根据/home/<user>/home/<user>/.ssh中查找ssh密钥,将chroot写入/etc/passwd,然后将/home/<user>/sftp放入chroot的cd内部 中。换句话说,用户的远程工作目录将显示为/home/<user>

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

可以省略/目录,创建sftp/并将chroot插入/home/<user>/home/<user>,但这可能会引起混淆,因为/home/<user>目录和其他文件将会显示为他们的.ssh中的用户。 /目录使内容保持整洁。

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