Como permitir somente SSH com chave RSA e SFTP com senha e chroot?

1

No meu servidor Ubuntu 16.04 LTS, gostaria de fazer o seguinte:

  • Ativar um usuário administrador não-root com privilégios sudo para o SSH no servidor usando uma chave RSA (sem senha)
  • Permitir que usuários não administradores selecionados carreguem arquivos pelo SFTP para seu próprio diretório inicial, usando uma senha para efetuar login
  • Impede que os usuários não administradores tenham acesso ao restante do sistema de arquivos

Estou trabalhando com uma versão recentemente instalada do Ubuntu 16.04.3 LTS, então tudo está em sua condição padrão de fábrica.

Eu li esta questão e as respostas com cuidado, mas não consegui encontrar uma solução.

Eu criei um usuário nonrootadmin com privilégios sudo.

Eu criei um usuário nonadminsftp que é membro do grupo sftpaccess . O diretório /home/nonadminsftp/ se parece com isto:

$ 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

Suas respectivas entradas em /etc/passwd são as seguintes:

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

As alterações que fiz no arquivo /etc/sshd/sshd_config são as seguintes:

PermitRootLogin no
#PasswordAuthentication no

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

A solução que vi propõe descomentar 3 dessas linhas, mas descubro que:

  • PasswordAuthentication no impede que o usuário nonadminsftp se conecte a uma senha:

    $ sftp [email protected]
    Permission denied (publickey).
    Couldn't read packet: Connection reset by peer
    
  • ChrootDirectory %h impede que o usuário nonrootadmin se conecte:

    $ ssh [email protected]
    packet_write_wait: Connection to 12.34.56.78 port 22: Broken pipe'
    
  • ForceCommand internal-sftp impede que o nonrootadmin obtenha acesso ao SSH:

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

Com estas linhas comentadas:

  • o nonrootadmin tem acesso SSH usando uma chave RSA
  • nonadminsftp pode se conectar usando um cliente FTP, como o FileZilla

MAS:

  • nonadminsftp não é chroot ed para o diretório /home/nonadminsftp
  • nonrootadmin pode efetuar login com uma senha

O que eu sinto falta?

Obrigado antecipadamente

    
por James Newton 25.10.2017 / 11:14

1 resposta

2

Graças a @muru, a configuração a seguir está funcionando agora:

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

Eu adicionei anteriormente nonrootadmin ao grupo sftpaccess . Depois que eu removi este usuário do grupo ...

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

... nonrootadmin agora pode usar o SSH.

    
por James Newton 25.10.2017 / 12:26