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