Como tornar o sshfs e o rsync da conta do ssh apenas?

3

Gostaria de fazer uma conta ssh capaz de fazer duas coisas:

  • montagem (pode ser um) diretório via sshfs
  • realizando backup e recuperação de seus diretórios desejados usando rsync

Adoraria utilizar ssh para rsync purpose sem executar% extrarsync server. (A questão principal é a disponibilidade de uma porta apenas para ssh . Se não for possível ou simplificar muito as coisas, eu posso considerar sshfs tunneling).

Pergunta: até o momento alcancei apenas sftp de contas. No entanto, eles não têm rsync over ssh , o que eu gostaria de adicionar.

TL; DR: até o momento, tentei entrar na abordagem de conta "somente ftp" com a abordagem "wrapper de comandos permitidos" via script personalizado apontado por ForceCommand option - esses detalhes são descritos abaixo.

Como alcancei a conta sftp apenas até agora

Até o momento, tive sucesso com a configuração da conta ssh a ser limitada a sftp após o tutorial: link

Em resumo, isso foi conseguido principalmente seguindo sshd_config change:

Subsystem sftp internal-sftp

Match group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

E fazendo a conta pertencer apenas a sftponly group:

username=LIMITED_USER
sudo useradd -d /home/${username} -s /usr/lib/sftp-server -M -N -g sftponly ${username}
sudo passwd ${username}
sudo mkdir -p /home/${username}/uploads /home/${username}/.ssh
sudo chown ${username}:sftponly /home/${username}/uploads /home/${username}/.ssh
sudo chmod 700 /home/${username}/.ssh

Adicionada /usr/lib/sftp-server a /etc/shells .

Como os usuários têm diretórios pessoais criptografados no estilo do Ubuntu Server, eu tenho suas chaves autorizadas em locais diferentes (via /etc/ssh/sshd_config , AuthorizedKeysFile /etc/ssh/users_configs/%u/authorized_keys ):

sudo mkdir /etc/ssh/users_configs/${username}
cd /etc/ssh/users_configs/${username}
sudo vim /etc/ssh/users_configs/${username}/authorized_keys
# Here copy desired signature for the purpose from the client
sudo chmod 700 /etc/ssh/users_configs/${username}/authorized_keys
sudo chown ${username}:sftponly /etc/ssh/users_configs/${username}/authorized_keys

Problemas com rsync e até agora tenta com "ForceCommand"

Enquanto a montagem via sshfs funciona bem, Eu me deparei com o seguinte problema: como permitir que o usuário também rsync ?

Eu tentei eliminar ChrootDirectory e alterar ForceCommand para algum tipo de "filtro de comando" (ou seja, permitindo apenas um subconjunto de comandos), como em: link :

$ grep -B 1 ForceCommand  /etc/ssh/sshd_config 
Match group sftponly
    ForceCommand /etc/ssh/wrapper.sh
$ sudo cat /etc/ssh/wrapper.sh
#!/bin/sh
(
echo -n '# '
date
echo $SSH_ORIGINAL_COMMAND
) >> /home/"${USER}"/.ssh_commands_history
case "$SSH_ORIGINAL_COMMAND" in
    "allowed_command")
        eval $SSH_ORIGINAL_COMMAND
        ;;
    *)
        echo ERROR;
        exit 1
        ;;
esac
$ sudo touch /home/LIMITED_USER/.ssh_commands_history
$ sudo chown LIMITED_USER:sftponly /home/LIMITED_USER/.ssh_commands_history
$ sudo chmod 0700 /home/LIMITED_USER/.ssh_commands_history

mas afinal não sai. (Eu executo ssh u@srv ps e fica preso em vez de retornar a saída de ps como no exemplo mencionado. sshd -ddd nor ssh -v parece útil aqui).

Portanto: Gostaria de criar contas que serão usadas para sshfs e rsyncing . Como fazê-los funcionar e limitados para aumentar a segurança?

    
por Grzegorz Wierzowiecki 23.04.2016 / 02:59

2 respostas

1

O filtro

ForceCommand is não , mas o comando forçado, independentemente da linha de comando, como o nome propõe. rsync requer a execução de comandos diferentes (até onde eu sei ... sim, sshd -ddd e ssh -vvv seriam úteis para fornecer).

Uma possibilidade é deixar o ChrootDirectory , remover ForceCommand e copiar rsync , talvez alguns shell e suas dependências ( ldd /usr/bin/rsync ) para chroot . Não é ideal, mas deve fazer o trabalho e cercar o usuário do sistema de arquivos.

    
por 23.04.2016 / 09:59
1

Eu encontrei onde estava o problema!

Quando eu criei o script wrapper, eu perdi o que está no bash, e através de outro tutorial, eu configurei o shell padrão como /usr/lib/sftp-server .

Depois, o script do wrapper começou a funcionar e eu registrei quais comandos preciso permitir.

Solução:

1. shell retornado (de /usr/lib/sftp-server ), então o wrapper pode funcionar: usermod -s /bin/bash LIMITED_USER

2.Adicionados os comandos permitidos apropriados ao wrapper script

'internal-sftp')
/usr/lib/sftp-server
;;
'/bin/true' \
|'rsync --server --sender -logDtpre.iLsfxC . /home/LIMITED_USER' \
|'rsync --server --sender -vlogDtpre.iLsfxC . /home/LIMITED_USER')
eval $SSH_ORIGINAL_COMMAND 2>>${LOGFILE}
exit $?
;;

Para comandos exatos que você pode permitir, por exemplo Comandos rsync, apenas tente executá-los e depois copie de /user/LIMITED_USER/.ssh_commands_history , onde eles são registrados pelo script wrapper.

P.S. Eu fiz disso um wiki da comunidade, então espero que isso possa se tornar mais útil para outras pessoas que gostariam de fazer contas ssh sfs + rsync capazes e limitadas.

    
por 23.04.2016 / 10:39