Как позволить SSH только с ключом RSA и SFTP с паролем и chroot?

На моем сервере LTS Ubuntu 16.04 я хотел бы сделать следующие вещи:

  • Включите некорневому администраторскому пользователю с sudo полномочиями к SSH в к серверу с помощью ключа RSA (никакой пароль)
  • Позвольте выбранным неадминистраторским пользователям загрузить файлы SFTP к их собственному корневому каталогу, с помощью пароля для входа в систему
  • Препятствуйте тому, чтобы неадминистраторские пользователи получили доступ к остальной части файловой системы

Я работаю с недавно-установленной-версией Ubuntu 16.04.3 LTS, таким образом, все находится в его условии фабрики по умолчанию.

Я считал этот вопрос и ответы тщательно, но я не смог найти решение.

Я создал a nonrootadmin пользователь с sudo полномочиями.

Я создал a nonadminsftp пользователь, который является членом sftpaccess группа. /home/nonadminsftp/ каталог похож на это:

$ ls -al ~nonadminsftp
total 24
drwxr-xr-x 3 root         root       4096 Oct 25 00:52 .
drwxr-xr-x 5 root         root       4096 Oct 24 22:29 ..
-rw-r--r-- 1 nonadminsftp sftpaccess  220 Sep  1  2015 .bash_logout
-rw-r--r-- 1 nonadminsftp sftpaccess 3771 Sep  1  2015 .bashrc
drwxr-xr-x 3 nonadminsftp sftpaccess 4096 Oct 25 00:50 ftp
-rw-r--r-- 1 nonadminsftp sftpaccess  655 May 16 13:49 .profile

Их соответствующие записи в /etc/passwd следующие:

nonrootadmin:x:1000:1000::/home/nonrootadmin:/bin/bash
nonadminsftp:x:1002:1002::/home/nonadminsftp:/usr/sbin/nologin

Изменения я сделал к /etc/sshd/sshd_config файл следующие:

PermitRootLogin no
#PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp
Match group sftpaccess
#ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

Решение, которое я видел, предлагает не комментировать 3 из этих строк, но я обнаруживаю что:

  • PasswordAuthentication no препятствует тому, чтобы nonadminsftp пользователь соединился с паролем:

    $ sftp nonadminsftp@mydomain.com
    Permission denied (publickey).
    Couldn't read packet: Connection reset by peer
    
  • ChrootDirectory %h препятствует тому, чтобы nonrootadmin пользователь соединился вообще:

    $ ssh nonrootadmin@mydomain.com
    packet_write_wait: Connection to 12.34.56.78 port 22: Broken pipe`
    
  • ForceCommand internal-sftp препятствует тому, чтобы nonrootadmin получил доступ SSH:

    $ ssh nonrootadmin@mydomain.com
    This service allows sftp connections only.
    Connection to mydomain.com closed.`
    

С этими прокомментированными строками:

  • nonrootadmin действительно имеет доступ SSH с помощью ключа RSA
  • nonadminsftp может соединить использование клиента FTP, такого как FileZilla

НО:

  • nonadminsftp не chrootредактор к /home/nonadminsftp каталог
  • nonrootadmin может войти в систему с паролем

Что я пропускаю?

Заранее спасибо

1
задан 25 October 2017 в 12:26

1 ответ

Благодаря @muru теперь работает следующая конфигурация:

PermitRootLogin no
PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp

Match group sftpaccess
# The following directives only apply to users in sftpaccess
PasswordAuthentication yes
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Я ранее добавил nonrootadmin к sftpaccess группа. После того, как я удалил этого пользователя из группы...

$ sudo gpasswd -d nonrootadmin sftpaccess
$ getent group ftpaccess
ftpaccess:x:1002:nonadminsftp

... nonrootadmin может теперь использовать SSH.

2
ответ дан 7 December 2019 в 13:29

Другие вопросы по тегам:

Похожие вопросы: