かきすて

正しいかどうかよくわからない知識をよくわからないままとりあえず公開してみようというコンセプトで運営しています。

superuser権限でtarコマンドで解凍すると何も考えなくてもパーミッションと所有者が保持される

GNU tarの話です。

tarでパーミッション保持をするのは-pオプションをつければいいのだが、固めるときは勝手に保持しておいてくれるので、これをつけるのは解凍するときだけでいい。ということを最近教えてもらった。そうなんだ。勘違いして固めるときもつけていた。
と思って調べてみたらこんなことが書いてある。

-p, --preserve-permissions, --same-permissions
ファイル属性についての情報を抽出
(superuser では標準)

tar:ファイルやディレクトリの圧縮または展開:具体例未作成 | u-style.info

「superuserでは標準」。
なるほど。
で、試してみたらどうやらsuperuserのときは--same-ownerオプションも標準でつくらしい。
例えばこういうディレクトリをtarで固めて、

$ ls -l tartest
合計 0
-rwxrwxrwx 1 ippan   ippan 0  3月 29 20:03 ippan_777
-rwxrwxrwx 1 root    root    0  3月 29 20:02 root_777

$ tar zcvf tartest.tar.gz tartest/

別サーバでsuperuser権限で解凍するとこういう風になる。

$ sudo tar zxvf tartest.tar.gz
$ ls -l tartest
total 0
-rwxrwxrwx 1  502  502 0 2013-03-29 20:03 ippan_777
-rwxrwxrwx 1 root root 0 2013-03-29 20:02 root_777

-pも--same-ownerもつけてないけど所有者もパーミッションも保持されている。
保持したくないときはオプションで明示しないといけないようだ。

$ sudo tar --no-same-permissions --no-same-owner -zxvf tartest.tar.gz
$ ls -l tartest
total 0
-rwxr-xr-x 1 root root 0 2013-03-29 20:03 ippan_777
-rwxr-xr-x 1 root root 0 2013-03-29 20:02 root_777

逆に一般ユーザで両方保持しようと思ったら--same-ownerが怒られる。
のはこっちの環境もろもろのせいか?
rootでやれば勝手につくわけだし、--same-ownerを使うタイミングって本当にあるのかなと思いつつ。

$ tar --same-owner -zxvpf tartest.tar.gz
tartest/
tartest/ippam_777
tar: tartest/ippan_777: Cannot change ownership to uid 502, gid 502: Operation not permitted
tartest/root_777
tar: tartest/root_777: Cannot change ownership to uid 0, gid 0: Operation not permitted
tar: tartest: Cannot change ownership to uid 0, gid 0: Operation not permitted
tar: Exiting with failure status due to previous errors