🐧 Linux 総合学習プラットフォーム
セキュリティ/権限強化 ・ 中級

ユーザ権限とsudo

sudo は「この1コマンドだけ管理者として実行する」ための仕組みです。root に直接ログインする代わりに、許可された一般ユーザが自分のパスワードで管理操作を行えます。誰が何を sudo できるかは /etc/sudoers で定義され、編集には文法チェック付きの visudo を使います。sudo を通した操作はログに残るため、「いつ・誰が・何をしたか」を後から追える点も安全管理に役立ちます。

root のパスワードをチーム全員で共有し、みんなでログインする。よくある運用だが、これが危うい。

何か事故が起きても、誰が何をしたか分からなくなる。パスワードが一度漏れれば、被害は甚大だ。

この困りごとを根本から解くのが sudo(superuser do)である。

💡
ポイントsudo は「この1コマンドだけを管理者として実行する」道具。各自は自分のアカウントとパスワードのまま管理操作ができる。

許可された一般ユーザが「この1コマンドだけを管理者として実行する」ための仕組みだ。各自は自分のアカウントとパスワードのまま、必要な管理操作だけを行える。

sudo dnf install httpd / sudo systemctl restart sshd ……管理コマンドの前に sudo を付けるだけ。

使い方は単純で、管理者権限が要るコマンドの前に sudo を付けるだけだ。たとえば `sudo dnf install httpd` でパッケージを導入し、`sudo systemctl restart sshd` でサービスを再起動する。

実行すると初回に自分のパスワードを尋ねられる(root のパスワードではない点に注意)。認証が通ると、一定時間は再入力なしで続けて sudo を使える。

この猶予は既定でおおむね5分ほどだ。ターミナルを離れる時間が長ければ、再び聞かれる。

では、ずっと root になれる su とは何が違うのか。

⚖ sudo と su の違い

似た仕組みに su(switch user)がある。`su -` とすると root に切り替わり、以後ずっと root として作業できる。

su -root のパスワードが要るずっと root のまま作業強い権限を長時間 保持sudo cmd自分のパスワードでよい1コマンドだけ借りる強い権限は最小限の時間

だが、これは強い権限を長時間持ち続けることになり、最小権限の観点からは好ましくない。また su は root のパスワードそのものを必要とする。

対して sudo は、root のパスワードを配らずに、自分のパスワードで、1コマンドだけ、必要な範囲に限って権限を借りる方式だ。

コツ連続で管理コマンドを打ちたいときは `sudo -i`(または `sudo su -`)で root シェルに入れる。用が済んだら exit で速やかに抜ける。

どうしても複数の管理コマンドを連続で打ちたいときは `sudo -i`(または `sudo su -`)で対話的な root シェルに入れる。ただし用が済んだら exit で速やかに抜ける、という節度が大切になる。

基本は「su で居座らず、sudo で都度借りる」と覚えてほしい。

では、その「誰に何を許すか」は、どこで決まっているのか。

📜 誰が何を sudo できるか — /etc/sudoers と visudo の役割

sudo の権限は /etc/sudoers という設定ファイルで定義される。

ここに「どのユーザ(またはグループ)が・どのホストで・誰として・どのコマンドを実行できるか」を1行で記述する。

たとえば `user01 ALL=(ALL) ALL` は「user01 はすべてのホストで、すべてのユーザとして、すべてのコマンドを sudo できる」という意味だ。

user01 ALL=(ALL) /usr/bin/systemctl restart httpd ……このユーザには httpd の再起動だけを許す最小権限の設定。

コマンドを絞りたいときは末尾を具体的に書く。`user01 ALL=(ALL) /usr/bin/systemctl restart httpd` のようにすれば、そのユーザは httpd の再起動だけを sudo できる、という最小権限の設定になる。

RHEL/MiracleLinux系では、wheel グループに入れたユーザに sudo を許す設定が用意されている。`%wheel ALL=(ALL) ALL` という行が該当する(先頭の % はグループを表す)。

つまずきusermod -aG wheel user01 の -aG は a を忘れると既存グループから外れてしまう。必ず a を付ける。

そのため、あるユーザに管理権限を与える最も手軽な方法は `usermod -aG wheel user01` で wheel グループに追加することだ(-aG の a を忘れると既存グループから外れてしまうので必ず付ける)。

ところで、この sudoers を直接エディタで開いて編集してはいけない、という鉄則がある。なぜか。

