modificar a propriedade dos arquivos dentro do arquivo tar

10

Estou trabalhando como usuário e gostaria de criar um arquivo tar, que quando descompactado (por raiz) extrai seus arquivos com propriedade de root (caso contrário, o root precisaria alterar a propriedade manualmente para cada arquivo, após a extração dos arquivos ao seu destino).

Eu descobri o fakerootque parece fazer exatamente isso. Mas não consigo encontrar a sintaxe que preciso usar para criar meu arquivo.

Como posso criar um arquivo tar.xz, para que os arquivos tenham propriedade de root quando descompactados pela raiz?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
user1968963
fonte

Respostas:

12

Como posso criar um arquivo tar.xz, para que os arquivos tenham propriedade de root quando descompactados pela raiz?

Isso depende da raiz que descompacta:

tar --no-same-owner -xf ...

Se você deseja torná-los todos raiz para começar, você pode usar

tar --owner=root --group=root -cf ...
Cachinhos Dourados
fonte
que não funciona para mim: me tar --owner=root --group=root cfpJ files.tar.xz files/dá erro tar: You must specify one of the -Acdtrux 'ou --test-label' options Try tar --help' outar --usage' for more information.
user1968963
Você precisa de uma -sequência de opções curta antes de: tar --owner=root --group=root -cfpJ ...Ou seja -cfpJ, não cfpJ.
GOLDILOCKS
tar --owner=root --group=root -cfpJ files.tar.xz files/me dá outro erro: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorsalém disso, ele cria um arquivo chamado pJ.
precisa saber é o seguinte
3
OK. Eu sempre coloco o ffinal (porque faz mais sentido, intuitivamente) e baixo e eis que recebo o mesmo fracasso com -cfpJMAS -cpJftrabalhos.
GOLDILOCKS
@ user1968963: f deve sempre estar imediatamente antes do nome do arquivo, pois significa "o próximo parâmetro é o nome do arquivo". Se você não colocá-lo imediatamente antes do nome do arquivo, o tar pensará que o nome do arquivo é "" e, em seguida, tenta abrir um arquivo "" que não pode ser declarado (é claro).
Olivier Dulac
8

Fakeroot

O utilitário fakeroot , ou o utilitário mais recente fakeroot-ng (mesma finalidade, técnica de implementação diferente) executa um programa e finge ao programa que está sendo executado como root e que o sistema chama como chownbem-sucedido. Somente o programa acredita que essas chamadas foram bem-sucedidas, nada é refletido no sistema de arquivos (não pode ser, pois fakerootnão possui privilégios extras). No entanto, se o programa alterar a propriedade de um arquivo e, em seguida, executar alguma ação com base na propriedade desse arquivo, isso poderá alterar o comportamento do programa.

Uma maneira típica de obter um trabalho útil do fakeroot executando um ambiente de fakeroot, onde acontece o seguinte:

  1. Crie alguns arquivos, mova-os, altere sua propriedade e modos, etc.
  2. Crie um arquivo morto desses arquivos.

Exemplo:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Você precisa usar uma única invocação de fakeroot, pois não há memória entre invocações.

Namespaces do Linux

Apenas para completar, vou mencionar que, se você tiver um kernel Linux ≥3,8, os espaços para nome são outra maneira de criar um ambiente de fingimento raiz. O suporte à terra do usuário ainda não chegou, portanto não entrarei em mais detalhes.

Montar o arquivo

Uma maneira diferente de resolver seu problema é montar o arquivo morto como um diretório. Você pode usar o archivemount , que é capaz de modificar vários formatos de arquivo via libarchive , incluindo tar compactado.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Gilles 'SO- parar de ser mau'
fonte
Bom truque com archivemount, mas ainda requer elevação de privilégios, e mesmo se o usuário estiver em um grupo confiável que tem permissão para montar e desmontar, o processo falha chown, portanto, algum tipo de ferramenta de terceiros, como fakerootespaços de nome, precisa ser usado , também.
27616 Anton Antonsonson