sudoとrootの正体
前提:1-6までが完了し、ubuntuユーザーのホームディレクトリ(~)にいる状態から始めます(~/practiceという空ディレクトリが存在しています)。ここからいよいよ第2章、この講座の物語の核である「ユーザーと権限」の世界に入ります。まずは全ての管理操作の土台となるsudoとroot(ルート)ユーザーの正体を確認します。whoami・sudo・id・sudo -iを使い、「なぜsudoを付けると特別なことができるのか」を体で理解するのが今回の到達点です。
ここで学ぶ考え方は、次の2-2で練習用ユーザーyumiを作成するときにそのまま使います。
SET 1 ― 自分が誰であるかを確認する
- $whoami
- ubuntu
- $id
- uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),27(sudo)
- $groups
- $sudo whoami
- root
- $sudo id
- uid=0(root) gid=0(root) groups=0(root)
- $cat /etc/shadow
- cat: /etc/shadow: Permission denied
- $sudo cat /etc/shadow
- $ls -l /etc/shadow
- -rw-r----- 1 root shadow 1469 Jul 3 09:12 /etc/shadow
- $ls -l /etc/passwd
- $sudo -v
1行目のwhoami(who am iの略)は「今操作しているのは誰か」を表示するコマンドです。0-3でも使いましたが、改めて確認すると、私たちは今ubuntuという一般ユーザーとして操作しています。2行目のidは、そのユーザーの正体をもっと詳しく見せてくれるコマンドで、UID※1(ユーザーID)・GID(グループID)・所属している全グループが出力例のように並びます。ここで注目してほしいのが末尾の27(sudo)です。ubuntuユーザーはsudoという特別なグループに所属している、という事実がこの後の全ての鍵になります。3行目のgroupsでも同じ所属グループを、より手短な形式で確認できます。
4行目のsudo whoamiを見てください。ただのwhoamiはubuntuと返しましたが、頭にsudoを付けただけで結果がroot※3に変わります。sudoとはSuper User DO※2の略で、「このコマンド1回分だけ、管理者(root)として実行する」という意味の命令です。ubuntuユーザーのままなのに、このコマンドの瞬間だけrootに変身している、とイメージしてください。5行目のsudo idを実行すると、出力例のとおりuid=0(root)と表示され、SET 1冒頭で見た自分自身のIDとは別人であることがはっきりわかります。
この違いを痛感できるのが6行目と7行目の対比です。/etc/shadow※4はユーザーのパスワード情報が暗号化されて記録されている、非常に重要度の高いファイルです。6行目のようにsudoなしでcatすると、出力例のとおりPermission denied(権限がありません)と拒否されます。ところが7行目のようにsudoを付けた瞬間、同じファイルの中身が読めてしまいます。なぜsudoが必要かというと、/etc/shadowはroot以外が読めないよう厳重に守られたファイルだからです。ubuntuユーザーの権限のままでは絶対に読めません。
8行目のls -l /etc/shadowでその理由を裏付けます。出力例の先頭にある-rw-r-----という権限表示(詳しくは2-4で読み方を学びます)と、所有者root・所有グループshadowから、「rootと一部の特権グループしかこのファイルに触れない」設計になっていることがわかります。9行目で/etc/passwd(こちらはユーザー一覧を記録する別のファイルで、2-2で詳しく扱います)の権限も見比べておくと、同じ「ユーザー情報」でも守られ方が全く違うことに気づけます。最後の10行目のsudo -vは、直前に入力したパスワードの有効期限をリセットし、しばらくパスワード入力なしでsudoを使えるようにするコマンドです(validate=検証の意味)。
sudoは「パスワードを入れれば何でもできる魔法の呪文」ではありません。実行するたびにログが記録され、誰が・いつ・何を管理者権限で行ったかが追跡できるようになっています。安易に何にでも付ければいいという考え方は、この講座では避けてほしいと思います。

