#
stickyビット
Tag(s):
Linux
stickyビットについて調べてみた。SUSV2ではstickyビットは定義されていないので,ポータブルではないかもしれない。
まずはこの状態。stickyビットは立ててない。
test:~$ ls -l
total 8
drwxrwxrwx 2 hori hori 4096 Jun 25 21:38 d
drwxr-xr-x 3 hori hori 4096 Apr 18 10:34 public_html
ファイルを作成する。
hori:/home/test$ cd d
hori:/home/test/d$ echo hoge > aFile
hori:/home/test/d$ ls -l
total 4
-rw-r--r-- 1 hori hori 5 Jun 25 21:43 aFile
異なるユーザーがファイルを削除する。
test:~$ cd d
test:~/d$ rm aFile
rm: remove write-protected file `aFile'? y
test:~/d$ ls -l
total 0
ディレクトリのパーミッションに w が入っていると,オーナーでなくてもファイルを削除できる。
stickyビットを立ててみる。
test:~/d$ cd ..
test:~$ chmod +t d
chmod: d: 許可されていない操作です
hori:/home/test/d$ cd ..
hori:/home/test$ chmod +t d
hori:/home/test$ ls -l
total 8
drwxrwxrwt 2 hori hori 4096 Jun 25 21:50 d/
stickyビットはディレクトリのオーナーしか設定できない。
もう一度ファイルを作成したり削除したりしてみる。
test:~/d$ echo byTest > aFile
hori:/home/test/d$ rm aFile
rm: remove write-protected file `aFile'? y
ディレクトリのオーナーは,ディレクトリのオーナー以外が作成したファイルを削除できる。
hori:/home/test/d$ echo hoge > aFile
test:~/d$ rm aFile
rm: remove write-protected file `aFile'? y
rm: cannot unlink `aFile': 許可されていない操作です
ディレクトリのオーナーが作成したファイルは,ディレクトリのオーナー以外は削除できない。
手元のLinux機だと,stickyビットが立っているディレクトリでは,ディレクトリのオーナー,ファイルのオーナー,rootのみがファイルを削除できる。
って,Manpage of CHMODにずばり書いてますな。
まぁ,そうすると,プログラムがログを出力する場合に,プログラムを特定のユーザーで動かし,ログディレクトリをそのユーザーが作成してstickyビットを付けておけば,rootかプログラム自身が乗っ取られない限り,ログは安全。
2001.6.26追記。ログなら単にアクセスパーミッションをrwxr-xr-xにすれば十分だな。やっぱり共有ディレクトリ以外に使い道はない?