Welche Techniken gibt es, um Dateien sicher zu extrahieren?

Welche Techniken gibt es, um Dateien sicher zu extrahieren?

Gestern habe ich einige Experimente gemacht anSlitaz. Es verwendet mehrere initrd.imgs zum Speichern von Dateien/Änderungen.

Ich wollte eines seiner initrd.gz-Images (ein CPIO-Archiv) in einen Ordner extrahieren, bearbeiten/entfernen und erneut packen.

Ich habe diesen Code verwendet:

cat rootfs.img | cpio -idvm

Dann werden alle Dateien in mein Root-Dateisystem extrahiert. Mein gesamtes Betriebssystem ist beschädigt. (Was für eine peinliche Situation ...)

Was muss ich tun, um solche Vorgänge sicher, aber dennoch einfach durchzuführen? Chroot? LXC? (VirtualBox ist der letzte Ausweg)

Antwort1

Mit relativen Pfaden archiviert

Ich rate davon ab, diese Art von Befehl auf Ihrer Root-Ebene auszuführen /. Das führt zu Problemen. Ich führe cpio -idvmverwandte Befehle immer in ihren eigenen Verzeichnissen aus und verwende dann mvoder , cpum die Dateien manuell an den richtigen Ort zu bringen.

Sie können auch die Methode verwenden, die ich in diesem anderen U&L-Q&A mit dem Titel beschrieben habe:Wie installiere ich TazPkg in SliTaz Linux?, das ebenfalls verwendet cpio.

Mit absoluten Pfaden archiviert

Wenn das Archiv mit absoluten Pfaden erstellt wurde, können Sie cpiomit dem --no-absolute-filenamesSchalter das Extrahieren in blockieren /.

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

Verweise

Antwort2

unpSie können hierfür das Dienstprogramm verwenden .

unpist ein Dienstprogramm zum Entpacken mehrerer Formate. Eine seiner Funktionen (das -UArgument) ist die Möglichkeit, in das Archiv zu schauen und zu prüfen, ob es mehrere Stammelemente enthält. Wenn dies der Fall ist, werden sie in ein Verzeichnis extrahiert.

Zum Beispiel:

$ 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

unpfunktioniert mit vielen verschiedenen Formaten (einschließlich cpio). Es ruft einfach das entsprechende Dienstprogramm zur Handhabung des Archivs auf:

# 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

Die --helpAusgabe zeigt, was es kann:

# 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

verwandte Informationen