結論
※ r は読取、x は実行、w は書込の権限を示す(-は権限なし)
-
実行ユーザーがrx(読取・実行)権限をもつディレクトリに対してはその配下への削除が試みられる
-
削除が試みられた対象がディレクトリの場合、上位ディレクトリと対象のディレクトリにw(書込)権限があると削除される -
削除が試みられた対象がディレクトリの場合、
・対象のディレクトリが空なら上位ディレクトリにw権限があることで削除される
・対象のディレクトリが空でないなら上位ディレクトリにw権限があっても削除されない
※空でないケース
- 対象のディレクトリにw権限がなく配下のディレクトリまたはファイルが削除できない
- 対象のディレクトリにr権限がなく配下の参照ができない -
削除が試みられた対象がファイルの場合、上位ディレクトリにw(書込)権限があると(つまり所属ディレクトリへの書込権限があると)ファイルに対する権限の有無に依らず削除される
⇒実行ユーザーの権限次第ではあまり消えない。
(とりあえずフルコントロールみたいなことを習慣的にやってしまっていると結構消える。)
⇒スーパーユーザーで誤ってルートから実行してしまうと全てが終わる。
実験
前提環境:
CentOS Linux release 7.8.2003 (Docker起動)
DockerコンテナでCentOSを起動する。
~$ docker run -it --name=centos centos:7 bash -rm
CentOSのバージョンを確認する。
# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
同じグループでUSER_A
とUSER_B
を作成する。
# adduser USER_A
# adduser -g 1000 USER_B
# cat /etc/passwd | grep USER
USER_A:x:1000:1000::/home/USER_A:/bin/bash
USER_B:x:1001:1000::/home/USER_B:/bin/bash
上記のイメージ図と同じディレクトリを構成する。
あとでUSER_A
と同じグループ内にいるUSER_B
でrm -rf
を実行するため、
注目すべき権限はディレクトリまたはファイルの所有者と同じグループ内にいるユーザーに対する権限の部分。(ll
コマンド結果の各行先頭から5文字目のr、6文字目のx、7文字目のx)
$ ll -d $(find `pwd`) | grep Dir
drwxr----- 3 USER_A USER_A 4096 Nov 5 03:02 /home/USER_A/Dir1_r
drwxrwx--- 2 USER_A USER_A 4096 Nov 5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx/FIle1rw.dat
drwx--x--- 3 USER_A USER_A 4096 Nov 5 03:03 /home/USER_A/Dir2_x
drwxrwx--- 2 USER_A USER_A 4096 Nov 5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx/FIle2rw.dat
drwxr-x--- 3 USER_A USER_A 4096 Nov 5 03:03 /home/USER_A/Dir3_rx
drwxrwx--- 4 USER_A USER_A 4096 Nov 5 03:55 /home/USER_A/Dir3_rx/Dir3_rx_rwx
drwxr----- 2 USER_A USER_A 4096 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r
-rw------- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat
-rw-r----- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat
drwxrwx--- 2 USER_A USER_A 4096 Nov 5 03:56 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx
-rw------- 1 USER_A USER_A 0 Nov 5 03:56 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx/File3no.dat
-rw------- 1 USER_A USER_A 0 Nov 5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3no.dat
-rw-r----- 1 USER_A USER_A 0 Nov 5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3r.dat
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3rw.dat
USER_B
でrm -rf
を実行する。
$ rm -rf /home/USER_A/*
rm: cannot remove '/home/USER_A/Dir1_r/Dir1_r_rwx': Permission denied
rm: cannot remove '/home/USER_A/Dir2_x': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat': Permission denied
USER_B
によるでrm -rf
実行後に`USER_A`でディレクトリ構成を確認する。
$ ll -d $(find `pwd`) | grep Dir
drwxr----- 3 USER_A USER_A 4096 Nov 5 03:02 /home/USER_A/Dir1_r
drwxrwx--- 2 USER_A USER_A 4096 Nov 5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx/FIle1rw.dat
drwx--x--- 3 USER_A USER_A 4096 Nov 5 03:03 /home/USER_A/Dir2_x
drwxrwx--- 2 USER_A USER_A 4096 Nov 5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx/FIle2rw.dat
drwxr-x--- 3 USER_A USER_A 4096 Nov 5 03:03 /home/USER_A/Dir3_rx
drwxrwx--- 3 USER_A USER_A 4096 Nov 5 03:59 /home/USER_A/Dir3_rx/Dir3_rx_rwx
drwxr----- 2 USER_A USER_A 4096 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r
-rw------- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat
-rw-r----- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat
-rw-rw---- 1 USER_A USER_A 0 Nov 5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat
消えたのは、
/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat
/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat
/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat
/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx
/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx/File3no.dat