手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 sudo 権限の管理 – sudoers と NOPASSWD を安全に扱う

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 で管理ユーザーを作成したら、次に整理するべきものは sudo 権限です。sudo は root 権限を使うための便利なコマンドではありますが、同時に、誰がどこまで管理権限を持つのかを決める境界でもあります。

この記事では、Ubuntu 26.04 における sudo 権限管理を、/etc/sudoers/etc/sudoers.d/NOPASSWDvisudo、ログ確認の観点から整理します。手元の構成では 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 -l

sudo -l は、現在のユーザーがどのコマンドを sudo で実行できるかを確認するための基本です。NOPASSWD が有効かどうかも、ここで確認できます。

/etc/sudoers と /etc/sudoers.d を分けて考える

sudo の設定は /etc/sudoers に直接書くこともできます。ただし、個別の管理ユーザーや用途ごとの設定は、/etc/sudoers.d/ に分けた方が管理しやすくなります。

ファイル用途
/etc/sudoersOS 標準の sudo 設定、本体設定
/etc/sudoers.d/admin管理ユーザー用の追加設定
/etc/sudoers.d/service特定用途や自動化用の限定設定

drop-in に分けると、構成管理で扱いやすく、設定の意図も追いやすくなります。Ansible でも /etc/sudoers.d/admin を root 所有、0440 の権限で配置し、反映前に visudo で検証する形にしています。

管理ユーザー用の sudoers を作成する

管理ユーザーに広い sudo 権限を与える場合は、専用の drop-in ファイルを作成します。ここでは例として myadminNOPASSWD: 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/admin

sudoers は構文を間違えると、管理作業そのものに影響します。必ず 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 true

sudo 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 所有、0440visudo -cf による検証を徹底すると、sudoers の破損リスクを下げながら構成管理しやすくなります。NOPASSWD を使う場合も、SSH 鍵、管理ネットワーク、ログ監査と合わせて考えるべきです。

参考書籍
Linux
ストーリーで覚える Linux CLI 入門
sudo、権限管理、Linux コマンドの基本を確認したい場合の参考書籍です。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

関連する記事

関連する記事

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 sudo 権限の管理 – sudoers と NOPASSWD を安全に扱う

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る