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.
-
O id do usuário e o id do grupo mencionados no arquivo tar não existem na máquina de destino.
-
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
entfs
, conforme usados para diretórios e arquivos de destino. -
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.
-
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.