権限

INPUT · スライド

持ち主とグループ

01 / 08

9文字は「誰の」だったか

ここまで9文字の読み方と変え方をやってきたね。でも大事なことをまだ確かめていないよ。

-rw-r--r--  1 manabiya manabiya  52 memo.txt              ↑        ↑            持ち主   グループ

9文字は「持ち主・グループ・その他」に効くと言ったけれど、その持ち主が誰なのかls -l の3列目に書いてあるんだ。

manabiya だね。これはあなたのことだよ。だから memo.txt に対して、あなたは「持ち主」の枠の権限(rw-)を使うことになる。

今日はこの枠の選び方をやるよ。ここが分かると、ls -l を見て「自分は何ができるのか」を正しく言えるようになるんだ。

02 / 08

自分は誰なのか

まず自分を確かめる道具が3つあるよ。

~ $ whoamimanabiya~ $ iduid=100(manabiya) gid=101(manabiya) groups=101(manabiya)~ $ groupsmanabiya
コマンド出るもの
whoami名前だけ
id番号と名前を全部
groups入っているグループ

id の中身を読んでみよう。

  • uid=100あなたの番号(user id)
  • gid=101主なグループの番号(group id)
  • groups=101 … 入っているグループの一覧

人には名前と番号の両方があるんだ。Linux が実際に見ているのは番号で、名前は人が読むための飾りだよ。ls -l が名前を出してくれるのは、番号から引いてきているんだ。

03 / 08

3つのうち、1つだけが選ばれる

ここが今日いちばん大事なところだよ。9文字のうち、あなたに効くのは3文字だけなんだ。

選び方は上から順に、最初に当たったものだけだよ。

1. あなたが持ち主? → 持ち主の3文字を使う。ここで終わり
2. 違うなら、あなたはそのグループに入っている? → グループの3文字。ここで終わり
3. どちらも違うなら → その他の3文字

注意してほしいのは「ここで終わり」という部分だよ。足し合わせたりしないんだ。

つまり -rw-r--r-- のうち、持ち主のあなたが使うのは rw- だけ。グループの r-- やその他の r-- は、あなたには関係ない

当たり前に聞こえるかもしれないけれど、これが思わぬ結果を生むことがあるよ。次のスライドで見てみよう。

04 / 08

持ち主だから、損をすることがある

変な権限を作ってみよう。

~ $ chmod 077 memo.txt~ $ stat -c %A memo.txt----rwxrwx~ $ cat memo.txtcat: can not open memo.txt: Permission denied

読めない。グループとその他には rwx が全部あるのに、持ち主のあなたが読めないんだ。

なぜだろう。あなたは持ち主だから、持ち主の枠(---)で判定されて終わりなんだよ。「その他の枠なら読めるのに」とは考えてくれない。

これが「1つだけが選ばれる」ということの意味だよ。持ち主であることが不利に働くという、少し不思議な状況が作れるんだ。

実際にはこんな権限を作らないけれど、この仕組みを知っていると読み間違いが減るよ。「その他に権限があるから大丈夫」と思っていたら、自分だけが弾かれていた——そういう事故を避けられるんだ。

05 / 08

持ち主は自分では変えられない

持ち主を変えるコマンドは chown(change owner)だよ。でも打ってみると断られるんだ。

~ $ chown daemon memo.txtchown: memo.txt: Operation not permitted

あなたのファイルなのに、あげることができない。これは Permission denied とは別の言葉だね。「その操作は許されていない」という意味で、root しかできない操作にぶつかったときに出るんだ。

なぜ禁じられているんだろう。押し付けを防ぐためだよ。

もし誰にでもあげられたら、こういう困ったことができてしまう。

  • 巨大なファイルを人に押し付けて、容量の制限を回避する
  • 都合の悪いファイルを人のものにして、責任を移す

だから「あげる」は管理者だけの操作なんだ。chgrp(グループを変える)も同じで、自分が入っていないグループには渡せないよ。

次の章で root になれば、両方できるようになるからね。

06 / 08

持ち主以外は chmod もできない

もう1つ確かめておこう。権限を変えられるのは持ち主だけだよ。

~ $ chmod 644 /etc/passwdchmod: /etc/passwd: Operation not permitted

/etc/passwd は元から 644 なので、この指示は何も変えないはずだよね。それでも断られる。変える資格そのものが無いからだよ。

ここで大事なことが見えてくるよ。ls -lw が無くても、持ち主なら自分で w を付けられる

chmod u-w memo.txt   # 書けなくするchmod u+w memo.txt   # また書けるようにする

つまり自分のファイルに対しては、権限はうっかり防止の柵であって、閉じ込める壁ではないんだ。

本当の壁になるのは、持ち主が自分ではないときだよ。/etc/passwd を書き換えられないのは、w が無いからではなく root のものだからなんだ。

07 / 08

誰のものかで探す

find には持ち主で絞る旗があるよ。章3で覚えた find に、今日の知識が足せるんだ。

find . -user manabiya       # 自分のものfind . -group manabiya      # 自分のグループのものfind /etc -user root        # root のもの

本物のサーバーではこう使うよ。

find /home -user taro       # 退職した人のファイルを探すfind / -user nobody         # 持ち主が怪しいものを探す

持ち主という切り口で探せると、片付けや調査ができるようになるんだ。

名簿そのものを読むこともできるよ。誰がいるかは /etc/passwd、どんなグループがあるかは /etc/group に書いてあって、どちらも誰でも読めるファイルだよ。

grep manabiya /etc/passwd

自分の行が見つかるはずだよ。何が書いてあるかは問題の中で読んでみよう。

08 / 08

さあ、打ってみよう

ホームには memo.txtnikki.txt、それに shorui/ があるよ。全部あなたのものだよ。

今日の問題ではわざと失敗するものがいくつかあるよ。chownchgrp は断られるのが正解だから、エラーが出ても大丈夫。どんな言葉で断られるかを読むのが目的だよ。

エラーの言葉を2つ、区別できるようにしておこう。

言葉意味
Permission denied権限の9文字が足りない
Operation not permittedroot しかできない操作をやろうとした

前者は chmod で直せるけれど、後者は直せないよ。管理者になるしかない。だから次の章があるんだ。