Tentando configurar o chroot'd rsync

10

Estou tentando configurar um servidor de backup. Eu quero chroot cada usuário (cliente) para o seu diretório home, e só permitir que ele use sftp e rsync .

Eu rapidamente descobri que não era o único que tentava fazer algo assim, e achei este guia e segui-lo. Então agora eu tenho usuários chroot com apenas sftp.

Então eu descobri que o rsync precisa do ssh para aparecer na outra máquina, e que o sftp não é suficiente. Dar a cada usuário um login ssh é algo que eu queria evitar em primeiro lugar.

Alguém pode pensar em algumas possíveis soluções?

Obrigado,

Marcar

    
por Mark R. 06.07.2011 / 18:37

5 respostas

11

Uma solução sftp também requer um login ssh para todos, então você não perdeu nada aqui. Conceder acesso ssh não implica necessariamente acesso total ao shell, por exemplo, isso mostra como usar o arquivo ssh authorized_keys para permitir o backup via rsync enquanto limita os comandos disponíveis para apenas o receptor rsync.

Na verdade, se você optar pela autenticação baseada em chave, em vez da autenticação por senha (que deve), poderá executar tudo em uma conta de usuário em vez de exigir várias contas. Você usaria chaves para identificar usuários remotos e direcionar o receptor rsync para um diretório específico.

Algo parecido com isto, no seu arquivo authorized_keys :

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

Alguém que usa a chave privada user1 fará o backup em /tmp/user1 e alguém que usar a chave privada user2 fará o backup em /tmp/user2 . E assim por diante ...

    
por 06.07.2011 / 19:47
6

Execute o usual rsync do cliente para o servidor remoto, mas adicione outro switch detalhado: SSH -v e, em seguida, grep para Sending command . Você verá o comando de comando exato que o cliente está enviando para o servidor remoto:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

No meu caso, foi

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

Adicione isso como command="..." ao servidor remoto /home/USER/.ssh/authorized_keys file como @larsks mencionado. Adicione configurações de segurança adicionais, se necessário:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

Todos juntos:

command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

(Extraído do bom tutorial link )

    
por 01.01.2013 / 18:02
1

Você precisará fornecer algum tipo de acesso ao shell para poder usar o rsync, a menos que esteja se conectando diretamente ao servidor rsync - a porta padrão é 873 (TCP).

Na página man rysnc :

There are two different ways for rsync to contact a remote system: using a remote-shell program as the transport (such as ssh or rsh) or contacting an rsync daemon directly via TCP. The remote-shell transport is used whenever the source or destination path contains a single colon (:) separator after a host specification. Contacting an rsync daemon directly happens when the source or destination path contains a double colon (::) separator after a host specification, OR when an rsync:// URL is specified (see also the lqUSING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTIONrq section for an exception to this latter rule).

Para fornecer acesso limitado ao shell, considere o seguinte guia . (Nota: o link original está morto) Resumo:

This setup combines the best features from rsync, SSH, and chroot. Rsync provides the flexibility and efficiency in files transfer, SSH protects the data being transferred, and chroot protects data on the server from unauthorized access. The dummysh limits the access to rsync only.

While rsync server implements chroot, it lacks the SSH protection that is often required. Besides, opening an additional rsync server port presents a security risk and sometimes is not possible either technically or politically. Sftp and scp lack the flexibility and efficiency provided by rsync, especially when a directory tree is involved, such as a Web site.

Ou dê uma olhada no rssh (há um guia para configurar o rssh aqui ):

rssh is a restricted shell for use with OpenSSH, allowing only scp and/or sftp. It now also includes support for rdist, rsync, and cvs. For example, if you have a server which you only want to allow users to copy files off of via scp, without providing shell access, you can use rssh to do that.

    
por 06.07.2011 / 19:48
0

você pode escrever um shell que envolva o rsync.

veja a ideia geral aqui: link

na sua embalagem, você pode fazer o que quiser e talvez chroot o usuário.

No meu caso, eu precisava ativar a conta virtual usando o mesmo usuário * nix. Eu consigo fazer isso usando esse tipo de shell mais muitas linhas no arquivo authorized_keys. Eu não chrooted o usuário, mas eu adicionei um nível de pasta de usuário no comando do servidor rsync.

veja processar o usuário de maneira diferente usando a tecla ssh

    
por 14.01.2017 / 13:18
0

SFTP com recursos de Rsync, sem um shell

Você pode usar LFTP + SFTP em um ambiente chroot e alcançar o mesmos resultados do uso do rsync, sem fornecer ao usuário um shell ou fazer qualquer personalização pesada em ssh com wrappers.

Isso é mais seguro e pode ser substancialmente mais rápido.

    
por 10.06.2017 / 00:00