Sudo
sudo
は、幅広いUnix系システムやmacOS、Linuxディストリビューションにおいて、一般ユーザーが管理者権限(root権限)で操作を行うためのコマンドラインツールです。セキュリティを保ちながら、必要な権限を必要なユーザーに付与することができます。本書では、sudo
の設定方法や使用方法について詳しく解説します。
sudoの概要
[編集]sudo
は、Unix系システムで広く使用されている権限昇格ツールです。管理者はsudoers
ファイルを通じて、特定のユーザーやグループに対して、特定のコマンドを実行する権限を詳細に設定することができます。sudo
は、各コマンドの実行履歴を記録し、セキュリティ監査にも役立ちます。
歴史
[編集]sudo
は1980年頃、ニューヨーク州立大学バッファロー校(SUNY Buffalo)のRobert CoggeshallとCliff Spencerによって開発されました。その後、Robert Coggeshallがコロラド大学ボルダー校に移った際に持ち込まれ、1986年から1993年にかけて同大学のITスタッフによってコードや機能が大幅に改良されました。この時期、Todd C. Millerも開発に関与しています。
1994年以降、OpenBSDの開発者であるTodd C. Millerによって、現在のバージョンが公開保守されています。1999年には、ISCスタイルのライセンスで配布が開始されました。
2024年2月には、MicrosoftがWindows向けのsudo
をリリースし、Unixと同様に昇格した権限でコマンドを実行する機能を提供しています。このリリースにより、Windows環境でも標準的にsudo
が利用可能となりました。
さらに、OpenBSD 5.8以降(2015年10月)、sudo
に代わるシンプルな特権昇格ツールとしてdoas
が導入されています。一方で、sudo
も引き続きポートとして利用可能です。
インストール
[編集]sudo
は、Unixのベースシステムにはないので、必要に応じて以下の方法でインストールできます。
FreeBSD
[編集]FreeBSDでは、以下のいずれかの方法でインストールできます。
# pkg install sudo
または、Portsから:
# make -C /usr/ports/security/sudo install clean
OpenBSD
[編集]OpenBSDでは、デフォルトでインストールされていませんが、以下のコマンドでインストールできます。
# pkg_add sudo
ただし OpenBSD のベースシステムには doas が含まれているので、あえて sudo を使う理由は特にありません。
NetBSD
[編集]NetBSDでは、pkgsrcを使用してインストールします。
# pkg_add sudo
または、Pkgsrcから:
# make -C /usr/ports/security/sudo install clean
Debian/Ubuntu系
[編集]Debian/Ubuntu系のシステムでは既にインストールされていますが、以下のコマンドでインストールできます。
# apt-get install sudo
Red Hat系
[編集]Red Hat系(RHEL、CentOS、Fedora)では既にインストールされていますが、、以下のコマンドでインストールします。
# dnf install sudo
macOS
[編集]macOSでは、sudoはデフォルトでインストールされていますが、最新バージョンをインストールするにはHomebrewを利用します。
# brew install sudo
Windows
[編集]Windows向けに公式のsudoがリリースされています。wingetを使用してインストールできます。
PS> winget install sudo
sudoersファイルの設定
[編集]sudoers
は、sudo
の設定ファイルで、ユーザーやグループの権限を定義します。このファイルは必ずvisudo
コマンドを使って編集する必要があります。
基本的な設定例
[編集]sudoers
ファイルは通常/etc/sudoers
にあります。以下は基本的な設定例です。
# rootユーザーにすべての権限を付与 root ALL=(ALL:ALL) ALL # wheelグループのメンバーにすべての権限を付与 %wheel ALL=(ALL:ALL) ALL # 特定のユーザーにパスワードなしで特定のコマンドを許可 username ALL=(ALL) NOPASSWD: /usr/bin/apt-get update # 特定のグループに特定のコマンドのみを許可 %developers ALL=(ALL) /usr/bin/git, /usr/bin/docker
設定項目の解説
[編集]- ユーザー指定: どのユーザーに権限を与えるかを指定します。
- ホスト指定: どのホストでコマンドを実行できるかを指定します。
- 実行ユーザー指定: どのユーザーとしてコマンドを実行できるかを指定します。
- コマンド指定: 実行を許可するコマンドを指定します。
sudoの使用方法
[編集]sudo
を使用してコマンドを実行するには、次のような構文を使用します。
sudo [オプション] コマンド
主要なオプション
[編集]- -u user: 指定したユーザーとしてコマンドを実行
- -i: ログインシェルをシミュレート
- -s: シェルを起動
- -l: 許可されているコマンドを表示
- -v: タイムスタンプを更新(パスワードキャッシュの延長)
使用例
[編集]システムの更新を行う場合:
sudo apt-get update
特定のユーザーとしてコマンドを実行:
sudo -u postgres psql
セキュリティ設定
[編集]sudo
のセキュリティを強化するために、以下の点に注意してください:
基本的なセキュリティ設定
[編集]- 最小権限の原則: ユーザーには必要最小限の権限のみを付与
- パスワードタイムアウト:
timestamp_timeout
の適切な設定 - ログ記録: すべての
sudo
コマンドの実行を記録 - パスワードポリシー: 強力なパスワードの要求
推奨設定
[編集]# パスワード試行回数を制限 Defaults passwd_tries=3 # sudoセッションのタイムアウトを設定 Defaults timestamp_timeout=5 # パスワード入力を要求 Defaults !visiblepw # ログ設定 Defaults syslog=auth Defaults logfile=/var/log/sudo.log
トラブルシューティング
[編集]sudo
に関する一般的な問題と解決方法:
一般的な問題
[編集]- 権限エラー: sudoersファイルの設定を確認
- パスワード関連の問題: タイムスタンプの設定を確認
- コマンドパス問題: secure_pathの設定を確認
デバッグ方法
[編集]sudo -l
で現在の権限を確認visudo -c
で設定ファイルの構文チェック- ログファイル(
/var/log/auth.log
など)の確認
CVE | 脆弱性名 | 発見年 | 詳細 |
---|---|---|---|
CVE-2019-14287 | 特権エスカレーション脆弱性 | 2019 | 特定の条件下で sudo を使用すると、ユーザーが許可されていないコマンドを root 権限で実行できる問題。
|
CVE-2021-3156 | バッファオーバーフロー脆弱性 | 2021 | sudo の引数処理でヒープバッファオーバーフローが発生する問題。未認証のユーザーが root 権限を取得できる可能性。
|
CVE-2017-1000367 | 権限分離の不適切な実装 | 2017 | 特定のコンパイルオプションでビルドされた sudo がセッションプラグインを正しく処理せず、エスカレーションが可能となる問題。
|
CVE-2014-0106 | 環境変数の検証不足 | 2014 | sudo の環境変数により意図しないコード実行が可能になる問題。
|
CVE-2012-0809 | ターミナルチェックの不備 | 2012 | sudo 実行時にターミナルがアクティブでない場合に特定の操作でセキュリティ制約を回避できる問題。
|
- これらの脆弱性は、特権エスカレーションや任意コード実行などの深刻な問題を引き起こしうるため、迅速なパッチ適用が推奨されました。
doasとの比較
[編集]sudo
は広く使われているツールですが、doas
への移行を検討する理由がいくつかあります:
doasを選択する理由
[編集]- コードベースの大きさ
- sudoは約10万行のコードで構成されており、潜在的な脆弱性の可能性が高くなります
- doasは約1,000行程度のコードで、監査やバグ発見が容易です
- 設定の単純さ
- sudoersの文法は複雑で、設定ミスを起こしやすい
- doasの設定は直感的で単純な文法を採用しており、誤設定のリスクが低い
# sudoersの例 user ALL=(ALL:ALL) ALL # doasの例 permit user as root
- セキュリティ上の利点
- sudoは機能が多いため、攻撃対象となる表面積が大きい
- doasはミニマルな設計で、セキュリティリスクが低減される
- sudoでは過去に深刻な脆弱性が複数報告されている(例:Baron Samedit脆弱性)
- メンテナンス性
- sudoは複雑な機能を多く持つため、設定の管理が煩雑
- doasはシンプルな設計のため、システム管理者の負担が少ない
- パフォーマンス
- doasは軽量で、システムリソースの消費が少ない
- sudoは機能が豊富な分、より多くのリソースを使用する
sudoを継続使用する理由
[編集]ただし、以下の場合はsudo
の使用を継続する価値があります:
- 詳細な権限制御が必要な場合
- 複雑なアクセス制御ルールが要求される環境
- 時間帯による制限など、高度な制御が必要な場合
- 監査要件が厳しい環境
- 詳細なログ記録が必要な場合
- コマンド実行の詳細な追跡が求められる場合
- 既存システムとの統合
- 既存のsudo設定が複雑で移行コストが高い場合
- サードパーティ製のツールがsudoに依存している場合
移行の検討
[編集]doas
への移行を検討する際は、以下の点を考慮してください:
- システムの規模
- 小規模なシステムではdoasへの移行が容易
- 大規模システムでは慎重な移行計画が必要
- ユーザーの習熟度
- doasの方がコマンド体系が単純で学習が容易
- ただし、sudoに慣れたユーザーの再教育が必要
- セキュリティポリシー
- 組織のセキュリティ要件にdoasが適合するか確認
- 必要なセキュリティ機能がdoasで提供されているか検証