recriando apenas as permissões uid / gid unix do tar

2

Eu estava restaurando uma partição raiz com base em um backup tar do system-rescue-cd. Tudo correu bem, a não ser que os mapeamentos uid / gid no disco system-rescue-cd não coincidissem com os do sistema debian que eu estava restaurando. Isso quebrou vários pacotes e permissões setuid / setgid. Por exemplo, o atjobs no spool era de bin, em vez de daemon, e as man pages não eram de propriedade do usuário.

Como faço para detectar e recriar apenas as permissões do tarball sem iniciar o processo de restauração?

Descobri que consegui detectar as diferenças de uid / gid via "(cd /; tar jdpf /my/backup.tar.bz2)" mas agora tenho que filtrar a saída "Uid difere" e "Gid difere" e não inclui os diretórios na saída, apenas os arquivos.

Se o espaço em disco não fosse um problema, talvez o rsync pudesse fazer isso, se eu descompactar para outro disco?

Eu não quero extrair arquivos novamente, pois o conteúdo foi alterado no sistema. Eu só quero ajustar as permissões.

    
por dols 18.11.2014 / 19:24

1 resposta

0

Você pode obter uma lista de todos os comandos chown para emitir assim:

tar --numeric-owner -tvjf backup.tar.bz2 | 
perl -e 'while (<STDIN>) { s|/|:|;  @t = split(" ");  print "chown $t[1] \x27$t[5]\x27\n";  }' |
tee /tmp/chown_cmds

A saída será como:

chown 0:119 './var/cache/jockey/driverdb-OpenPrintingDriverDB.cache'
chown 0:119 './var/cache/jockey/check'
chown 0:7 './var/cache/cups/'
chown 7:7 './var/cache/cups/ppds.dat'
...

Dê uma olhada em /tmp/chown_cmds , verifique se ela está boa e execute-a para restaurar todos os uids / gids do backup:

$ cd / ; sudo bash /tmp/chown_cmds

Você pode filtrar arquivos de propriedade do root para tornar a lista mais curta.

    
por 23.11.2014 / 20:59