権限

INPUT · スライド

ディレクトリの権限

01 / 08

ずっと後回しにしてきた話

この章の最初から、1つだけ説明を先延ばしにしてきたことがあるよ。ディレクトリの x だね。

~ $ ls -ld shoruidrwxr-xr-x  shorui   ↑ この x は何?

ディレクトリを「実行」するって、どういうこと? 入れ物は動かせないよね。

そう、ディレクトリの x は「実行」ではないんだ。3文字とも、入れ物では意味が変わるよ。

ここが分かっていないと、こういう現象が謎のままになるんだ。

  • ls はできるのに cd できない
  • 書けないはずのファイルが消せてしまう
  • 中のファイル名は見えるのに、開けない

全部、今日で説明がつくよ。

02 / 08

入れ物での r・w・x

ファイルと並べて見てみよう。

文字ファイルでは入れ物では
r中身が読める名前の一覧が読める
w中身が書ける中のものを増やせる・減らせる
x実行できる通り抜けられる

入れ物を「名前が書かれた台帳」だと思うと分かりやすいよ。

  • r … 台帳をめくって名前を読むls ができる)
  • w … 台帳に行を足す・消す(ファイルを作る・消す)
  • x … その先へ進むcd する、中のものに手を伸ばす)

x がいちばん大事だよ。x が無いと、中に何があっても手が届かないんだ。名前が分かっていても開けない。

03 / 08

x が無いと通り抜けられない

x を外してみよう。

~ $ chmod 600 shorui~ $ cd shorui-sh: cd: can not cd to shorui: Permission denied

600rw-、つまり x が無い状態だね。だから入れない

x が無いと、そのディレクトリは「行き止まり」になるよ。

  • cd で入れない
  • 中のファイルを cat できない(名前が分かっていても)
  • その先のディレクトリにも進めない

通り道の権限だと考えると納得できるよ。/home/manabiya/shorui/naka.txt を開くには、/homemanabiyashorui全部に x が必要なんだ。どこか1つでも欠けたら、そこで止まる。

だからディレクトリには最初から x が付いていたんだね。無いと使えないからだよ。

04 / 08

rx は別々に効く

面白いのは、rx を別々に外せることだよ。

x だけある(-wx = 300)とき

~ $ chmod 300 shorui~ $ ls shoruils: can not open shorui: Permission denied~ $ cat shorui/naka.txtなかみだよ

一覧は読めないのに、名前を知っていれば開ける。台帳をめくる権限は無いけれど、通り抜ける権限はあるからだね。

r だけある(r-- = 400)とき

~ $ chmod 400 shorui~ $ ls shoruils: shorui/naka.txt: Permission denied

逆になるよ。名前は読めたのに、その先へ進めない。だから大きさや日付を調べられなくて、エラーになるんだ。

この2つは「隠す」やり方として実際に使われるよ。300 にすると中身を知っている人だけが使える入れ物になるんだ。

05 / 08

消せるかどうかは、入れ物で決まる

ここが今日いちばん驚くところだよ。

~ $ chmod 444 shorui/naka.txt   # 誰も書けないファイル~ $ rm shorui/naka.txt~ $ ls shorui(何も無い)

消えた。書けないはずのファイルなのに。

理由はこうだよ。ファイルを消すのは、そのファイルを書き換える操作ではないんだ。入れ物の台帳から行を1つ削る操作なんだよ。

だから必要なのは入れ物の w で、ファイル自身の w は関係ないんだ。

逆もあるよ。

~ $ chmod 500 shorui      # 入れ物に w が無い~ $ rm shorui/naka.txtrm: can not remove shorui/naka.txt: Permission denied

入れ物に w が無ければ、中のファイルが 777 でも消せない

「守りたければファイルではなく入れ物を固める」——これが Linux での正しい守り方なんだ。

06 / 08

755700 の意味

入れ物でよく使う形は2つだけだよ。

数字記号意味
755drwxr-xr-x他の人も見て通れる(既定)
700drwx------自分だけ入れる

755 を読んでみよう。その他は r-x、つまり「名前は読めて通り抜けられるけれど、増やしたり消したりはできない」。見学はできるが物は置けないという状態だね。

700 は前のレッスンで見た /root と同じ形だよ。管理者の部屋が drwx------ だったのを思い出してね。他の人は --- なので、中に何があるかすら分からない

覚え方はこうだよ。入れ物は 755 か 700。ファイルは 644 か 600。この4つで日々のほとんどが足りるんだ。

数字の下2桁が「他の人に見せるか」を決めているのは、ファイルのときと同じだね。

07 / 08

-R で中までまとめて

ディレクトリの中身までまとめて変えたいときは -R を付けるよ。

chmod -R 700 shorui

-R は recursive(再帰的)の頭文字で、「中のものも全部」という意味だよ。章3の find や章5の道具でも見た考え方だね。

ただし気をつけてほしいことがあるよ。ファイルと入れ物に同じ数字を付けてしまうんだ。

chmod -R 755 shorui

これだと中のテキストファイルまで 755 になって、実行の印が立ってしまう。データに x は要らないよね。

正しくやるなら、find と組み合わせて種類で分けるんだ。

find shorui -type d -exec chmod 755 {} +find shorui -type f -exec chmod 644 {} +

章3で覚えた -type d-type f がここで効いてくるよ。入れ物には 755、ファイルには 644 と分けて付けられるんだ。

08 / 08

さあ、打ってみよう

ホームには shorui/ という入れ物があって、中に naka.txtなかみだよ と書いてある)が入っているよ。あとは memo.txt だね。

今日の問題はわざと使えなくして、確かめて、直すという流れが多いよ。入れ物の権限は自分の足を撃ちやすいので、ここで安全に体験しておこう。

1つ助けになる話をしておくね。もし cd できなくなって困っても、あなたは持ち主だから chmod で開け直せる。前のレッスンでやったとおり、権限が無くても持ち主の資格は残っているからね。

そして問題が変わるたびに Linux は作り直されるので、壊したままでも次に進めるよ。安心して壊してみて。