それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Linux ディレクトリのパーミッション のおさらい

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

普段意識しないんですが、改めて、調べなおしてみることした

間違ってるかもしれないので、ご指摘いただけると助かります。

Linuxディレクトリの 001(x): execute フラグ

Linuxディレクトリに実行フラグが立っている、立っていないのはなし。

ディレクトリに -x した場合

ディレクトリの内部のエントリ全てにアクセス権を剥奪する。

test/ #  ここを -x する
├── a 
└── bb # サブディレクトリも見えない!
    └── b1

test から x をオフにすると

chmod a-x test

test 以下のファイル全てにアクセス権を失うことになる。

なぜなのか?ディレクトリのパーミッションを探すときに上位ディレクトリから当たる

ls /var/www/test//bb/b1

この場合

  1. /var/
  2. /var/www/
  3. /var/www/test/ ## ここで拒否される
  4. /var/www/test/bb
  5. /var/www/test/bb/b1

この順で、パーミッションが探される。このとき /var/www/test/ で拒否される。

ディレクトリに -r をした場合

ディレクトリの直下エントリ列挙を不能にする

ディレクトリから read を削除すると。

chmod a-r test

こうなる。

test/ # このディレクトリのr は不可能
├── a
└── bb ## ここは読める
    └── b1

一覧が出来ないので、test/bb の存在を知ることが出来ない。 なので、事前に通知している人だけがアクセスできる。(でも総当りできるし完全な隠蔽の意味には不十分だ)

レアケースだが、次のようなパーミッションも存在できる。

others は 読めて、 owner(user)が読めない場合。

takuya@atom:/var/www$ ll test
ls: ディレクトリ test を開くことが出来ません: 許可がありません
takuya@atom:/var/www$ ll -dl   test/
d-wxrwsrwx 3 takuya www-data 4096  5月 27 14:47 test/

othersで読めるので読めそうなものだけど、user の拒否のほうが優先する。誰でも読めるのに、自分だけが読めない。

ディレクトリを w (writable)にすると?

ディレクトリの内部のファイルを( create new , rename ) 出来る。「rename/mv 出来る」は 新規作成と削除ができることと同じ。

まとめる

パーミッション 文字 影響 cd ls
read - ディレクトリ自体の中身一覧を読み取れる。子孫には影響しない。 不可
read r ディレクトリの中身を見みられる
write - ディレクトリ中身を編集できない - -
write w ディレクトリ中身を編集できる - -
execute - ディレクトリの中にアクセスをさせない、子孫にも影響する 不可 不可
execute x ディレクトリの中にアクセスできる "r" による

覚え方

種類 read write execute
ファイル 読む 書く 実行
ディレクト 一覧表示 書き込み 立ち入り

こんな感じ

ちなみに、細いものは、次の通り。

  • copy = 書く(読み込み+ファイル作成)
  • 削除=書く(ディレクトリに書込)
  • 追記 =書く
  • 移動 = 読む+書く≒コピーして削除

このあたりを細かく制御するには chattr を使います。その話はまたどこかで

参考資料

https://wiki.archlinux.org/index.php/File_permissions_and_attributes