Copiando a pasta de um servidor Unix para outro, atualizando os IDs dos proprietários

2

Estou usando o método descrito aqui para copiar um diretório de um servidor Unix para outro (ambos do Ubuntu 14.04) :

rsync -aruv localfolder/ user@server:destination/

Eu preciso manter os mesmos proprietários e permissões, mas os IDs dos usuários na nova máquina podem ser diferentes. Eu acho que é por isso que o método descrito não funciona corretamente para mim: todos os arquivos obtêm o dono my-user:my-user (supostamente estou usando my-user@server ) para copiar os arquivos para o servidor.

Então, basicamente, o que eu preciso fazer é copiar a pasta (fez isso), e então, para cada arquivo, verificar qual é o ID do usuário com o mesmo nome na nova máquina e atualizar o dono da nova máquina com o novo ID.
Isso é possível? Ou existe uma maneira mais simples de fazer isso?

Isso é o que eu fiz no final, mas não é uma solução legal e a resposta de Michael Kjörling deve ser preferida.

    
por Keelan 26.08.2014 / 08:45

2 respostas

4

Esse comportamento que você está procurando é controlado pela opção -o (--owner) do rsync, possivelmente junto com --no-numerics-ids . A página man descreve --owner assim (minha ênfase):

-o, --owner
This option causes rsync to set the owner of the destination file to be the same as the source file, but only if the receiving rsync is being run as the super-user (see also the --super and --fake-super options). Without this option, the owner of new and/or transferred files are set to the invoking user on the receiving side.

The preservation of ownership will associate matching names by default, but may fall back to using the ID number in some circumstances (see also the --numeric-ids option for a full discussion).

Existe uma opção semelhante -g (--group) que funciona em grupos.

No entanto, ambos devem estar implícitos em -a , o que significa que você precisa de algo mais. Esse "algo mais" é detalhado por este pequeno detalhe na descrição da opção, que é bastante fácil senhorita:

only if the receiving rsync is being run as the super-user

O rsync de recepção deve ser executado como root. Quando você pensa sobre isso, faz sentido, pois somente o root é capaz de alterar a propriedade de um arquivo para um usuário arbitrário (que é basicamente você está pedindo algo para fazer).

Portanto, certifique-se de que o daemon rsync remoto seja executado como raiz e que a propriedade do arquivo (com base nos nomes de usuários e grupos) seja preservada quando possível quando você usar a opção -a (ou -og ). p>     
por 26.08.2014 / 11:42
1

Isso foi o que eu fiz no final, mas não é uma boa solução.

Felizmente eu sabia que haveria apenas arquivos pertencentes aos usuários ftp, www-data, meu-usuário, root e grupos ftp, www-data, root.

Então, na máquina antiga eu corri (na base da pasta que eu copiei)

find . -user ftp -print > temp-user.ftp.txt
find . -user www-data -print > temp-user.www-data.txt
find . -user my-user -print > temp-user.my-user.txt
find . -user root -print > temp-user.root.txt
find . -group ftp -print > temp-group.ftp.txt
find . -group www-data -print > temp-group.www-data.txt
find . -group root -print > temp-group.root.txt

Agora, por exemplo, temp-user.ftp.txt contém uma lista de todos os arquivos pertencentes ao usuário ftp. E temp-group.ftp.txt é uma lista de todos os arquivos com o grupo ftp. Por exemplo, temp-user.ftp.txt pode ter esta aparência:

./some-file.txt
./a-directory
./a-directory/lower-level-file.mp3

Use algum editor para torná-lo assim (por exemplo, substitua \n por "\nchown *** " e limpe um pouco manualmente no início e no final do arquivo):

chown ftp "./some-file.txt"
chown ftp "./a-directory"
chown ftp "./a-directory/lower-level-file.mp3"

Aqui, é claro, altere chown ftp para corresponder ao arquivo - temp-group.www-data.txt obterá chgrp www-data , etc.

E esses arquivos eu corri no novo servidor, com root.

Então, isso funcionou para mim, mas novamente,

  • esta não é uma boa solução,
  • requer bastante trabalho manual,
  • e exige que você saiba quais usuários e grupos possuem arquivos no diretório.
por 26.08.2014 / 11:28