Copie o arquivo do host Windows para o host Linux via Rsync e, em seguida, configure as permissões

1

Então eu tenho um servidor SFTP do Windows (SFTPSERVER), que recebe arquivos (duh).

Eu então preciso enviar esses arquivos para um servidor Linux (AD autenticado no meu domínio) em outro lugar da minha organização.

Então essa parte eu tenho para baixo.

rsync -vzO --remove-source-files -e "ssh -i /cygdrive/c/cygwin/home/transferuser/privatekey.pri" /cygdrive/d/SFTPPATH/SFTPUSER/* [email protected]:/path/to/files

O problema é que eu obtenho arquivos no servidor linux de propriedade do transferuser. Eles precisam ser propriedade de processuser e processgroup no servidor de destino. Como esses arquivos chegam de forma irregular e precisam ser copiados após a conclusão do upload, um cronjob do servidor de destino não é viável para mim. Eu tentei scripting um chown, mas o usuário empurrando os arquivos (transferuser) não parece ter as permissões relevantes. Dado que eu não quero dar a esta conta direitos sudo no servidor de destino, quais opções eu tenho aqui?

    
por Driftpeasant 29.10.2014 / 21:12

1 resposta

0

No seu arquivo /etc/sudoers , você pode conceder permissões para um comando muito específico. Nos meus sudoers eu tenho o seguinte:

%student ALL = /bin/chgrp faculty *, /bin/chmod 2770 *

Isso é provavelmente muito geral para o que você quer. Você provavelmente quer algo mais como:

transferuser ALL = /bin/chown processuser:processgroup /path/to/files/*

Você não está dando carta branca - o usuário só pode emitir uma classe de comandos muito específica.

Você também pode conceder ao processuser essas permissões e incorporar os comandos em qualquer script que o processamento no receptor finalize.

Aqui está uma abordagem completamente diferente que não envolve o sudo. Você pode executar um cron job uma vez por minuto no computador de destino para verificar se há novos arquivos e usá-los conforme necessário.

No crontab do root:

* * * * * find /path/to/files/ -user transferuser -exec chown processuser:processgroup {} \;

Isso localizará todos os arquivos que atualmente pertencem a transferuser e chown e ignorarão todos os arquivos que já foram corrigidos. Como find já é recursivo, você não precisa se preocupar com subdiretórios, eles serão tratados. A única questão é se uma vez por minuto é suficiente.

    
por 29.10.2014 / 21:45