web-dev-qa-db-fra.com

Comment autoriser SSH uniquement avec une clé RSA et SFTP avec un mot de passe et un chroot?

Sur mon serveur Ubuntu 16.04 LTS, j'aimerais effectuer les tâches suivantes:

  • Activer un utilisateur administrateur non root avec les privilèges Sudo pour SSH sur le serveur à l'aide d'une clé RSA (pas de mot de passe)
  • Autoriser les utilisateurs non administrateurs sélectionnés à télécharger des fichiers SFTP vers leur propre répertoire de base, en utilisant un mot de passe pour se connecter
  • Empêcher les utilisateurs non-administrateurs d'accéder au reste du système de fichiers

Je travaille avec une version fraîchement installée d'Ubuntu 16.04.3 LTS, de sorte que tout est dans son état d'usine par défaut.

J'ai lu cette question et les réponses avec soin, mais je n'ai pas été en mesure de trouver une solution.

J'ai créé un utilisateur nonrootadmin avec les privilèges Sudo.

J'ai créé un utilisateur nonadminsftp membre du groupe sftpaccess. Le répertoire /home/nonadminsftp/ ressemble à ceci:

$ 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

Leurs entrées respectives dans /etc/passwd sont les suivantes:

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

Les modifications que j'ai apportées au fichier /etc/sshd/sshd_config sont les suivantes:

PermitRootLogin no
#PasswordAuthentication no

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

La solution que j'ai vue propose de ne pas commenter trois de ces lignes, mais je découvre que:

  • PasswordAuthentication no empêche l'utilisateur nonadminsftp de se connecter avec un mot de passe:

    $ sftp [email protected]
    Permission denied (publickey).
    Couldn't read packet: Connection reset by peer
    
  • ChrootDirectory %h empêche l'utilisateur de ne pas se connecter du tout:

    $ ssh [email protected]
    packet_write_wait: Connection to 12.34.56.78 port 22: Broken pipe`
    
  • ForceCommand internal-sftp empêche le non-root administrateur d'accéder à SSH:

    $ ssh [email protected]
    This service allows sftp connections only.
    Connection to mydomain.com closed.`
    

Avec ces lignes commentées:

  • nonrootadmin a un accès SSH à l'aide d'une clé RSA
  • nonadminsftp peut se connecter à l'aide d'un client FTP tel que FileZilla

MAIS:

  • nonadminsftp n'est pas chrooted dans le répertoire /home/nonadminsftp
  • nonrootadmin peut se connecter avec un mot de passe

Qu'est-ce qui me manque?

Merci d'avance

1
James Newton

Grâce à @muru, la configuration suivante fonctionne maintenant:

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

J'avais précédemment ajouté nonrootadmin au groupe sftpaccess. Après avoir supprimé cet utilisateur du groupe ...

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

... nonrootadmin peut maintenant utiliser SSH.

2
James Newton