
ВСтатья об усилении безопасности OpenVPNрекомендуется, чтобы демон сервера сбросил свои привилегии после запуска в Linux:
OpenVPN был очень тщательно разработан, чтобы позволить сбрасывать привилегии root после инициализации, и эта функция всегда должна использоваться в Linux/BSD/Solaris. Без привилегий root запущенный демон сервера OpenVPN представляет собой гораздо менее привлекательную цель для злоумышленника.
Они рекомендуют установить следующие директивы:
user nobody
group nobody
что, как я предполагаю, означает, что демон будет работать так же, как и nobody
после завершения запуска.
Однако есть несколько файлов, к которым OpenVPN обращается во время выполнения,в частности, файл CRL:
При использовании опции crl-verify в OpenVPN файл CRL будет перечитываться каждый раз, когда подключается новый клиент или существующий клиент повторно согласовывает соединение SSL/TLS (по умолчанию один раз в час). Это означает, что вы можете обновить файл CRL во время работы демона сервера OpenVPN и немедленно вступить в силу для новых подключающихся клиентов.
Поэтому, естественно, я беспокоюсь, что эти две функции несовместимы — если демон теряет привилегии после запуска, как он может считывать /etc/openvpn/server/crl.pem
(владелец root:root
, режим 0600
; применение SELinux) во время выполнения?
- Если демон действительно не может получить доступ к файлу CRL во время выполнения, есть ли хороший способ обойти эту проблему?
- Если демон может получить доступ к файлам CRL во время выполнения, я хотел бы знать, как это возможно.
Операционная система — RHEL8.5 x86_64, если это важно.
решение1
Как и многие приложения, которые сбрасывают привилегии, OpenVPN открывает различные дескрипторы файлов, пока у него все еще есть root, которые затем сохраняются. После сброса привилегий процесс все еще может получить доступ к этим дескрипторам в том режиме, в котором они были открыты, пока они остаются открытыми.
Компрометация процесса openvpn
не подвергнет файл изменениям в этом случае, поскольку файл (вероятно, я не проверял) открыт только для чтения. Для открытия его в режиме записи потребуется новый дескриптор файла, что приведет к ошибке, поскольку процесс больше не сможет его создать.