tar: Removendo o '/' inicial dos nomes dos membros

108
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading '/' from member names

Como posso resolver este problema e manter o / nos nomes dos arquivos?

    
por superuser 23.12.2012 / 13:47

7 respostas

55

Use a opção --absolute-names ou -P para desativar esse recurso.

tar fczP bkup.tar.gz /home/foo/

tar fcz bkup.tar.gz --absolute-names /home/foo
    
por 23.12.2012 / 13:57
78

Isso é realmente um recurso, não um problema. Arquivos com localizações absolutas são um risco de segurança. Os atacantes podem usar esses arquivos para enganar os usuários para que instalem arquivos em locais críticos do sistema.

Sim, você pode usar -P . Mas o que há de errado em permitir que o tar remova a barra, e simplesmente exigir que o usuário do arquivo faça explicitamente a extração no diretório raiz? Então eles estão impactando conscientemente os locais críticos do sistema e não podem fazê-lo por acidente.

    
por 23.12.2012 / 16:28
67

Se você quiser se livrar de "Removendo o líder '/' dos nomes dos membros" sendo impressos no STDERR, mas ainda assim quiser deixar de lado as barras iniciais, como sabiamente, vi uma solução excelente aqui do comentarista timsoft.

A solução envolve usar a opção -C para alterar o diretório para a raiz (/) e, em seguida, especificar a árvore de arquivos para arquivar sem uma barra inicial, porque agora você precisa apenas de um caminho relativo. Isso faz a mesma coisa que um comando normal de criação de tar, mas não é necessário decapagem:

tar fcz bkup.tar.gz -C / home/foo/
    
por 18.01.2013 / 16:33
22

Um mês atrasado, mas achei a solução mais apropriada para o meu caso (em um shell script) é ir ao diretório pai e executar o comando lá.

cd /var/www/
tar -czf mysite.gz mysite

Em vez de:

tar -czf /var/www/mysite.gz /var/www/mysite
    
por 24.05.2015 / 08:52
7

Foi assim que eu fiz usando o método de força bruta: 2>&1 | grep -v "Removing leading" .

Por exemplo:

tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v  "Removing leading"
    
por 23.08.2013 / 03:00
1

Eu resolvi esse problema com:

cd /home/foo && tar czf ~/backup.tar.gz .

Dessa forma, você não está tentando colocar caminhos absolutos no arquivo tar em primeiro lugar. Se você quiser descompactá-lo na raiz do sistema de arquivos, você apenas

cd / && tar xzf backupt.tar.gz após transferi-lo.

    
por 21.07.2017 / 17:44
1

Tente usar -C apenas para o caminho, o que impediria a compactação com caminhos completos:

root@server # tar fcz bkup.tar.gz -C /home/ foo/
    
por 25.07.2017 / 12:35

Tags