quais são as técnicas para extrair arquivos com segurança?

quais são as técnicas para extrair arquivos com segurança?

Ontem eu estava fazendo alguns experimentosSlitaz. Ele usa vários initrd.img para armazenar arquivos/alterações.

Eu queria extrair uma de suas imagens initrd.gz (que é um arquivo cpio) para uma pasta, editá-las/remover e reembalar novamente.

Eu usei este código:

cat rootfs.img | cpio -idvm

Em seguida, todos os arquivos são extraídos para meu sistema de arquivos raiz. Todo o meu sistema operacional está corrompido. (Que situação embaraçosa...)

O que devo fazer para realizar tais operações com segurança, mas de maneira fácil? Chroot? LXC? (VirtualBox é o último recurso)

Responder1

Arquivado com caminhos relativos

Eu desaconselho a execução desse tipo de comando no nível raiz, /. Isso é pedir encrenca. Eu sempre executo cpio -idvmcomandos relacionados em seus próprios diretórios e, em seguida, uso mvou cppara colocar os arquivos onde eles precisam estar manualmente.

Você também pode usar o método que descrevi nesta outra sessão de perguntas e respostas sobre U&L intitulada:Como instalar o TazPkg no SliTaz Linux, que também faz uso de cpio.

Arquivado com caminhos absolutos

Se o arquivo foi criado com caminhos absolutos, você pode saber cpiocom a --no-absolute-filenamesopção para impedir que ele seja extraído para /.

$ mkdir /tmp/cpio-root
$ cd /tmp/cpio-root
$ cat rootfs.img | cpio -idvm --no-absolute-filenames

Referências

Responder2

Você pode usar o unputilitário para isso.

unpé um utilitário para descompactar vários formatos. Um de seus recursos (o -Uargumento) é a capacidade de examinar o arquivo e ver se ele possui vários elementos raiz. Se isso acontecer, ele os extrai para um diretório.

Por exemplo:

$ echo $RANDOM > a
$ echo $RANDOM > b
$ tar -cf archive.tar a b
$ rm a b
$ unp -U archive.tar
$ ls -l a b archive
ls: cannot access a: No such file or directory
ls: cannot access b: No such file or directory
archive:
total 8
-rw-r--r-- 1 root root 5 Jun 15 03:16 a
-rw-r--r-- 1 root root 6 Jun 15 03:16 b

unpfunciona com muitos formatos diferentes (incluindo cpio). Ele apenas chama o utilitário apropriado para lidar com o arquivo:

# unp -s
Known archive formats and tools:
7z:           p7zip or p7zip-full
ace:          unace
ar,deb:       binutils
arj:          arj
bz2:          bzip2
cab:          cabextract
chm:          libchm-bin or archmage
cpio,afio:    cpio or afio
dat:          tnef
dms:          xdms
exe:          maybe orange or unzip or unrar or unarj or lha 
gz:           gzip
hqx:          macutils
lha,lzh:      lha
lz:           lzip
lzma:         xz-utils or lzma
lzo:          lzop
lzx:          unlzx
mbox:         formail and mpack
pmd:          ppmd
rar:          rar or unrar or unrar-free
rpm:          rpm2cpio and cpio
sea,sea.bin:  macutils
shar:         sharutils
tar:          tar
tar.bz2,tbz2: tar with bzip2
tar.lzip:     tar with lzip
tar.lzop,tzo: tar with lzop
tar.xz,txz:   tar with xz-utils
tar.z:        tar with compress
tgz,tar.gz:   tar with gzip
uu:           sharutils
xz:           xz-utils
zip,cbz,cbr,jar,war,ear,xpi,adf: unzip
zoo:          zoo

A --helpsaída mostrando o que ele pode fazer:

# unp --help

USAGE:
   /usr/bin/unp [ options ] file [ files... ]
   file: compressed file(s) to expand/extract

   Use -- [ ARGUMENTS ] to pass arguments to external programs, eg. some tar options:
   unp fastgl.tgz xmnt.tgz -- -C /tmp

   Options:
   -f Continue even if program availability checks fail or directory collision occurs
   -u Special helper mode.
      For most archive types:
      - create directory <filename without suffix>/
      - extract contents there
      For Debian/Ubuntu packages:
      - extract data.tar.gz after each operation in local directory
      - extract control.tar.gz into control/<package_version_arch>/
   -U Smart mode, acts like -u (see above) if archive contains multiple
      elements but if there is only one file/directory element then it's stored 
      in the current directory.
   -s Show the list of supported formats
   -v More verbosity
   -h Show this help

informação relacionada