Comando tar: arquivar e comprimir sem riscos no Linux

Terminal Linux a criar um arquivo tar.gz do diretório etc e a listar o conteúdo antes de extrair

Mais cedo ou mais tarde, quem administra sistemas Linux precisa de transformar uma árvore de diretórios num único ficheiro: para fazer uma cópia de segurança do /etc antes de uma alteração arriscada, para mover uma aplicação entre servidores ou para preservar evidências num incidente. É esse o trabalho do tar — e, quase sempre de mãos dadas com ele, do gzip, que comprime o resultado para uma fração do tamanho original.

Mas o tar tem um lado de que se fala menos: extrair um arquivo de origem desconhecida sem o inspecionar primeiro é uma das formas mais antigas de comprometer uma máquina. Neste artigo da série sobre comandos Linux explicamos as opções essenciais de criação, listagem e extração, o papel do gzip, gunzip e zcat, e as precauções que separam um administrador experiente de uma vítima de tarbomb. No final, pode praticar tudo num simulador interativo.

O que faz o tar

O nome vem de tape archive: o tar nasceu para escrever ficheiros em fita magnética, e é por isso que a opção -f (indicar um ficheiro de destino) é obrigatória em praticamente todos os usos modernos. O comando percorre os caminhos indicados e serializa tudo — conteúdo, permissões, donos, datas e ligações simbólicas — num único ficheiro .tar, sem qualquer compressão. A compressão é um passo separado, delegado no gzip (ou bzip2, xz, zstd), o que explica as extensões duplas como .tar.gz.

tar [OPERAÇÃO] [MODIFICADORES] -f ARQUIVO [CAMINHOS...]

tar -cvf backup-etc.tar etc/        # criar um arquivo a partir de etc/
tar -tvf backup-etc.tar             # listar o conteúdo sem extrair
tar -xvf backup-etc.tar             # extrair no diretório atual

A operação é sempre uma de três letras centrais: -c cria, -t lista, -x extrai. Tudo o resto são modificadores que afinam o comportamento.

As opções que interessam

Criar arquivos

  • -c — cria um arquivo novo com os caminhos indicados. Com -v, cada ficheiro adicionado é mostrado no terminal.
  • -z — passa o resultado pelo gzip em linha: tar -czf backup.tar.gz etc/ cria e comprime num só passo. Para bzip2 e xz existem -j e -J; na leitura, o GNU tar moderno deteta a compressão automaticamente.
  • --exclude=PADRÃO — deixa de fora o que corresponder ao padrão. Excluir caches e diretórios temporários pode reduzir um backup de dezenas de megabytes para alguns kilobytes.
  • -p e --numeric-owner — preservam permissões e identificadores numéricos de dono, essenciais quando o arquivo vai ser restaurado noutro sistema ou usado como evidência.

Listar antes de extrair

A opção -t merece uma secção própria porque é a mais importante do ponto de vista de segurança. Ela mostra o conteúdo completo do arquivo — permissões, dono, tamanho, data e caminho de cada entrada — sem escrever um único byte no disco:

$ tar -tvf transfer.tar.gz
-rwxr-xr-x dev/dev      1120 2026-07-24 03:11 instalar.sh
-rw-r--r-- dev/dev       640 2026-07-24 03:11 leia-me.txt
-rw-r--r-- dev/dev        98 2026-07-24 03:14 ../../home/aluno/.ssh/authorized_keys

Este exemplo fictício mostra os dois clássicos: uma entrada com ../ a tentar escapar do diretório de extração e ficheiros soltos sem um diretório de topo comum — a chamada tarbomb, que espalha conteúdo pelo diretório onde for extraída. Ambos se detetam em segundos com -t, e nenhum se deteta depois de extrair.

Extrair com controlo

  • -x — extrai no diretório atual, sobrepondo ficheiros existentes com o mesmo nome, sem pedir confirmação.
  • -C DIR — muda para DIR antes de extrair. Combinado com um diretório vazio acabado de criar, é a maneira mais simples de conter qualquer arquivo: mkdir alvo && tar -xf a.tar.gz -C alvo.
  • Extrair um só ficheiro — basta passar o caminho exato, tal como aparece no -t: tar -xvf backup.tar etc/ssh/sshd_config recupera apenas essa entrada.
  • --strip-components=N — remove os primeiros N níveis de diretório dos nomes ao extrair, útil quando o arquivo traz um diretório de topo que não interessa.

gzip, gunzip e zcat a solo

