OpenVPN 伺服器 - 刪除權限是否會影響執行時間存取檔案?

OpenVPN 伺服器 - 刪除權限是否會影響執行時間存取檔案?

OpenVPN的加固文章,建議伺服器守護程式在 Linux 上啟動後放棄其權限:

OpenVPN 經過精心設計,允許在初始化後刪除 root 權限,並且應始終在 Linux/BSD/Solaris 上使用此功能。如果沒有 root 權限,正在執行的 OpenVPN 伺服器守護程式對攻擊者來說是一個不太有吸引力的目標。

他們建議設定以下指令:

user nobody
group nobody

我認為這意味著守護進程將在nobody啟動完成後運行。

然而,OpenVPN 在運行時訪問幾個文件,特別是 CRL 文件

當 OpenVPN 中使用 crl-verify 選項時,每當新客戶端連線或現有用戶端重新協商 SSL/TLS 連線時,都會重新讀取 CRL 檔案(預設為每小時一次)。這表示您可以在 OpenVPN 伺服器守護程序執行時更新 CRL 文件,並使新的 CRL 對新連線的用戶端立即生效。

因此,我自然擔心這兩個功能是否不相容 - 如果守護進程在啟動後刪除權限,它如何在運行時讀取/etc/openvpn/server/crl.pem(所有者root:root,模式0600;SELinux 強制)?

  • 如果守護進程確實無法在運行時存取CRL文件,有沒有好的方法來規避這個問題?
  • 如果守護進程可以在運行時存取 CRL 文件,我想知道這是如何實現的。

如果相關的話,作業系統是 RHEL8.5 x86_64。

答案1

與許多放棄特權的應用程式一樣,OpenVPN 在仍具有 root 權限的情況下開啟各種檔案句柄,然後 root 權限會持續存在。一旦它刪除了權限,進程仍然能夠以它們開啟時的模式存取這些句柄,只要它們保持開啟。

在這種情況下,該過程的妥協openvpn不會使文件暴露於更改,因為該文件(可能,我沒有檢查)是以唯讀方式打開的。需要一個新的檔案句柄才能以寫入模式開啟它,這會失敗,因為進程無法再建立檔案句柄。

相關內容