Como criar o acesso SFTP ao chroot em um servidor Archlinux?

1

Eu segui estas instruções na ArchWiki e GeekStuff para configurar um usuário que só pode acessar o servidor via SFTP (SSH), mas sem o Shell ( /bin/false ) em um ambiente chroot de seu home dir.

Nada muito mais especial, mas simplesmente não funciona, fico recebendo access denied messages quando tento logar. Aqui está o que eu tentei até agora:

Usuário e Grupo SFTP

O usuário, aqui: user , é membro do grupo sftp . O diretório inicial é /srv/sftp/user . O shell está desativado por meio de /bin/false

Entrada do usuário:

0 ✓ root@host ~ $ grep -i user /etc/passwd
user:x:1002:1000::/srv/sftp/user:/bin/false

Entrada de grupo:

0 ✓ root@host ~ $ grep -i sftp /etc/group
sftp:x:1000:user

Grupos de usuários:

0 ✓ root@host ~ $ groups user
users sftp

Configuração do Diretório Inicial

O diretório inicial e todos os diretórios acima são de propriedade de root :

0 ✓ root@host ~ $ ls -lsha /srv
total 20K
4,0K drwxr-xr-x  6 root root 4,0K  4. Apr 17:00 ./
4,0K drwxr-xr-x 17 root root 4,0K  4. Apr 15:08 ../
4,0K dr-xr-xr-x  2 root ftp  4,0K 30. Sep 2015  ftp/
4,0K drwxr-xr-x  4 root root 4,0K  4. Apr 19:30 http/
4,0K drwxr-xr-x  5 root root 4,0K  4. Apr 17:00 sftp/
0 ✓ root@host ~ $ ls -lsha /srv/sftp
total 12K
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 17:00 ./
4,0K drwxr-xr-x 6 root root 4,0K  4. Apr 17:00 ../
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 19:34 user/
0 ✓ root@host ~ $ ls -lsha /srv/sftp/user
total 16K
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 19:34 ./
4,0K drwxr-xr-x 5 root root 4,0K  4. Apr 17:00 ../
4,0K drwxrwxr-x 6 user sftp 4,0K  4. Apr 20:28 files/
4,0K drwxrwxr-x 2 user sftp 4,0K  4. Apr 19:33 log/

Configuração SSHD

O final da configuração do SSHD:

0 ✓ root@host ~ $ tail -n16 /etc/ssh/sshd_config 
# override default of no subsystems
### Subsystem   sftp    /usr/lib/ssh/sftp-server
Subsystem       sftp    internal-sftp

### This section must be placed at the very end of sshd_config
#   This means that all users in the ‘sftp’ group will be chroot’d
#   to their home directory, where they only will be able to run
#   internal SFTP processes.
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no
    PasswordAuthentication yes

Status do SSHD:

0 ✓ root@host ~ $ systemctl status sshd
● sshd.service - OpenSSH Daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mo 2016-04-04 23:48:58 CEST; 1 day 15h ago
 Main PID: 9272 (sshd)
    Tasks: 3 (limit: 512)
   CGroup: /system.slice/sshd.service
           ├─ 9272 /usr/bin/sshd -D
           ├─17597 sshd: user [priv]  
           └─17598 sshd: user [net]   
[...]
Apr 06 15:05:24 host sshd[17597]: Failed password for user from 93.***.***.136 port 45516 ssh2

Versão do OpenSSH:

0 ✓ root@host ~ $ pacman -Q openssh
openssh 7.2p2-1

Mais informações do sistema

Versão do kernel:

0 ✓ root@host ~ $ uname -a
Linux host 4.4.5-1-ARCH #1 SMP PREEMPT Thu Mar 10 07:38:19 CET 2016 x86_64 GNU/Linux

Tentando se conectar

Para garantir que a senha esteja correta, altero para 1234 :

0 ✓ root@host ~ $ passwd user
Enter new UNIX password: 1234
Retype new UNIX password: 1234
passwd: password updated successfully

Agora teste com sftp :

1 ✗ me@client ~ $ sftp -P12345 user@host
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied, please try again.
user@host's password: 1234
Permission denied (publickey,password).
Couldn't read packet: Connection reset by peer

Isso está nos registros, o que não ajuda muito:

0 ✓ root@host ~ $ journalctl -n5
Apr 06 15:34:38 host passwd[25269]: pam_unix(passwd:chauthtok): password changed for user
Apr 06 15:35:26 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:30 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:33 host sshd[25853]: Failed password for user from 93.***.***.136 port 45834 ssh2
Apr 06 15:35:34 host sshd[25853]: Connection closed by 93.***.***.136 port 45834 [preauth]

O que estou fazendo de errado? O que eu perdi? Como criar acesso SFTP ao chroot em um servidor Archlinux sem acesso ao shell?

    
por Afri 06.04.2016 / 15:46

1 resposta

0

Ok, o ponto que eu perdi tem algo a ver com o shell. Tentei fazer o login com /bin/false , conforme descrito em muitos manuais. Mas isso não funcionou.

Como @Jakuje apontou, alterar isso para /bin/sh para fins de teste permitiu que eu fizesse login via sftp . Viva! E o fato interessante que eu também não sabia: internal-sftp já impede ssh login.

No entanto, quem ainda quer o /bin/false ou /bin/nologin como shell, eis o que descobri, finalmente. Confira se os shells estão disponíveis em /etc/shells :

0 ✓ root@host ~ $ cat /etc/shells 
#
# /etc/shells
#

/bin/sh
/bin/bash

# End of file

Não admira que não funcionou! false e nologin não estão definidos! Adicioná-los manualmente funcionou para mim:

0 ✓ root@host ~ $ cat /etc/shells 
#
# /etc/shells
#

/bin/sh
/bin/bash
/bin/false
/bin/nologin

# End of file

Agora, basta alterar o shell, com chsh :

0 ✓ root@host ~ $ chsh -s /bin/false user
Changing shell for user.
Shell changed.

Agora, sftp funciona em um ambiente de raiz de mudança e sem acesso ao shell.

    
por 14.04.2016 / 13:45