🛡 sudoers は必ず visudo で編集する

ここで強く守ってほしいのが、sudoers ファイルを直接エディタで開かず、必ず visudo コマンドで編集することだ。

理由は、しくじったときの代償が大きすぎるからである。

つまずきsudoers に文法エラーがあると sudo 自体が動かなくなる。しかも修正にその sudo が要る、という八方塞がりに陥る。

sudoers に文法エラーがあると sudo 自体が動かなくなる。しかも修正にはその sudo が必要、という八方塞がりに陥りかねない。

編集して保存visudo保存時に文法チェック正しい → 書き込む反映OK誤り → 警告して止める事故を未然に防ぐ

visudo は保存時に文法チェックを行う。誤りがあれば警告して書き込みを止めてくれる。この最悪の事故を防ぐための安全装置だ。

設定を1か所にまとめず分割したいときは、/etc/sudoers.d/ ディレクトリ以下に個別ファイルを置く方法が推奨される。その場合も `visudo -f /etc/sudoers.d/user01` のように visudo 経由で編集する。

本体の sudoers には、このディレクトリを読み込む `#includedir /etc/sudoers.d` という記述が含まれている。

さて、ここまで安全に設定した sudo には、もうひとつ見逃せない価値がある。

📝 ログに残るという価値、よくある失敗

sudo の大きな利点は、いつ・誰が・どのコマンドを実行したかがログに残ることだ。

💡
ポイントsudo は「いつ・誰が・どのコマンドを実行したか」がログに残る。RHEL/MiracleLinux系では /var/log/secure に記録される。

RHEL/MiracleLinux系では /var/log/secure に記録され、`sudo journalctl` でも追える。

何か問題が起きたとき「直前に誰が何をしたか」を後から追跡できる。これは安全管理と原因究明の両面で大きな意味を持つ。

一方でよくある失敗もある。リダイレクトを伴う `sudo echo xxx > /etc/foo` だ。

つまずきsudo echo xxx > /etc/foo は失敗する。sudo が効くのは echo だけで、書き込み(>)は元の一般権限のままだからだ。

これは sudo が効くのは echo の部分だけで、ファイルへの書き込み(>)は元の一般権限のまま行われるため「許可がありません」になる。

echo xxx | sudo tee /etc/foo ……リダイレクトの代わりに tee を使うのが定石。別ファイルは sudo vi /etc/hosts で開く。

この場合は `echo xxx | sudo tee /etc/foo` のように tee を使うのが定石だ。同じ理由で、別ファイルを sudo で開きたいときも `sudo vi /etc/hosts` のようにエディタ自体を sudo で起動する。

また、すべてに `sudo -i` で root シェルに入って作業する癖は、せっかくの最小権限とログの粒度を台無しにする。

必要なコマンドにだけ sudo を付ける。この基本を崩さないことが、sudo を安全に使い続けるコツだ。

こうした注意点を踏まえて、現場では sudo をどう位置づけるのか。

🛠 実務の使いどころ

実務では、sudo は単なる「管理者になる手段」ではない。権限を安全に分配し、操作を記録するための運用基盤として使う。

サーバ構築の初手として、作業用の一般ユーザを wheel グループに入れて sudo を許可し、root の直接ログインは SSH 側で禁止する。これがほぼ定型の流れだ。

複数人で運用するなら、各自に個別アカウントを与えて全員 sudo 経由で作業させ、共有の root パスワードに頼らないようにする。

コツ全員に個別アカウントを与え sudo 経由で作業させれば、/var/log/secure を見るだけで「誰が・いつ・何をしたか」を追える。

こうしておけば /var/log/secure を見るだけで「誰が・いつ・何をしたか」を追え、監査にも障害対応にも役立つ。

さらに踏み込むなら、運用担当の役割ごとに sudoers でコマンドを絞る。たとえばアプリ担当にはサービスの再起動とログ閲覧だけを許す、といった最小権限の分配も可能だ。

万能の root を全員で共有するのではなく、必要な権限を必要な人に必要なだけ配る。sudo はその思想を日々の運用で実現するための、最も基本的な道具立てなのである。

この項目に出てくる用語

sudoスードゥー
許可された一般ユーザが、特定コマンドだけを管理者権限で実行する仕組み。
最小権限さいしょうけんげん
必要な人に必要な分だけ権限を与え、それ以外は与えない設計原則。

関連コマンド

sudovisudo

▶ 学習アプリでこの続きを学ぶ・演習する