Saya ingin dapat mengekstrak file tar, sehingga semua file yang diekstraksi ditempatkan di bawah direktori awalan tertentu. Setiap upaya oleh file tar untuk menulis ke direktori luar harus menyebabkan ekstraksi gagal.
Seperti yang Anda bayangkan, ini agar saya dapat mengekstrak file tar yang tidak dipercaya dengan aman.
Bagaimana saya bisa melakukan ini dengan GNU tar
?
Saya datang dengan:
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
tapi saya tidak yakin ini cukup paranoid.
-t
opsi.Jawaban:
Anda tidak perlu paranoia sama sekali. GNU
tar
- dan pada kenyataannya setiap yang ditulis dengantar
program yang diproduksi dalam 30 tahun terakhir atau lebih - akan menolak untuk mengekstrak file dalam tarball yang dimulai dengan garis miring atau yang mengandung..
unsur-unsur, secara default.Anda harus keluar dari cara Anda untuk memaksa
tar
program - program modern untuk mengekstrak tarbal yang berpotensi berbahaya: baik GNU maupun BSDtar
memerlukan-P
opsi untuk membuatnya menonaktifkan perlindungan ini. Lihat bagian Absolute File Names dalam manual tar GNU.The
-P
Bendera tidak ditentukan oleh POSIX, ¹ meskipun, jadi laintar
program mungkin memiliki cara yang berbeda untuk mengatasi ini. Sebagai contoh, Schily Tools'star
Program kegunaan-/
dan-..
untuk menonaktifkan perlindungan ini.Satu-satunya hal yang mungkin Anda pertimbangkan untuk ditambahkan ke
tar
perintah naif adalah-C
bendera untuk memaksanya mengekstrak hal-hal dalam direktori sementara yang aman, jadi Anda tidak harus kecd
sana terlebih dahulu.Selain itu :
Secara teknis,
tar
sama sekali tidak ditentukan oleh POSIX. Mereka mencoba memberi tahu dunia komputasi Unix bahwa kita seharusnya menggunakanpax
sekarang alih-alihtar
dancpio
, tetapi dunia komputasi sebagian besar mengabaikannya.Ini relevan di sini untuk mencatat bahwa spesifikasi POSIX untuk
pax
tidak mengatakan bagaimana ia harus menangani garis miring terkemuka atau..
elemen yang disematkan . Ada--insecure
bendera yang tidak standar untuk BSDpax
untuk menekan perlindungan terhadap..
elemen jalur yang disematkan , tetapi tampaknya tidak ada perlindungan standar terhadap garis miring terkemuka;pax
halaman manual BSD secara tidak langsung merekomendasikan penulisan-s
aturan substitusi untuk menangani risiko jalur absolut.Itulah hal yang terjadi ketika standar de facto tetap digunakan secara aktif sementara standar de jure sebagian besar diabaikan.
sumber
pax - portable archive interchange
Awww, lucu sekali, POSIX berpikir itu akan menggantikan mungkin format arsip yang paling banyak digunakan: PDengan GNU tar, sederhana saja
dalam direktori kosong. Tar GNU secara otomatis menghapus
/
nama anggota terkemuka saat mengekstraksi, kecuali secara eksplisit tidak diberitahu sebaliknya dengan--absolute-names
opsi . Tar GNU juga mendeteksi kapan penggunaan../
akan menyebabkan file diekstraksi di luar direktori tingkat atas dan menempatkan file-file itu di direktori tingkat atas, misalnya komponenfoo/../../bar/qux
akan diekstraksi sepertibar/qux
dalam direktori tingkat atas daripadabar/qux
di induk direktori tingkat atas . GNU tar juga menangani tautan simbolik yang menunjuk di luar direktori tingkat atas, misalnyafoo -> ../..
danfoo/bar
tidak akan menyebabkanbar
diekstraksi di luar direktori tingkat atas.Perhatikan bahwa ini hanya berlaku untuk (versi terbaru dari) tar GNU (serta beberapa implementasi lainnya, misalnya * BSD tar dan tar BusyBox). Beberapa implementasi lain tidak memiliki perlindungan seperti itu.
Karena tautan simbolis, perlindungan yang Anda gunakan tidak akan cukup: arsip dapat berisi tautan simbolis yang menunjuk ke direktori di luar pohon dan mengekstrak file di direktori itu. Tidak ada cara untuk menyelesaikan masalah itu hanya berdasarkan nama anggota, Anda perlu memeriksa target tautan simbolik.
Perhatikan bahwa jika Anda mengekstraksi ke direktori yang sudah berisi tautan simbolik, jaminan mungkin tidak lagi berlaku.
sumber
Untuk membahas beberapa hal, jawaban lain belum:
Pertama, lihat apa yang ada di file sebelum Anda mengekstraknya:
Jika ada sesuatu di sana yang Anda tidak percaya atau ingin mengekstrak, jangan mengekstrak tarball.
sumber