sudoコマンドの仕様

nathan-anderson-KHSPGJ3zP0M-unsplash.jpg

質問

sudoコマンドの仕様を教えてください。
裏でどのような処理が行われていますか?


解答

いい質問です。sudoは「管理者権限で実行できる便利コマンド」以上に、Unix系OSの権限モデルそのものを体現しています。
表の使い方 → 内部処理 → セキュリティ設計、の順で整理します。


1. sudoとは何か(仕様の要点)

sudo(superuser do)は、

一般ユーザーが、限定された範囲で、別ユーザー(主にroot)の権限でコマンドを実行する仕組み

です。

重要なのは:

  • rootに昇格しているわけではない

  • 「そのコマンドだけ」別ユーザー権限で実行


2. 基本仕様(表の挙動)

sudo command

意味:

  • commandroot権限で実行

  • 実行者はあくまで元のユーザー

よくあるオプション

オプション意味
-u user指定ユーザーとして実行
-k認証キャッシュを無効化
-l実行可能なコマンド一覧
-irootのログインシェル

3. sudoは裏で何をしているか(核心)

全体フロー(簡略)

  1. sudoコマンド実行

  2. 実行者を特定

  3. sudoersルールを確認

  4. 認証(パスワード)

  5. 権限切り替え

  6. コマンド実行

  7. ログ記録


4. ステップごとの内部処理

① sudoは「setuid root」の実行ファイル

$ ls -l /usr/bin/sudo-rwsr-xr-x 1 root root ...
  • s = setuidビット

  • 実行時、一時的に 実効UID = root

重要:

  • sudo自体は最初からroot権限で動く

  • だから権限チェックが可能


② 実行ユーザーの特定

sudoは以下を取得します:

  • 実UID(誰が実行したか)

  • 実行TTY

  • 実行コマンド

  • 環境変数(制限付き)

これらは 監査ログ にも使われます。


③ sudoersファイルの評価

通常:

/etc/sudoers/etc/sudoers.d/*

例:

user ALL=(root) /bin/systemctl restart nginx

意味:

  • userは

  • 全ホストで

  • rootとして

  • 指定コマンドだけ実行可能

この評価は 厳密に順序付き で行われます。


④ 認証(なぜrootのパスワードではない?)

sudoは通常:

  • 実行ユーザー自身のパスワード を要求

理由:

  • rootパスワードの拡散を防ぐ

  • 誰が実行したかを保証

認証は:

  • PAM(Pluggable Authentication Modules)経由


⑤ 認証キャッシュ(5分ルール)

sudo lssudo systemctl restart nginx
  • 一定時間(多くは5分)

  • 同一TTYなら再認証不要

内部的には:

  • タイムスタンプファイルを使用


⑥ 権限切り替えの瞬間

認証・許可後:

setresuid(target_uid, target_uid, target_uid)setresgid(...)
  • 実UID / 実効UID / 保存UID を切り替え

  • そのプロセスだけがroot

親シェルは影響を受けない。


⑦ コマンド実行

  • execve()で指定コマンドを起動

  • 環境変数は sanitize される

    • PATH制限

    • LD_PRELOAD削除 など


⑧ ログ記録

以下が記録されます:

  • 実行者

  • 実行コマンド

  • 実行時刻

  • 成否

  • TTY

通常:

/var/log/auth.log/var/log/secure

5. sudoとsuの本質的な違い

項目sudosu
認証自分のPW対象ユーザーのPW
権限コマンド単位シェル全体
ログ詳細乏しい
制御細かい粗い

sudoは 「最小権限の原則」 を実装した仕組み。


6. セキュリティ設計上の思想

sudoは:

  • root権限を「貸す」のではない

  • root権限で“実行を代行”する

というモデルです。

そのため:

  • 権限昇格攻撃が起きにくい

  • 誰が何をしたか追跡可能

  • 権限範囲を極小化できる


7. よくある誤解

❌ sudo = rootになる

→ ❌違う
→ ⭕ root権限で1コマンド実行


❌ sudoは安全だから何でも許可していい

→ ❌
NOPASSWD: ALL はほぼ root配布と同義


8. まとめ(要点だけ)

  • sudoは setuid root プログラム

  • 実行時だけ 一時的に権限切替

  • ルール・認証・ログがセット

  • 「管理を安全に分配する」ための仕組み




【送料無料】Ubuntuはじめる&楽しむ100%活用ガイド/リンクアップ

価格:2068円
(2026/1/28 17:56時点)
感想(0件)



 



この記事へのコメント

広告です。クリックいただけると励みになります。