Linux

OpenVPN 伺服器 - 刪除特權會影響執行時訪問文件嗎?

  • March 30, 2022

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,以防萬一。

與許多放棄特權的應用程序一樣,OpenVPN 在仍然具有 root 權限時會打開各種文件句柄,然後這些文件句柄會持續存在。一旦它刪除了 privs,該程序仍然能夠以打開它們的模式訪問這些句柄,只要它們保持打開狀態。

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

引用自:https://serverfault.com/questions/1097400