tarファイルを解凍して環境に配置したら権限エラーに殺されたので、もう一度仕組みについて調べてみた

# 概要
.tar.gzファイルを解凍して環境に反映する対応をしました。結果、環境のディレクトリ及びファイルの権限を意図せず変えてしまいご迷惑をかけてしまいました。
自戒の意味を込めてコトの顛末と反省、そして仕組みをまとめようと思います。

# やらかしについて
### 前提
- .tar.gzファイルの中身はこんな感じ
dirA
┣dir1━file1
┃　　┣file2
┃　　┗file3
┗dir2━file4
　　　┗file5

- 権限設定はこんな感じ
反映先→user1:subgrp1 650

### やったこと
- 配置先のファイルの権限を確認
→user1:subgrp1 650！

- tarファイルを解凍
→user1で解凍すればOK！

- cpコマンドで配置
→ **-pオプション付けて権限変わらないようにして**配置！

### 結果
- 解凍したディレクトリおよびファイルの権限がuser1:prigrp1 640になっていたため、反映先の権限が書き換わった
    - 結果、配置したファイルを使って動作するshellが権限不足で動かなくなった
    - 対応のため、メンバ数人を巻き込んで超勤対応してもらうことになった

### 原因
- 手順書を作らずに突貫で作業をしたこと
    - 誰がやる作業なのかはっきりしていなかったため、直前になって「あ、私がやるんですか？」的な状態で作業をした
- 業後に予定があり、急いでいたこと
    - なお、トラブル対応のため予定は欠席になった。踏んだり蹴ったり

- 解凍時にls -lはしていたものの、ファイルの確認しかしていなかったこと
    - ディレクトリの権限まで確認できていなかった
        - **「permission deniedが出る？ファイルの権限あってますよ？」** とか宣った原因

### よかった(？)こと
- 配置前に配置先のディレクトリのフルバックアップを取っていたので切り戻しが出来た

### 再発防止策
- 手順化
    - 同様の作業に備えて手順メモを作成した
        - Teratermマクロとかshellとかに出来たらBestではある
- チーム内に共有
    - Linux勉強会の講師とかしてるけどこんなミスしちゃいました！という共有
        - 油断した頃にやらかすという良い例

### やらかした感想
- 人がやらかしたことへの対応なら確実に気が付いていたことに全く気がつかなかった
- パニック状態の解消は難しい
    - 明らかにパニックになっていることを自覚したので深呼吸したり色々試したが全く解消されない
        - この辺は自分のメンタルのコントロールを勉強したい

# で、結局tarの権限ってどうなるの（本題）
### まずは再現する
``` :ディレクトリ構成
[user1@localhost ~]$ ls -lR
.:
合計 0
drwxr-xr-x. 4 user1 subgrp1 30  8月 15 22:11 dirA

./dirA:
合計 0
drwxr-xr-x. 2 user1 subgrp1 45  8月 15 22:12 dir1
drwxr-xr-x. 2 user1 subgrp1 32  8月 15 22:13 dir2

./dirA/dir1:
合計 12
-rw-r--r--. 1 user1 subgrp1 7  8月 15 22:12 file1
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:12 file2
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:12 file3

./dirA/dir2:
合計 8
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:13 file4
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:13 file5

``` 


``` :tarにする
[user1@localhost ~]$ tar cvzf tarTest dirA
dirA/
dirA/dir1/
dirA/dir1/file1
dirA/dir1/file2
dirA/dir1/file3
dirA/dir2/
dirA/dir2/file4
dirA/dir2/file5
```
### ここからが検証

``` :tarの中身を確認
[user1@localhost study]$ tar tzvf tarTest.tar.gz 
drwxr-xr-x user1/subgrp1     0 2024-08-15 22:11 dirA/
drwxr-xr-x user1/subgrp1     0 2024-08-15 22:12 dirA/dir1/
-rw-r--r-- user1/subgrp1     7 2024-08-15 22:12 dirA/dir1/file1
-rw-r--r-- user1/subgrp1     6 2024-08-15 22:12 dirA/dir1/file2
-rw-r--r-- user1/subgrp1     6 2024-08-15 22:12 dirA/dir1/file3
drwxr-xr-x user1/subgrp1     0 2024-08-15 22:13 dirA/dir2/
-rw-r--r-- user1/subgrp1     6 2024-08-15 22:13 dirA/dir2/file4
-rw-r--r-- user1/subgrp1     6 2024-08-15 22:13 dirA/dir2/file5
```
- 権限はこの時点では変化なし

