WEB TECKS - WEBサイト構築知識いろいろ

chmodの4桁指定設定

更新日:2024-02-21 13:53:26 登録日:2024-02-20 15:46:20
[確認動作環境]
CentOS Stream release 8

Linuxでファイル・ディレクトリの権限変更で利用されるchmodですが、3桁指定で設定する場合が多いと思いますが、4桁指定で特殊な指定を行うこともできます。
4桁指定場合の先頭の数値には以下の4つの意味があります。

0

特に何も変更はなし

1:sticky bit

こちらディレクトリ用の設定で、ファイルに設定しても意味はありません。
設定すると所有者以外、削除やファイル名変更はできないが、誰でもファイル作成できる設定のディレクトリとなります。
所有者が作成したファイルに chmod 666 指定されていても、root以外の他のユーザからは削除できません。
/tmpとかのディレクトリに初期設定されています。

$ #例)
$ chmod 1777 test1

test1ユーザで「/home/test/test1」というディレクトリを作成し動作状況確認

$ su -l test1
$ cd /home/test
$ mkdir test1
$
$ chmod 1777 test1
$
$ #test1ディレクトリの中にファイルを作成
$ cd /home/test/test1
$ touch test1
$ chmod 666 test1
$ ls -alt | grep test1
-rw-rw-rw- 1 test1 test1 0 2月 20 14:44 test1
$
$ #別ユーザでログイン
$ su -l test2
$ cd /home/test/test1
$ rm test1
rm: 'test1' を削除できません: 許可されていない操作です

2:SGID

こちらディレクトリ用の設定で、ファイルに設定しても意味はありません。
設定した場合、ディレクトリ(※1)の中に作成した、ファイルやディレクトリが自動的に、※1ディレクトリのグループと同じグループで設定されます。

$ #例)
$ chmod 2777 test2

test2ユーザで「/home/test/test2」というディレクトリを作成し動作状況確認

$ su -l test2
$ cd /home/test
$ mkdir test2
$
$ chmod 2777 test2
$ ls -alt | grep test2
drwxrwxr-x 2 test2 test2 6 2月 20 13:58 test2
$
$ #別ユーザでログイン
$ su -l test3
$ cd /home/test/test2
$
$ #ファイルを作成
$ touch test3
$
$ #作成したファイルのグループを確認
$ ls -alt | grep test3
-rw-rw-r-- 1 test3 test2 0 2月 20 14:05 test3
$ #↑「test2」のグループが引き継がれている

4:SUID

こちらファイル用の設定です。
設定した場合、そのファイルの所有者の権限で動くようになります。

$ #例)
$ chmod 4755 test4.sh

test4ユーザでtest4.shという実行ファイルを作成し動作状況確認

$ su -l test4
$ cd /home/test
$
$ #test4ユーザのみが読み込めるファイルを作成しておく
$ vi test4.txt
test4test4test4
$ #上記テキストを入力し!wqでviを閉じる
$
$ #test4にのみ読み込み可能な状態に権限設定
$ chmod 600 test4.txt
$
$ #動作確認用シェルスクリプトを作成
$ vi test4.sh
cat test4.txt
$ #上記コードを入力し!wqでviを閉じる
$
$ chmod 4755 test4.sh
$ ls -alt | grep test4.sh
-rwsr-xr-x 1 test4 test4 17 2月 20 15:08 test4.sh
$
$ #別ユーザでログイン
$ su -l test1
$ cd /home/test
$
$ #シェルスクリプトの実行
$ ./test4.sh
test4test4test4
$ #↑test4にのみ読み込めるファイルがtest1からも読み込めている