ルートとしてサービスを実行する

ルートとしてサービスを実行する

クライアントの 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) ALLNOPASSWD 行の後に指定されるため、COMMAND にはパスワードが必要になります。

関連情報