sudoersの安全な設計(visudo)
sudoは強力なぶん、設定を誤ると管理者権限が漏れたり、逆にsudoが誰も使えなくなったりします。設定ファイル /etc/sudoers は専用エディタ visudo で編集するのが鉄則です。この記事では、文法チェックの仕組み、sudoers.d による分割管理、特定コマンドだけを許可する書き方、NOPASSWDの利便と危険までを順に見ていきます。
sudoは、一般ユーザーに管理者権限を一時的に貸し出す仕組みだ。誰に何を貸すかを決めているのが /etc/sudoers というファイルで、ここが甘いとサーバー全体の安全が揺らぐ。
厄介なのは、このファイルは書式が少しでも崩れると、sudoコマンド自体が動かなくなる点だ。管理者権限を得る手段が管理者権限がないと直せない、という詰みの状態に陥りかねない。
🔒 visudoという専用の入り口
この事故を防ぐために用意されているのが visudo コマンドだ。visudoは単なるエディタ起動コマンドではなく、保存時に自動で文法チェックを行う安全装置を兼ねている。
visudoを実行すると、環境変数で指定されたエディタ(多くはvi系)で /etc/sudoers が開く。編集して保存しようとすると、文法エラーがないか検査され、問題があれば警告が出て再編集を促される。ここでエラーを無視して強制終了しない限り、壊れた状態のファイルが確定してしまうことはない。
エディタが好みでない場合は、EDITOR環境変数を変更してからvisudoを起動すれば、使い慣れたエディタで編集しつつチェック機構だけ活用できる。
📂 sudoers.dで分割管理する
小規模な環境なら sudoers 本体に直接ルールを書いても困らないが、複数人・複数チームで運用すると、1つの巨大ファイルは事故のもとになる。
そこで /etc/sudoers.d/ というディレクトリを使う。ここに置いたファイルは自動的にsudoersの一部として読み込まれる仕組みになっている(多くのディストリビューションで標準有効)。チームごと・目的ごとにファイルを分ければ、誰の設定がどこにあるか一目で分かり、変更の影響範囲も限定できる。
sudoers.d内のファイルは、頭にアルファベット順で読み込まれることが多い。後から読まれたルールが前のルールを上書きする場合があるため、命名は 10-base、20-ops のように番号を振ると順序を制御しやすい。
🎯 特定コマンドだけを許可する
sudoersの本体はシンプルに言えば「誰が」「どのホストで」「誰の権限で」「何を」実行してよいかを1行で書くルールの集まりだ。全権限を渡すのではなく、必要なコマンドだけに絞るのが最小権限の実践になる。
例えば、Webサーバーの再起動だけを特定ユーザーに許可したいなら、次のように書く。
🔓 NOPASSWDの利便と危険
通常、sudoコマンドを実行するたびに自分のパスワードを求められる。これはなりすまし対策として重要だが、自動化スクリプトや監視ジョブでは、パスワード入力待ちがそのまま処理停止を招いてしまう。
この待ち時間を省くのがNOPASSWDというオプションだ。ルールの中でコマンドの前にNOPASSWD:を付けると、そのコマンドに限りパスワードなしでsudoが通る。
👥 グループでの運用
個々のユーザーに1行ずつルールを書くのは、人数が増えると管理しきれない。多くのディストリビューションには、あらかじめsudo権限と紐づいたグループ(Debian/Ubuntu系はsudo、RHEL系はwheelが多い)が用意されている。
このグループにユーザーを追加するだけで、そのグループ向けに定義された権限(多くは全コマンド許可)を得られる。個別のsudoersルールを書かずに済むので、標準的な管理者を増やす場面ではこちらが手軽だ。
「全権を渡す管理者はグループで」「特定コマンドだけの限定運用は個別ルールで」と使い分けると、sudoers全体の見通しが良くなる。
sudoersは一度組んだら終わりではなく、担当が変わるたびに見直すべき台帳だ。visudoという安全な入り口を必ず通り、権限は必要な分だけ、が基本の姿勢になる。