Ubuntu 26.04 で管理ユーザーを作成したら、次に整理するべきものは sudo 権限です。sudo は root 権限を使うための便利なコマンドではありますが、同時に、誰がどこまで管理権限を持つのかを決める境界でもあります。
この記事では、Ubuntu 26.04 における sudo 権限管理を、/etc/sudoers、/etc/sudoers.d/、NOPASSWD、visudo、ログ確認の観点から整理します。手元の構成では Ansible により /etc/sudoers.d/admin を配置し、visudo -cf で検証してから反映しています。ここでは、その考え方を手動運用にも使える形でまとめます。
sudo 権限管理で見るべきもの
sudo 権限管理では、ユーザーを sudo グループに入れることだけに目が向きがちです。しかし、実際には複数の要素を分けて見る必要があります。
| 領域 | 主な対象 | 意味 |
|---|---|---|
| ユーザー | id / getent passwd | 誰に権限を与えるのか |
| グループ | sudo グループ | グループ単位で sudo を許可するか |
| sudoers 本体 | /etc/sudoers | 既定の sudo ポリシーを定義する |
| sudoers drop-in | /etc/sudoers.d/admin | 個別の管理ポリシーを分離して置く |
| 検証 | visudo -cf | 構文ミスで sudo を壊さないための確認 |
| ログ | journal / auth.log | 誰が sudo を使ったのかを追跡する |
sudo は権限昇格の仕組みであると同時に、運用上の責任境界です。誰に、どの範囲で、どの条件で root 権限を使わせるのかを明確にする必要があります。
現在の sudo 設定を確認する
まず、現在のユーザー、所属グループ、sudo ポリシーを確認します。権限管理では、設定を変更する前に現状を把握することが重要です。
whoami
id
getent group sudo
sudo -lsudo -l は、現在のユーザーがどのコマンドを sudo で実行できるかを確認するための基本です。NOPASSWD が有効かどうかも、ここで確認できます。
/etc/sudoers と /etc/sudoers.d を分けて考える
sudo の設定は /etc/sudoers に直接書くこともできます。ただし、個別の管理ユーザーや用途ごとの設定は、/etc/sudoers.d/ に分けた方が管理しやすくなります。
| ファイル | 用途 |
|---|---|
/etc/sudoers | OS 標準の sudo 設定、本体設定 |
/etc/sudoers.d/admin | 管理ユーザー用の追加設定 |
/etc/sudoers.d/service | 特定用途や自動化用の限定設定 |
drop-in に分けると、構成管理で扱いやすく、設定の意図も追いやすくなります。Ansible でも /etc/sudoers.d/admin を root 所有、0440 の権限で配置し、反映前に visudo で検証する形にしています。
管理ユーザー用の sudoers を作成する
管理ユーザーに広い sudo 権限を与える場合は、専用の drop-in ファイルを作成します。ここでは例として myadmin に NOPASSWD: ALL を与えます。
sudo tee /etc/sudoers.d/admin >/dev/null <<'EOF'
myadmin ALL=(ALL:ALL) NOPASSWD: ALL
EOF
sudo chown root:root /etc/sudoers.d/admin
sudo chmod 0440 /etc/sudoers.d/admin
sudo visudo -cf /etc/sudoers.d/adminsudoers は構文を間違えると、管理作業そのものに影響します。必ず visudo -cf で検証してから使います。ファイル権限も重要で、通常は root 所有、0440 にします。
NOPASSWD をどう扱うか
NOPASSWD: ALL は、管理作業や自動化では非常に便利です。一方で、認証済みユーザーが追加のパスワード確認なしに root 権限を使えるという意味でもあります。
| 使い方 | 向いている場面 | 注意点 |
|---|---|---|
NOPASSWD: ALL | 管理用ホスト、構成管理、自動化 | SSH 鍵、接続元制限、ログ監査が前提 |
| 通常の sudo | 対話作業、個人端末からの管理 | 作業時にパスワード確認が入る |
| コマンド限定 sudo | 運用担当、サービス再起動など限定作業 | 許可コマンドの設計が必要 |
NOPASSWD は悪ではありません。ただし、何も考えずに全ユーザーへ付けるものでもありません。公開鍵認証、管理ネットワーク、端末管理、ログ確認が整っている環境で、管理ユーザーに限定して使うべき設定です。
コマンドを限定する sudoers の考え方
すべての管理ユーザーに ALL を与える必要はありません。特定のサービス再起動やログ確認だけを許可したい場合は、コマンドを限定することもできます。
sudo tee /etc/sudoers.d/service-operator >/dev/null <<'EOF'
operator ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
EOF
sudo chmod 0440 /etc/sudoers.d/service-operator
sudo visudo -cf /etc/sudoers.d/service-operatorただし、コマンド限定 sudo は慎重に設計する必要があります。許可したコマンドから shell に抜けられる場合や、任意ファイルを書き換えられる場合は、実質的に root 権限を与えているのと近くなります。
sudoers 全体を検証する
個別ファイルの検証だけでなく、sudoers 全体として壊れていないかも確認します。特に複数の drop-in を使う場合は、全体確認を手順に入れておくと安全です。
sudo visudo -cf /etc/sudoers
sudo find /etc/sudoers.d -maxdepth 1 -type f -print -exec sudo visudo -cf {} \;構成管理では、テンプレートを配置する直前に visudo -cf %s で検証するのが安全です。手動運用でも、書いて終わりではなく、検証してから反映する癖を付けるべきです。
sudo の動作を確認する
設定後は、対象ユーザーで sudo が期待どおりに動くかを確認します。現在のセッションを閉じる前に、別セッションで確認するのが安全です。
sudo -l
sudo id
sudo truesudo id では root として実行できるかを確認できます。sudo true は副作用をほとんど持たずに sudo の成否を確認できるため、動作確認に使いやすいコマンドです。
sudo のログを確認する
sudo 権限管理では、許可することだけでなく、後から追えることも重要です。誰が、いつ、どのコマンドを sudo で実行したのかを確認できる状態にしておきます。
journalctl --since '30 minutes ago' | grep -i sudo || true
grep -i sudo /var/log/auth.log 2>/dev/null || true共用管理ユーザーを使うと、sudo ログに残るユーザー名は同じになります。個人ごとの管理ユーザーを使うのか、共用ユーザーを使うのかは、監査性と運用性のバランスで決める必要があります。
sudo 権限管理の確認観点
| 確認項目 | 見るもの |
|---|---|
| 対象ユーザー | 誰に sudo を許可するのか |
| 権限範囲 | ALL か、コマンド限定か |
| パスワード確認 | NOPASSWD を使う理由があるか |
| ファイル配置 | /etc/sudoers 直書きではなく drop-in に分けるか |
| 構文検証 | visudo -cf を通しているか |
| ファイル権限 | root 所有、0440 になっているか |
| 監査性 | sudo の実行履歴を追えるか |
まとめ
Ubuntu 26.04 の sudo 権限管理では、sudo を使えるかどうかだけでなく、誰に、どの範囲で、どの条件で root 権限を使わせるのかを整理する必要があります。
/etc/sudoers.d/ に設定を分け、root 所有、0440、visudo -cf による検証を徹底すると、sudoers の破損リスクを下げながら構成管理しやすくなります。NOPASSWD を使う場合も、SSH 鍵、管理ネットワーク、ログ監査と合わせて考えるべきです。