``` :tar zxvfで解凍する
[user1@localhost study]$ tar xzvf tarTest.tar.gz 
dirA/
dirA/dir1/
dirA/dir1/file1
dirA/dir1/file2
dirA/dir1/file3
dirA/dir2/
dirA/dir2/file4
dirA/dir2/file5

[user1@localhost study]$ ls -lR
.:
合計 4
drwxr-xr-x. 4 user1 prigrp1  30  8月 15 22:11 dirA
-rw-r--r--. 1 user1 prigrp1 278  8月 15 22:30 tarTest.tar.gz

./dirA:
合計 0
drwxr-xr-x. 2 user1 prigrp1 45  8月 15 22:12 dir1
drwxr-xr-x. 2 user1 prigrp1 32  8月 15 22:13 dir2

./dirA/dir1:
合計 12
-rw-r--r--. 1 user1 prigrp1 7  8月 15 22:12 file1
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:12 file2
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:12 file3

./dirA/dir2:
合計 8
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:13 file4
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:13 file5
```
- 解凍した時点で所有グループがprigrp1になっている

``` :tar zxvpfで解凍する
[user1@localhost study]$ tar xzvpf tarTest.tar.gz 
dirA/
dirA/dir1/
dirA/dir1/file1
dirA/dir1/file2
dirA/dir1/file3
dirA/dir2/
dirA/dir2/file4
dirA/dir2/file5

[user1@localhost study]$ ls -lR
.:
合計 4
drwxr-xr-x. 4 user1 prigrp1  30  8月 15 22:11 dirA
-rw-r--r--. 1 user1 prigrp1 278  8月 15 22:30 tarTest.tar.gz

./dirA:
合計 0
drwxr-xr-x. 2 user1 prigrp1 45  8月 15 22:12 dir1
drwxr-xr-x. 2 user1 prigrp1 32  8月 15 22:13 dir2

./dirA/dir1:
合計 12
-rw-r--r--. 1 user1 prigrp1 7  8月 15 22:12 file1
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:12 file2
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:12 file3

./dirA/dir2:
合計 8
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:13 file4
-rw-r--r--. 1 user1 prigrp1 6  8月 15 22:13 file5
```
駄目じゃないか！！！！

### tarのmanには以下の記載がある
``` :tarのman（一部抜粋）
       -p, --preserve-permissions
              ファイル属性についての情報を抽出する
              (スーパーユーザーのデフォルト)
```
つまりrootで実行すれば権限が保持されたまま解凍される
```
[root@localhost study]# tar -zxvf tarTest.tar.gz 
dirA/
dirA/dir1/
dirA/dir1/file1
dirA/dir1/file2
dirA/dir1/file3
dirA/dir2/
dirA/dir2/file4
dirA/dir2/file5

[root@localhost study]# ls -lR
.:
合計 4
drwxr-xr-x. 4 user1 subgrp1  30  8月 15 22:11 dirA
-rw-r--r--. 1 user1 prigrp1 278  8月 15 22:30 tarTest.tar.gz

./dirA:
合計 0
drwxr-xr-x. 2 user1 subgrp1 45  8月 15 22:12 dir1
drwxr-xr-x. 2 user1 subgrp1 32  8月 15 22:13 dir2

./dirA/dir1:
合計 12
-rw-r--r--. 1 user1 subgrp1 7  8月 15 22:12 file1
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:12 file2
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:12 file3

./dirA/dir2:
合計 8
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:13 file4
-rw-r--r--. 1 user1 subgrp1 6  8月 15 22:13 file5
```

出来た。

### つまり…？
- rootでは-pを付けなくても権限が保持される
    - マニュアルに依れば「スーパーユーザーのデフォルト」なのでこれは理解できる
- 一般ユーザでは-pを付けたとしても権限が保持されない
    - これが全く理解できない
- おとなしく解凍したあとにchownするのが良さそう（それでいいのか）



# 参考

https://www.unix.com/man-page/centos/1/tar/