Авторизация с открытым ключом в каталоге chroot sftp

Я хочу добавить авторизацию с открытым ключом в мою папку chroot sftp, но всегда получаю:

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

Пожалуйста помоги.


person user3461823    schedule 03.05.2014    source источник


Ответы (3)


Я попробовал это решение (поместив 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 / uids):
/ 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/.ssh, chmod 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

person Stephen Buchanan    schedule 17.07.2015
comment
Стоит отметить, что SELinux может вас укусить в дистрибутивах Redhat. Я обнаружил, что мне нужно запустить restorecon -R /home/backup/.ssh, чтобы исправить ошибку «Permission denied», которую я видел в отладочных данных sshd. - person IanB; 06.10.2015

Проблема решена.

Я изменил его: AuthorizedKeysFile /sftp/backup/incoming/.ssh/authorized_keys на: AuthorizedKeysFile /sftp/%u/.ssh/authorized_keys

person user3461823    schedule 03.05.2014
comment
Спасибо за ответ. - person BillMan; 27.02.2015

Ответ Стивена Бьюкенена (который работает с неспособностью RHEL6 установить AuthorizedKeys в блоке Match) разбивает ключи на /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> является root, и поместите ключи .ssh в /home/<user>/.ssh, чтобы у пользователя были разрешения на чтение. Теперь создайте /home/<user>/sftp/home/<user> со всеми каталогами, принадлежащими пользователю root, за исключением последнего <user>, который должен принадлежать пользователю. Наконец, убедитесь, что домашний каталог пользователя /home/<user> в / etc / passwd.

Теперь, когда пользователь входит в систему, ключ ssh ищется в /home/<user>/.ssh согласно /etc/passwd, выполняется chroot в /home/<user>/sftp, а затем cd выполняется в /home/<user> внутри chroot. Другими словами, удаленный рабочий каталог пользователя будет отображаться как /home/<user>.

При желании вы можете привязать каталоги монтирования под /home/<user>/sftp/home/<user> или где угодно под /home/<user>/sftp (что / с точки зрения пользователя).

Можно опустить каталог sftp/, создать /home/<user>/home/<user> и chroot в /home/<user>, но это может сбивать с толку, поскольку каталог .ssh и любые другие файлы будут отображаться для пользователя в их /. Каталог sftp/ сохраняет чистоту.

Примечание. На практике, если домашний каталог пользователя отсутствует, sftp обычно просто cd в /. Вы можете злоупотребить этим свойством, не создавая /home/<user> внутри chroot, поэтому пользователь начинает с / вместо /home/<user>. Это немного хрупко, но может пригодиться.

person jursetto    schedule 10.01.2020