読者です 読者をやめる 読者になる 読者になる

ディレクトリのパーミッション

Linux

基礎的なことを再確認してばっかりな気がするけど、結構正確に理解してなかった気がする。
ディレクトリに書き込み(w)不可能かつ実行(x)不可能だとファイルの作成と追記が不可。
ディレクトリが実行(x)不可能だと追記が不可。

追記

kitokitoki: これ、僕もいっつも忘れてて、そのたびに調べ直してます。

はてなブックマーク - ディレクトリのパーミッション/ - Humanity

超基礎的なことだったのでid:kitokitokiさんにこう言ってブクマしてもらってうれしかったので、言葉だとわかりにくいので表作ってみた。表組み記法便利。

やれること r-- r-x rw- rwx
ファイルの作成 不可能 不可能 不可能 可能
ファイルへの追記 不可能 可能 不可能 可能
ls dir/ データのみ読み出し可能*1 可能 データのみ読み出し可能 可能

見づらくなりそうだったのでrがない場合は分けた。

やれること --- --x -w- -wx
ファイルの作成 不可能 不可能 不可能 可能
ファイルへの追記 不可能 可能 不可能 可能
ls dir/ 不可能 不可能 不可能 不可能

ls dir/に関してはrがあればファイルのリストを読み出し可能、xがあるとメタデータも読み出し可能ってことか。

試した時のログ *2

$ mkdir root
$ ls root/
$ touch root/{foo,bar,baz}
$ ls -ld root/
drwxr-xr-x 2 tyru tyru 4096 2012-04-15 19:53 root/
$ sudo chown root:root root/
[sudo] password for tyru:
$ ls -ld root/
drwxr-xr-x 2 root root 4096 2012-04-15 19:53 root/
$ ls -l root/
合計 0
-rw-r--r-- 1 tyru tyru 0 2012-04-15 19:53 bar
-rw-r--r-- 1 tyru tyru 0 2012-04-15 19:53 baz
-rw-r--r-- 1 tyru tyru 0 2012-04-15 19:53 foo
$ echo hehehe >root/foo
zsh: ファイルが存在します: root/foo
$ echo hehehe >>root/foo                                                                                                                                         [1]
$ touch root/hoge
touch: `root/hoge'にtouchできませんでした: 許可がありません
$ sudo chmod g-x root/                                                                                                                                           [1]
$ sudo chmod o-x root/
$ l -ld root/
drwxr--r-- 2 root root 4.0K 2012-04-15 19:53 root/
$ echo hehehe >>root/foo
zsh: 許可がありません: root/foo
$ touch root/hoge                                                                                                                                                [1]
touch: `root/hoge'にtouchできませんでした: 許可がありません
$ sudo chmod g+w root/                                                                                                                                          [20]
$ sudo chmod o+w root/
$ ls root/
ls: root/barにアクセスできません: 許可がありません
ls: root/fooにアクセスできません: 許可がありません
ls: root/bazにアクセスできません: 許可がありません
bar  baz  foo
$ touch root/hoge                                                                                                                                                [1]
touch: `root/hoge'にtouchできませんでした: 許可がありません
$ ls -ld root/                                                                                                                                                   [1]
drwxrw-rw- 2 root root 4096 2012-04-15 19:53 root/
$ sudo chmod 777 root/
$ touch root/hoge

*1:メタデータは読み出し不可能?ls dir/とls -l dir/を試すとそれぞれこんなエラーが出てメタデータは表示できない

*2:追記分は載ってない