あたしもこの章で生まれるんだけど、まだ登場してないから知らない話として聞いてね! sudoって最初は「エラーが出たらとりあえず頭に付ける呪文」だと思っちゃいがちなんだけど、実は「今だけ特別に管理者になります」っていう重い宣言なんだよ。うっかりsudo rm -rfとか打つと大惨事になるから、意味もわからず付けるのは絶対ダメ、って覚えておいてね!
SET 2 ― rootになりきる(sudo -i)
- $pwd
- /home/ubuntu
- $echo $HOME
- $sudo -i
- #whoami
- root
- #pwd
- /root
- #echo $HOME
- #id
- #ls -la /root
- #exit
- $whoami
- ubuntu
1行目で現在地がホームディレクトリであることを確認し、2行目のecho $HOMEで環境変数$HOMEが/home/ubuntuであることも確認しておきます。3行目のsudo -iがこのセットの主役です。ここまでのsudo コマンドは「そのコマンド1回だけ管理者権限で実行する」ものでしたが、sudo -iは違います。rootユーザーとしてログインし直し、そのままrootのシェル(操作画面)に居座るという、一段階踏み込んだ命令です。実行するとターミナルのタイトルバーとプロンプトの記号が切り替わることに注目してください。プロンプトが$から#に変わったら、それは今この瞬間からrootとして操作している合図です。
4行目のwhoamiでrootになったことを確認し、5行目のpwdを見ると、なんとホームディレクトリが/home/ubuntuではなく/rootに変わっています。6行目のecho $HOMEでも同じく/rootが返り、SET 2冒頭で見たubuntuの$HOMEとは別物になっていることがわかります。これはsudo -iが単に権限を貸すだけでなく、rootという別人の環境に完全にログインし直しているためです。7行目のidを打てば、uid=0(root)という表示が確認できるはずです。Linuxの世界ではUID 0が常にrootを意味します。8行目のls -la /rootで、root専用のホームディレクトリの中身も覗いておきましょう。
9行目のexitでrootのシェルから抜け、元のubuntuユーザーに戻ります。最後の10行目のwhoamiで、無事ubuntuユーザーに戻れたことを確認して締めくくります。rootのシェルに入りっぱなしにしないことが重要です。rootは全てのファイルを削除でき、全ての設定を変更でき、ミスをしても止めてくれる仕組みがありません。用が済んだらexitですぐに一般ユーザーへ戻る習慣をつけましょう。
sudo コマンドとsudo -iの違いは「一瞬だけ変身」か「変身したまま行動する」かです。1〜2個のコマンドで済むならsudo コマンド、複数の管理操作を連続して行うときだけsudo -iを使う、と使い分けるのが安全です。この講座でも、基本はsudo コマンド形式で進めます。
SET 3 ― sudoの設定を覗く
- $cat /etc/sudoers
- cat: /etc/sudoers: Permission denied
- $sudo cat /etc/sudoers
- %sudo ALL=(ALL:ALL) ALL
- $ls -l /etc/sudoers
- $ls /etc/sudoers.d
- $which visudo
- /usr/sbin/visudo
- $sudo -l
- $groups
- ubuntu adm sudo
- $sudo -k
- $cd ~
- $pwd
1行目で/etc/sudoersというファイルを見ようとしますが、これも/etc/shadowと同様にPermission deniedで拒否されます。2行目のようにsudoを付けて初めて中身が見えます。この/etc/sudoers※5こそが、「誰がsudoを使えるか」を定義している設定ファイルの本体です。出力例にある%sudo ALL=(ALL:ALL) ALLという行は、「sudoグループに所属するユーザーは、全てのホストで、全てのユーザーとして、全てのコマンドを実行してよい」という意味です。SET 1で確認した「ubuntuユーザーがsudoグループに入っているから管理者権限を使える」という事実が、この1行に直結しています。
3行目のls -lで権限を見ると、/etc/shadowと同じくroot以外は書き込めない(多くの場合、読み取りすら制限された)厳重な設定になっていることがわかります。このファイルは直接編集してはいけません。書式を1文字でも間違えるとsudoコマンド自体が使えなくなり、最悪の場合サーバーを操作できなくなってしまいます。そのため専用の編集コマンドvisudoが用意されています。4行目のls /etc/sudoers.dは、/etc/sudoers本体を直接編集しなくても、このディレクトリに設定ファイルを追加する形で権限ルールを拡張できる仕組みがあることを覗いています(中身は空か、Lightsailの初期設定ファイルが1つある程度です)。5行目のwhich(1-5で学んだコマンド)でvisudoの存在だけ確認しておきます。visudoは書式を自動チェックしてくれる安全装置付きのエディタで、今回は「存在を知る」だけにとどめ、実際の編集はこの講座では扱いません。
6行目のsudo -l(list)は、今の自分にどんなsudo権限が許可されているかを一覧表示するコマンドです。7行目のgroupsは、idより手軽に所属グループだけを一覧できるコマンドです。8行目のsudo -k(kill timestamp)は、SET 1のsudo -vとは逆に、パスワード入力なしでsudoを使える猶予時間を強制的にリセットするコマンドです。これを打つと次にsudoを使う際は必ずパスワードを聞かれるようになります。9行目のcd ~、10行目のpwdでホームディレクトリに戻ったことを確認し、このページを締めくくります。

