VPNボタンにsudoが必要な場合:ルールを絞り、ポリシーを検証する
デスクトップのボタンは、パスワードなしのrootを許す理由にはならない。ネットワークマネージャーで対応できるかを確認し、コマンドを一つに絞り、最後にsudoポリシー全体を検証する。
VPNボタンは管理者には動くが他の全員では失敗するので、誰かがsudoersに一行を足す。その行は本来解くべき問題より長く生き残り、ボタンが必要とする以上の権限を与えることが多い。ポリシーを編集する前に、サポート対象の接続所有者がすでにその作業を行えるか確認する。以下の三つの条件が、sudoを関与させるかどうかを決める。
条件1:サポート対象の所有者はsudoなしで実行できる
ほとんどのLinuxデスクトップでは、ネットワークマネージャーがすでにVPN接続を所有しており、その認可はsudoではなくpolkitを通る。接続を立ち上げることを許されたユーザーは、rootルールなしでコマンドラインから実行できる。ボタンに特権が必要だと決めつける前に、マネージャーが何を許すか確認する。答えが「はい」なら、sudoersの変更は存在しない問題を解いていることになる。
nmcli connection show
nmcli connection up "Work VPN"
マネージャーが拒否する場合は理由を読む。polkitルールの欠落、別のユーザーが所有する接続、ユーザーが読めない場所に保存されたプロファイルなどである。いずれにもsudoルールより狭い、サポートされた修正方法がある。特権昇格は最後の手段であり、最初の手段ではない。
条件2:ルールは実行ファイル一つとその引数を指定する
sudoが本当に必要なら、ルールは正確なコマンドと、可能なら使用を許す引数を指定すべきである。ラッパースクリプトの実行をユーザーに許すルールは、そのスクリプトの権限と同じだけしか安全でない。ユーザーがrootの実行内容を編集できるからだ。コマンドの後ろにワイルドカードを置くルールも、短い形で同じ問題である。
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
コマンド連鎖のすべてのパスを確認する。バイナリ、それが呼ぶスクリプト、読み込む設定ファイル、その間にあるディレクトリのすべてである。どれか一つでもユーザーが書き込めるなら、絞ったルールは実質的に無制限のrootになる。引数も重要である。設定パスを受け付けるコマンドは、ユーザーが管理するファイルに向けられるからだ。ルールはボタンではなく操作のために書く。
コマンドが動作するためにユーザー管理のファイルを必要とするなら中止する。その設計は誤りであり、どんなsudoers構文でも安全にはできない。
条件3:あなたの行だけでなく、ポリシー全体を解析する
ファイルをロックして構文を確認するエディタで検証し、断片ではなく組み上げたポリシーを検証する。単体で解析できるファイルでも、インクルードの順序を壊したり、挙動を変える形でルールを重複させたりしうる。visudoのマニュアル は、ロックするエディタとここで使う検証専用モードの両方を説明している。
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
検証は失敗時にファイルと行を報告するが、その報告こそが役に立つ部分である。既知のエラーを強引に保存するのではなく、エディタを通して意図した変更を直す。壊れたポリシーは全管理者を一度に締め出しうるからだ。インクルードディレクトリ内のファイルにも、マニュアルが要求する所有権とモードが必要であり、そうでなければ無視または拒否される。構文は最初の関門にすぎない。通った後にルールを読み直し、実際に何を許すのかを問うこと。
変更を機能させる唯一の方法が構文チェックを無効にすることなら中止する。それはポリシーではなく、再起動を待つ障害である。
復旧:まだ動くセッションを残す
保存する前に、認可された管理セッションがすでに開いていること、マシンへの第二の経路が存在することを確かめる。sudoersの誤りは修正する能力を奪いうるし、デスクトップのボタンはその危険に見合わない。sudoがすでに壊れているなら、独自に考案せずシステムの文書化された復旧手順を使う。
sudo -n true
id
pkexecのような代替は独自のインストールとポリシーに依存するため、確実な第二のrootプロンプトではない。ローカル認可はVPNシークレットの供給とも切り離しておく。sudoルールは存在しないシークレットエージェントを解錠できず、ゲートウェイのMFAも満たさない。修正後は通常アカウントで意図した操作だけを試し、その後はマネージャーの通常の制御を使う。
決着がつくのは、どの条件がsudoを正当化したか、ルールが何を指定するか、ポリシー全体が解析されるか、そうでなければどう復旧するかを説明できるときである。管理アクセスを失う特権ランチャーは悪い取引であり、たいていは避けられる。