
クライアントの VPN 設定を作成するプロセスを自動化するために使用する Java プログラムがあります。このプログラムは、いくつかの bash スクリプトを呼び出し、ファイルを作成してコピーします。VPN 構成全体が /etc/openvpn の下にあるため、このプログラムを root ユーザーで実行する必要があります。このディレクトリには root 権限が必要です。同じマシンに Glassfish アプリケーション サーバーがあり、このサーバーが前述の Java プログラムを呼び出します。Glassfish は非 root ユーザーで実行されます。
sudo 経由でプログラムを実行する場合、パスワードを入力せずに、ルート ユーザーとしてプログラムを実行する最良かつ最も安全な方法は何ですか?
答え1
最も安全なオプションは、openvpn がどのグループによって所有されているかを調べ、それにアクセスできる非特権ユーザーを追加することです。推奨される方法は、openvpnユーザーを作成することです、sudo を使用して openvpn を使用する権限を付与します。
このプログラムを実行するユーザーをグループに追加して (おそらく読み取りアクセスのみで)、openvpn へのアクセス権を付与し、必要な sudo 権限 (openvpn を実行するため - openvpn ユーザーが使用する設定と同じ) を付与すると、安全に実行できるはずです。
root を使用するのは怠惰な方法です ;)
答え2
私が発見したのは、パスワードを入力せずに sudo としてコマンドを実行する場合、次の 2 つのオプションがあるということです。
- echo パスワード | sudo -S コマンド
/etc/sudoersに次の行を追加します
ユーザー名 ALL=(ALL) NOPASSWD: コマンド
この行はすべてのグループ定義の後に置く必要があることに注意してください。 を使用して、持っている sudo 権限を確認できますsudo -l
。この場合、次のようになります。
(ALL) ALL
(ALL) NOPASSWD: COMMAND
これは、COMMAND を除くすべてのコマンドにパスワードが必要であることを意味します。username ALL=(ALL) NOPASSWD: COMMAND
グループ定義の前に を置くと、sudo -l
次のようになります。
(ALL) NOPASSWD: COMMAND
(ALL) ALL
(ALL) ALL
NOPASSWD 行の後に指定されるため、COMMAND にはパスワードが必要になります。