この記事の位置づけ
sudo の NOPASSWD を扱う記事です。利便性だけでなく、どのユーザーにどこまで許可するかという運用上の責任分界として整理します。
Ubuntu 22.04 では、管理ユーザーが sudo を使って root 権限のコマンドを実行します。標準では sudo 実行時にユーザー自身のパスワード入力が求められますが、サーバー運用や構成管理では、この確認を省略したい場面があります。
ただし、NOPASSWD は便利な一方で、扱い方を間違えると管理権限の境界を弱くします。この記事では、Ubuntu 22.04 で sudo のパスワード確認を抑止する方法を、/etc/sudoers.d/、限定許可、構文検証、確認手順に分けて説明します。
NOPASSWD: ALL は強い設定です。SSH 鍵認証、ログイン元制限、管理ユーザーの分離など、ログイン自体の制御ができている環境で使うのが前提です。必要なコマンドだけ許可できる場合は、全面許可より限定許可を優先します。この記事で扱う内容は次の通りです。
sudoでパスワード確認が求められる理由NOPASSWDを使う場面と注意点/etc/sudoers.d/に設定を分離する方法- 特定ユーザー、グループ、コマンド単位で許可する例
visudo -cによる構文確認
| 対象 OS | Ubuntu 22.04 |
|---|---|
| 設定対象 | sudo / sudoers |
| 設定配置先 | /etc/sudoers.d/ |
| 検証コマンド | sudo visudo -c |
| 主な用途 | 管理ユーザー、構成管理、限定的な運用コマンドの実行 |
sudo 権限を確認する/etc/sudoers.d/ に設定ファイルを作成するvisudo -c で構文を確認するsudo -n を確認する次に読む記事
書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server の権限管理や運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
sudo のパスワード確認が必要な理由
sudo のパスワード確認は、ログイン済みユーザーが本当に管理操作を行う意思を持っているかを再確認する仕組みです。端末を開いたまま離席した場合や、ログインセッションを第三者に操作された場合でも、すぐに root 権限の操作へ進めないようにする意味があります。
そのため、パスワード確認そのものは不要な手間ではありません。対話的に操作する端末では、むしろ残しておいた方が安全な場合もあります。
一方で、サーバー管理では、SSH 鍵認証、管理ネットワーク、構成管理、踏み台、監査ログなどでログイン経路を制御していることがあります。このような環境では、毎回の sudo パスワード確認よりも、ログイン前の認証と権限設計で守る方が現実的なことがあります。
現在の sudo 権限を確認する
まず、対象ユーザーがどのような sudo 権限を持っているか確認します。
sudo -lsudo -l は、現在のユーザーに許可されている sudo ルールを表示します。ここで既存の設定を確認してから変更します。
管理ユーザーの sudo パスワード確認を抑止する
特定の管理ユーザーに対して、すべてのコマンドをパスワードなしで実行できるようにする例です。ここでは管理ユーザーを myadmin としています。
sudo tee /etc/sudoers.d/90-myadmin-nopasswd >/dev/null <<'EOF'
myadmin ALL=(ALL:ALL) NOPASSWD: ALL
EOF
sudo chmod 440 /etc/sudoers.d/90-myadmin-nopasswd/etc/sudoers を直接編集するのではなく、/etc/sudoers.d/ 配下に分離しておくと、設定単位で管理しやすくなります。
myadmin に対して広い管理権限を与えます。個人用の検証環境や、ログイン経路を強く制御した管理サーバーでは扱いやすい一方、複数人がログインする環境では権限の分離を検討します。管理グループに対して設定する
個別ユーザーではなく、管理用グループに対して NOPASSWD を設定することもできます。次の例では adminops グループに所属するユーザーを対象にしています。
sudo groupadd --system adminops
sudo usermod -aG adminops myadminsudo tee /etc/sudoers.d/90-adminops-nopasswd >/dev/null <<'EOF'
%adminops ALL=(ALL:ALL) NOPASSWD: ALL
EOF
sudo chmod 440 /etc/sudoers.d/90-adminops-nopasswdグループで管理すると、ユーザーごとに sudoers ファイルを増やさずに済みます。ただし、グループ所属がそのまま管理権限になるため、メンバー管理には注意します。
特定コマンドだけ許可する
すべてのコマンドを許可する必要がない場合は、対象コマンドを限定します。たとえば、サービスの状態確認や再起動だけを許可するような使い方です。
sudo tee /etc/sudoers.d/90-service-ops >/dev/null <<'EOF'
myadmin ALL=(root) NOPASSWD: /usr/bin/systemctl status nginx, /usr/bin/systemctl restart nginx
EOF
sudo chmod 440 /etc/sudoers.d/90-service-ops限定許可は、運用作業を委任する場合に向いています。たとえばアプリケーション担当者に特定サービスの再起動だけ許可する、といった設計ができます。
command -v systemctl のように確認できます。command -v systemctl構文を検証する
sudoers の構文を壊すと、sudo が使えなくなる可能性があります。設定を作成したら、必ず構文を確認します。
sudo visudo -c特定ファイルだけ確認したい場合は、-f を指定します。
sudo visudo -cf /etc/sudoers.d/90-myadmin-nopasswdvisudo -c が正常終了してから、別の SSH セッションで sudo の動作を確認します。現在のセッションを閉じる前に確認しておくと、復旧不能な状態を避けやすくなります。パスワードなし sudo を確認する
sudo -n を使うと、パスワード入力が必要な場合にプロンプトを出さず失敗します。パスワードなしで実行できるか確認する用途に向いています。
sudo -n true
sudo -n id対象ユーザーで新しく SSH 接続し、上記のコマンドが成功することを確認します。失敗する場合は、対象ユーザー名、グループ所属、sudoers のファイル名、構文、権限を確認します。
設定が反映されない場合の確認
設定が反映されない場合は、次の点を確認します。
/etc/sudoers.d/が#includedirで読み込まれているか- ファイル名に
.や~が含まれていないか - ファイル権限が
440になっているか - 対象ユーザー名やグループ名が正しいか
- 既存ルールと意図しない競合がないか
sudo grep -n "includedir" /etc/sudoers
sudo ls -l /etc/sudoers.d/
sudo visudo -c
sudo -lNOPASSWD を使う時の考え方
NOPASSWD は、パスワード入力をなくす設定であって、権限管理そのものを不要にする設定ではありません。ログイン認証、SSH 鍵、接続元制御、ユーザー分離、監査ログと組み合わせて考えます。
個人管理のサーバーや構成管理前提の環境では、管理ユーザーに NOPASSWD: ALL を与えることはあります。一方で、複数人が使う環境や作業委任の場面では、グループ単位、コマンド単位、用途別ユーザーで分ける方が安全です。
SSH 側の認証については、Ubuntu 22.04 SSH 公開鍵認証の設定 と Ubuntu 22.04 SSH サーバー設定 も合わせて確認すると、ログインから権限昇格までの流れを見通しやすくなります。
まとめ
Ubuntu 22.04 で sudo のパスワード確認を抑止する場合は、/etc/sudoers を直接編集するのではなく、/etc/sudoers.d/ に設定を分離します。設定後は visudo -c で構文を確認し、別セッションで sudo -n の動作を確認します。
NOPASSWD: ALL は強力ですが、常に最適とは限りません。サーバー全体を管理する専用ユーザーには全面許可、作業委任にはコマンド限定、というように用途に合わせて使い分けるのが現実的です。