O gzip também vive sozinho, e com um comportamento que surpreende à primeira: comprime um ficheiro de cada vez e substitui o original pela versão .gz (use -k para manter os dois). O gunzip — ou gzip -d — faz o caminho inverso. E o trio zcat, zgrep e zless lê, pesquisa e pagina ficheiros comprimidos sem os descomprimir no disco — indispensável para trabalhar com logs rodados como access.log.1.gz.

gzip -v relatorio.txt          # comprime e substitui por relatorio.txt.gz
gunzip relatorio.txt.gz        # devolve o original
zcat acessos-2025.log.gz | grep " 401 " | head

tar em cibersegurança

Path traversal em arquivos. Durante anos, versões antigas de ferramentas de extração aceitaram entradas com ../ ou caminhos absolutos, permitindo que um arquivo malicioso escrevesse ficheiros fora do diretório de extração — por exemplo, um authorized_keys no .ssh da vítima. Há CVE históricas exatamente sobre este comportamento, e a mesma classe de falha continua a reaparecer em bibliotecas de extração de várias linguagens. O GNU tar moderno remove os prefixos perigosos (com o aviso Removing leading ../ from member names), mas a lição mantém-se: nunca confiar na ferramenta como única defesa.

Tarbombs e engenharia social. Um arquivo sem diretório de topo despeja dezenas de ficheiros no diretório atual, misturando-os com os existentes — e um instalar.sh executável no meio de um diretório de trabalho é um convite ao erro. Extrair sempre em diretório vazio, e nunca como root, neutraliza o problema.

Preservação de evidências em forense. Em resposta a incidentes, tar -cpf com --numeric-owner preserva permissões, donos e datas dos artefactos recolhidos, o que permite reconstituir o estado do sistema mais tarde sem depender dos utilizadores locais da máquina de análise.

Deteção de exfiltração. Do lado defensivo, a sequência «criar arquivo comprimido de diretórios sensíveis + transferência para fora» é uma assinatura clássica de exfiltração de dados. Monitorizar execuções de tar/gzip sobre diretórios como /etc ou bases de dados, seguidas de ligações de saída, é uma regra de deteção simples e eficaz.

Experimente no simulador interativo

O simulador abaixo mostra, lado a lado, o diretório ~/lab e um terminal que executa cada comando de verdade: crie um backup do etc/ com -cvf, encolha-o com -z e --exclude, liste-o com -tvf, restaure para um diretório limpo com -C — e depois inspecione um transfer.tar.gz de origem desconhecida para ver um path traversal neutralizado e uma tarbomb em ação. Use Demonstrar tudo para a sequência guiada completa, avance com Anterior/Seguinte ou combine livremente as opções e observe a árvore de ficheiros a mudar.

Erros comuns e boas práticas

  • Extrair sem listar primeiro. tar -tvf antes de tar -xvf em qualquer arquivo que não criou — sem exceções.
  • Extrair no diretório errado. O -x sobrepõe sem perguntar. Um diretório vazio com -C custa dois segundos e evita perdas irreversíveis.
  • Esquecer que o gzip substitui o original. gzip ficheiro apaga o ficheiro original; use -k quando precisar de manter ambos.
  • Tentar -r num .tar.gz. Acrescentar ficheiros (-r/-u) só funciona em arquivos não comprimidos; num .tar.gz é preciso descomprimir primeiro.
  • Extrair como root por comodidade. Com root, uma entrada maliciosa pode escrever onde quiser e repor donos arbitrários. Extraia como utilizador normal sempre que possível.
  • Confundir a ordem das opções. O -f tem de ser seguido imediatamente do nome do arquivo: tar -cvf backup.tar etc/ funciona; tar -cfv backup.tar etc/ cria um ficheiro chamado v.

Conclusão

O tar e o gzip são o par que resolve backups, migrações e preservação de evidências em qualquer sistema Linux — desde que se respeite a disciplina de inspecionar antes de extrair e de controlar o destino da extração. Dominar -c, -t, -x e meia dúzia de modificadores cobre 95% das situações reais; o resto é hábito de segurança. Se quer levar estas competências mais longe, com formação prática em administração segura de sistemas e resposta a incidentes, conheça o nosso catálogo de serviços de formação e consultoria — e veja também o artigo sobre o useradd, onde a gestão de contas e permissões complementa o que aqui ficou sobre donos e ficheiros.

Este artigo faz parte da série “Comandos Linux, um a um” do blog HJFR — fique atento aos próximos comandos.