/etc/sudoersを直接vimとかで開いて編集するの、絶対やめてね! 書式ミスったまま保存するとsudo自体が壊れて、詰みかけたって話をよく聞くよ。編集したくなったらsudo visudoって呪文だけ覚えておけば十分。今日は「そういうコマンドがあるんだ〜」って知るだけでOKだよ!
root・sudoグループ・/etc/sudoersの関係を整理すると、「root=全能の管理者」「sudoグループ=rootになる許可証を持つ一般ユーザーの集まり」「/etc/sudoers=その許可証のルールブック」という3層構造になっています。次の2-2で作るyumiは、最初はこのsudoグループに入りません。「特別な許可がない限り、一般ユーザーは管理操作ができない」という原則を、yumiを通して体感していきます。
まとめ
2-1では、管理者権限の正体であるrootユーザーと、それを一時的に借りる仕組みであるsudoコマンドの関係を確認しました。このページで叩けるようになったコマンドを一覧にまとめます。
| コマンド | 何をするか | 覚え方 |
|---|---|---|
whoami | 今操作しているユーザー名を表示する | who am I(私は誰) |
id | UID・GID・所属グループを詳しく表示する | identity(身分証明) |
sudo <コマンド> | そのコマンド1回だけを管理者権限で実行する | Super User DO(管理者として実行) |
sudo -i | rootとしてログインし、rootのシェルに入る | -i = interactive(root環境に入る) |
exit | 今のシェル・ログインセッションから抜ける | 抜け出す |
groups | 自分が所属するグループ一覧を表示する | groupsそのまま |
ls -l /etc/shadow | 重要ファイルの権限・所有者を確認する | 誰が触れるファイルか見る |
which visudo | sudoers編集専用コマンドの場所を確認する | 存在だけ知っておく |
次のページ「2-2. yumiを作成する」では、いよいよsudo adduserを使って、この講座を一緒に歩む練習用ユーザーyumiをサーバーに迎え入れます。
- UID(User ID) … 各ユーザーに割り当てられる識別番号。人間にはユーザー名で見えるが、Linux内部ではこの数字で管理されている。rootは必ず0。↩
- sudo(Super User DO) … 「スードゥー」と読む。一般ユーザーが一時的に管理者(root)権限でコマンドを実行するための仕組み。実行にはパスワード入力を求められる場合がある。↩
- root … Linuxシステムにおける最上位の管理者ユーザー。UIDは常に0で、あらゆるファイルの読み書き・あらゆる設定変更ができる、いわば「校長先生かつ用務員かつ警備員」を兼ねる存在。↩
- /etc/shadow … 全ユーザーのパスワード情報(暗号化済み)が記録されたファイル。root以外は読み書きできないよう厳重に保護されている。↩
- /etc/sudoers … 「誰がsudoを使えるか」「何を許可するか」を定義する設定ファイル。直接編集せず、専用コマンド
visudoを使うのが鉄則。↩