-bash$ cd /tmp -bash$ mkdir T -bash$ ls -ld T drwxr-xr-x 2 arisawa wheel 68 23 Apr 10:31 T -bash$ touch T/a -bash$ chmod 666 T -bash$ ls -l T ls: a: Permission denied -bash$ cd T -bash: cd: T: Permission denied -bash$ touch T/a touch: T/a: Permission denied -bash$ rm T/a rm: T/a: Permission denied -bash$ >T/a -bash: T/a: Permission denied -bash$ cat T/a cat: T/a: Permission denied -bash$つまり x ビットを外すことによってディレクトリは完全に鍵をかけられたことになる。
The perm symbols represent the portions of the mode bits as follows: .... x The execute/search bits.
term% mkdir T term% touch T/a term% chmod 666 T term% cd T term% ls -l --rw-rw-r-- M 8 arisawa arisawa 0 Apr 23 10:39 a term% cat a cat: can't open a: 'a' permission denied term% touch a touch: a: cannot create: file already exists term% rm a rm: a: 'a' permission denied term% >a a: rc: can't open: file already exists term% cp a b cp: can't stat a: 'a' permission denied term% touch b term%Plan 9 では x ビットを外してもディレクトリの中に入って行ける。そしてディレクトリの rw ビットの意味は保たれているようだ。この実験を見る限り x ビットを外す事によって、ディレクトリの中のファイルに対する全てのオペレーションが禁止されているように見える。
以下はディレクトリTを新たに作成し
cd T ls touch a cat a touch -c a rm aの操作をこの順に行った時の、いろいろな rwx ビットの組み合わせに対する実験である。
mod | cd T | ls | touch a | cat a | touch -c a | rm a |
---|---|---|---|---|---|---|
--- | OK | denied | denied | |||
--x | OK | denied | denied | |||
-w- | OK | denied | OK | denied | denied | denied |
-wx | OK | denied | OK | OK | OK | OK |
r-- | OK | OK | denied | |||
r-x | OK | OK | denied | |||
rw- | OK | OK | OK | denied | denied | denied |
rwx | OK | OK | OK | OK | OK | OK |
書き込みオープンについても実験した方が良いのだが、結果は予想通りであろう。
chmod +t Tを実行すればよい。
mkdir T/arisawa chmod 770 T/arisawa touch T/arisawa/fooとすれば foo は他のユーザから保護されている。他のユーザは
rm T/arisawa/fooを実行しても T/arisawa のディレクトリの許可ビットのために拒否される。
rm -rf T/arisawaが存在する。他方、直接 T/arisawa を消そうとしてもディレクトリが空ではないと言って断られる。
この例では chmod 770 として他のユーザを強く排除したが、0 ではなく、もっと緩いビットを立てることもできる。
ここで述べた考え方は /cron/*/cron に適用されている。