restrinja rsync (ou bash script) a um diretório

3

Depois de um mau acidente com o rsync excluindo arquivos incorretos devido ao parâmetro de destino incorreto, quero restringir o rsync (ou o script bash que o executa) para poder excluir / modificar arquivos apenas em um determinado diretório. Eu pensei em um dos dois:

  1. crie e execute rsync / script em um usuário que tenha permissões apenas para esse diretório. O problema aqui é: Como eu uso / crie um usuário desse tipo dinamicamente? (Isso faz parte de um script de construção que deve "apenas executar" para outros usuários).

  2. verifique se os caminhos de destino fornecidos ao rsync estão em um determinado diretório. A direção parece estar usando o comando test , mas não consegui descobrir como usá-lo corretamente, e não é tão seguro, já que o teste do parâmetro path ainda pode sair de sincronia com o parâmetro de caminho real sendo correr, então eu acho que (1) é mais robusto.

por snowdragon 19.09.2013 / 00:25

2 respostas

1

Ao usar o auth do pubkey, você pode aplicar esse comportamento com a ajuda do arquivo authorized_keys e rrsync, que faz parte do rsync. Geralmente é gzipped no diretório de documentos rsync, por exemplo, em uma caixa Debian em: /usr/share/doc/rsync/scripts/rrsync.gz

Na máquina de destino, você precisa:

  • Extraia o script para algum local, por exemplo " /usr/bin " ou " ~/bin "
  • Configurar uma chave autorizada em " ~/.ssh/authorized_keys "
  • Prefixe a chave com o conjunto de opções de comando:

    command="/usr/bin/rrsync /foo/bar/baz" ssh-rsa AAAA[...]

Ao rsyncing com um conjunto rootdir, não se esqueça de modificar o caminho de destino para ser relativo ao rootdir fornecido.

    
por 13.03.2014 / 13:14
0

Se você pode iniciar o daemon do rsync no destino, você pode predefinir quais diretórios (chamados módulos) você permite acesso. Basta editar o /etc/rsyncd.conf e adicionar algo como:

[mydirectory]
        path = /tmp

Agora você pode transferir usando o protocolo rsync usando o nome do alias (módulo) em vez do caminho do diretório bruto:

rsync --delete /origin/dir rsync://$DEST_HOST/mydirectory

/ mydirectory será traduzido para / tmp , e se você digitar errado mydirectory você receberá um erro em vez de bagunçar os arquivos.

Este foi provavelmente o exemplo mais simples, mas você também pode configurar a autenticação e muitos outros parâmetros. Você pode encontrar mais informações aqui:

link

    
por 29.10.2013 / 15:19