
でOpenVPN の強化に関する記事Linux では、起動後にサーバー デーモンの権限を削除することが推奨されます。
OpenVPN は、初期化後にルート権限を削除できるように非常に注意深く設計されており、Linux/BSD/Solaris では常にこの機能を使用する必要があります。ルート権限がないと、実行中の OpenVPN サーバー デーモンは、攻撃者にとって魅力的なターゲットではなくなります。
彼らは、以下の指令を設定することを推奨しています。
user nobody
group nobody
これは、起動が完了した後にデーモンが実行されることを意味すると想定しますnobody
。
しかし、OpenVPNが実行時にアクセスするファイルはいくつかあります。特にCRLファイル:
OpenVPN で crl-verify オプションを使用すると、新しいクライアントが接続するか、既存のクライアントが SSL/TLS 接続を再ネゴシエートするたびに (デフォルトでは 1 時間に 1 回)、CRL ファイルが再度読み込まれます。つまり、OpenVPN サーバー デーモンの実行中に CRL ファイルを更新し、新しく接続するクライアントに対して新しい CRL をすぐに有効にすることができます。
したがって、当然、これら 2 つの機能に互換性がないのではないかと心配しています。デーモンが起動後に権限を削除する場合、実行時に/etc/openvpn/server/crl.pem
(所有者root:root
、モード0600
、SELinux の適用) をどのように読み取ることができるのでしょうか。
- デーモンが実行時に CRL ファイルにアクセスできない場合、この問題を回避する良い方法はありますか?
- デーモンが実行時に CRL ファイルにアクセスできる場合、それがどのように可能なのかを知りたいです。
関係があるなら、OS は RHEL8.5 x86_64 です。
答え1
権限を放棄する多くのアプリケーションと同様に、OpenVPN はルート権限がある間にさまざまなファイル ハンドルを開き、それが保持されます。権限を放棄すると、プロセスは、ハンドルが開いている限り、それらのハンドルが開かれたときと同じモードでそれらのハンドルにアクセスできます。
この場合、プロセスが侵害されてopenvpn
も、ファイルは変更されることはありません。なぜなら、ファイルは (おそらく、確認していませんが) 読み取り専用で開かれているからです。書き込みモードで開くには新しいファイル ハンドルが必要ですが、プロセスがファイル ハンドルを作成できなくなるため、これは失敗します。