web-dev-qa-db-ja.com

tar:メンバー名から先頭の「/」を削除する

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

この問題を解決して/ファイル名について?

149
superuser

使用 --absolute-namesまたは-Pこの機能を無効にするオプション。

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

tar fcz bkup.tar.gz --absolute-names /home/foo
80
Barmar

これは実際には機能であり、問​​題ではありません。絶対的な場所を持つアーカイブはセキュリティ上のリスクです。攻撃者はこのようなアーカイブを使用して、ユーザーをだましてシステムの重要な場所にファイルをインストールさせることができます。

はい、-P。しかし、tarがスラッシュを削除することを許可し、アーカイブのユーザーにルートディレクトリで明示的に抽出を要求することの何が問題になっていますか?次に、それらは意識的に重要なシステムの場所に影響を与えており、偶然にそれを行うことはできません。

90
Mark Adler

「メンバー名から先頭の/を削除する」をSTDERRに出力しないようにしたいが、tarがデフォルトで賢明に行うように、これらの先頭のスラッシュを省略したい場合は、優れた解決策を見つけました here =コメント投稿者のtimsoft。

解決策は、-Cオプションを使用してディレクトリをルート(/)に変更し、次にアーカイブするファイルツリーを指定するスラッシュなしです。相対パスのみが必要です。これは通常のtar createコマンドと同じことを行いますが、ストリッピングは必要ありません。

tar fcz bkup.tar.gz -C / home/foo/
86
Marcus

1か月遅れましたが、(シェルスクリプトで)私の場合に最も適切な解決策は、親ディレクトリに移動してそこでコマンドを実行することでした。

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

の代わりに:

tar -czf /var/www/mysite.gz /var/www/mysite
35
amd

これは、ブルートフォースメソッドを使用した方法です:2>&1 | grep -v "Removing leading"

例えば:

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

-C完全なパスでの圧縮を防ぐパスのみ:

root@server # tar fcz bkup.tar.gz -C /home/ foo/
3
Nick Tsai

私はこの問題を次のように解決しました:

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

そうすれば、最初に絶対パスをtarアーカイブに入れようとするのではありません。ファイルシステムのルートで解凍する場合は、

cd / && tar xzf backupt.tar.gz転送後。

2
James