As permissões de arquivo não estão sendo preservadas enquanto após o desarquivamento tar.gz

0

Estou tentando desarquivar o arquivo tar.gz usando a biblioteca Apache Compress (Java).

Como posso preservar as permissões de arquivos usando a biblioteca Apache Compress ao desarquivar o tar.gz?

    
por MBaev 18.05.2018 / 08:24

1 resposta

2

Você está fornecendo poucos detalhes, por isso estou fazendo suposições sobre minha resposta.

Pode haver várias razões para não funcionar como esperado.

  1. O id do usuário e o id do grupo mencionados no arquivo tar não existem na máquina de destino.

  2. O sistema de arquivos de destino (sub) em que o archive está sendo desarquivado não permite que essas "permissões" fiquem com as originais. Esse é o caso de sistemas de arquivos não-Unix, como vfat e ntfs , conforme usados para diretórios e arquivos de destino.

  3. Os usuários normais geralmente não podem fazer isso. Um usuário não raiz não pode transferir a propriedade de arquivos e diretórios para outros usuários.

  4. Alguns dos diretórios de destino não são diretórios reais (como /proc e /sys ), portanto, a restauração de arquivos não funcionará.

Não sei ao certo como a " biblioteca do Apache Compress "funciona, mas quando eu preciso fazer uma tarefa semelhante, descompacte o arquivo com permissões de root enquanto uso o mesmo caminho que o destino do desarquivamento. No entanto, a biblioteca do Apache Compress funciona, se ele puder manipular os arquivos tar.gz , ele precisa aceitar várias opções semelhantes às da ferramenta tar . Qual eu definitivamente usaria.

Algo como:

sudo tar xf mytar.tar.gz -C /

garantirá que qualquer arquivo que tenha sido arquivado com caminho absoluto seja colocado de volta no lugar com as permissões e a propriedade originais, pois sudo aumentará os privilégios para o nível necessário, enquanto -C / descompactará os arquivos no local correto desde que o arquivo tar tenha sido criado com caminhos absolutos e que a restauração de destino precisa ser colocada no mesmo lugar.

Agora, como você está usando uma biblioteca, todo o processo precisaria ser executado como root para poder transferir a propriedade. O que, por sua vez, pode ser uma má ideia, dependendo das restrições específicas e dos casos de uso.

Se você pudesse gerar um processo executando apenas a tarefa de desarquivamento, seria possível permitir que ele sozinho aumentasse as permissões com sudo . Neste caso, novamente, eu usaria tar em vez de um novo programa.

Se as suas necessidades forem limitadas às permissões de acesso a arquivos sem qualquer informação de propriedade, você pode verificar esta outra resposta minha . Lembre-se de que as permissões de acesso simples não podem funcionar corretamente quando não seguidas pelas informações de propriedade adequadas.

    
por Uqbar 18.05.2018 / 08:50