ユーザーとグループ

INPUT · スライド

root になる(`su`)

01 / 08

越えられなかった壁

前の章で、どうしても越えられない壁が3つあったのを覚えているかな。

chown root memo.txtchown: memo.txt: Operation not permitted

Permission denied とは違う言葉だったね。chmod をどういじっても直せないお断りだった。

やりたかったこと断られ方
持ち主を変えるOperation not permitted
入っていないグループへ渡すOperation not permitted
他人のファイルの権限を変えるOperation not permitted

共通しているのは「あなたには資格が無い」ということだよ。

では誰なら資格があるんだろう。それが今日の主役、root だよ。

02 / 08

root とは何か

root は特別なユーザーだよ。特別さの中身はたった1つ。

> 権限の検査をすべてすり抜ける

9文字がどうなっていても関係ないんだ。000(誰も何もできない)のファイルでも読めるし、他人のファイルの持ち主も変えられる。

見分け方も決まっているよ。root の番号(uid)は必ず 0 なんだ。

~ $ id -u100          ← あなた(root なら 0 になる)

名前が root かどうかではなく、番号が 0 かどうかで決まるよ。だからスクリプトで「いま管理者か?」を確かめるときは id -u0 かを見るんだ。前の章の練習でそう書いたのを覚えているかな。

名前は変えられても、0 という番号の意味は変えられない。だから番号で見るほうが確実なんだよ。

03 / 08

su で切り替える

切り替えるコマンドは su(switch user)だよ。

~ $ suPassword:

パスワードを聞かれるので打つよ。この教材では manabiya だよ。

打っているあいだ、画面には何も出ないからね。* すら出ないので「効いていないのかな」と思うけれど、ちゃんと届いているよ。これは覗き見を防ぐための作りなんだ。

⏎ を押すと切り替わるよ。

/home/manabiya $ whoamiroot

whoamiroot を返せば成功だよ。

パスワードを間違えると su: Authentication failure と出て、元のまま何も起きないよ。もう一度打てばいいから、慌てないでね。

04 / 08

プロンプトでは見分けられない

多くの教科書にはこう書いてあるよ。「$ は一般ユーザー、# は root」。

~ $     ← 一般ユーザー~ #     ← root

覚えておく値打ちのある習わしだよ。でもこの教材の Linux では # にならないんだ。切り替えても $ のままだよ。

~ $ suPassword:/home/manabiya $

表示が変わったのは、~(ホーム)が /home/manabiya(そのままの道)になったところだけ。root のホームは /root なので、いまいる場所がホームでなくなったからだね。

つまりプロンプトを頼りにしてはいけないということだよ。確かめる方法は1つ。

whoami

本物の現場でも、これが一番確実だよ。プロンプトは設定で自由に変えられるので、# が出ていても root でないことがあるんだ。

05 / 08

exit で戻る

戻り方は exit だよ。

/home/manabiya $ exit~ $ whoamimanabiya

仕組みを知っておくと分かりやすいよ。su新しいシェルを上に立ち上げているんだ。元のシェルは下で待っている。

[ manabiya のシェル ]  ← su する前[ root のシェル      ]  ← su したあと(上に乗る)[ manabiya のシェル ]  ← exit で上が消える

だから exit は「root をやめる」のではなく「上のシェルを閉じる」んだ。2回 su したら 2回 exit が要るよ。

そして大事な習慣がひとつ。root でいる時間はできるだけ短くする

理由は単純だよ。root には止めてくれるものが何も無いrm -rf / と打てば、本当に全部消える。一般ユーザーなら権限が守ってくれるけれど、root ではその守りが無いんだ。

用が済んだらすぐ exit。これを手癖にしておこう。

06 / 08

root で作ると、root のものになる

見落としやすい落とし穴を1つ。

/home/manabiya $ touch atarashii.txt/home/manabiya $ exit~ $ ls -l atarashii.txt-rw-r--r-- 1 root root 0 atarashii.txt

持ち主が root になっているね。root として作ったからだよ。

何が困るんだろう。あなたはもう manabiya に戻っているので、そのファイルを書き換えられないんだ。他人(root)のファイルになってしまったからね。

これは実際によくある事故だよ。root で作業して、あとから一般ユーザーで触ろうとして Permission denied になる。原因は自分がさっき root で作ったこと、というわけだね。

直すには、また root になって chown manabiya atarashii.txt を打つんだ。

root で作業したら、作ったものの持ち主を確かめる。この癖があると、後々の面倒をずいぶん減らせるよ。

07 / 08

sudo はこの環境に無い

本物の現場では、su より sudo を使うことが多いよ。

sudo chown root memo.txt     # この1行だけ管理者として実行

違いは範囲だよ。

範囲パスワード
su抜けるまでずっと rootroot のパスワード
sudoそのコマンド1つだけ自分のパスワード

sudo のほうが安全だよ。root でいる時間が1コマンドぶんで済むし、root のパスワードを人に教える必要も無い。誰が何をしたかも記録に残るんだ。

でもこの教材の Linux には入っていないよ。

~ $ sudo ls-sh: sudo: not found

小さく作るために外してあるんだ。だからここでは su で同じことをやるよ。考え方は同じだからね。

卒業して自分のパソコンや借りたサーバーを触るときは、sudo が主役になると覚えておいてね。

08 / 08

さあ、打ってみよう

ホームには2つのファイルがあるよ。

  • himitsu.txtひみつのなかみ と書いてある
  • mono.txtわたしのもの と書いてある

打ち方の流れはどの問題も同じだよ。

1. su と打つ
2. Password: が出たら manabiya と打つ(画面には出ないよ)
3. 用を済ませる
4. exit で戻る

4つめを忘れないでね。忘れたまま次の問題に進むと、作ったものが全部 root のものになってしまうよ。

もし忘れても、この教材では問題が変わるときに自動で戻してくれるから安心して。でも本物の端末には誰も戻してくれないからね。ここで手癖をつけておこう。