Узел + PM2 - Как безопасно прочитать секретный ключ SSL с пользователем без полномочий root?
Я ищу способ запустить узел через PM2, одновременно читая секретный ключ SSL, который находится в безопасном каталоге.
Подробности: стек LEMP Битнами с узлом
разрешения для /etc/ssl/private:
drwx------ 2 root root 4096 private
разрешения для ключевого файла:
-rw-r----- 1 root root 1704 my_key_file.key
С указанными выше разрешениями и nginx, и php работают нормально, без каких-либо проблем (я предполагаю, что это потому, что главный процесс nginx запускается от имени root?), И так же работает от узла как от sudo.
Однако я хотел бы запустить этот код узла как пользователь без полномочий root, поскольку это снижает риск безопасности в случае взлома сервера узла.
Какие у меня есть варианты? Насколько я понимаю, это что-то вроде этих вариантов:
- Освободите разрешения для папки / файла с закрытым ключом (Плохо, влечет за собой изменения в /etc/ssl/private!)
- Скопируйте private_key и сделайте его доступным для чтения только безопасным пользователем, который запускает pm2 (немного грязно, включает отслеживание скопированных файлов для обновлений и т. Д.)
- Запустите PM2 master от имени пользователя root, который затем порождает процесс / экземпляр от имени пользователя без полномочий root (во многом похоже на то, как работает nginx, не уверен, возможно ли это вообще)
- Запустите PM2 от имени пользователя root, измените код так, чтобы он опустил собственный уровень привилегий после выполнения некоторых действий от имени пользователя root (как показано здесь - выглядит немного грязно и также может представлять угрозу безопасности)
Любая помощь очень ценится! Спасибо
1 ответ
Вы можете создать группу под названием ssl-cert
и добавить pm2user
в эту группу.
sudo groupadd ssl-cert
sudo usermod -a -G ssl-cert pm2user
Затем измените группу каталога /etc/ssl/private
и его содержимое должно быть ssl-cert
, Вам также необходимо добавить разрешения на выполнение группы для private
каталог.
sudo chown -R root:ssl-cert /etc/ssl/private/
sudo chmod 650 /etc/ssl/private/
sudo chmod 640 /etc/ssl/private/my_key_file.key
Это позволит PM2 читать файл. Это более или менее безопасно? Это может зависеть от того, кто имеет доступ к серверу и насколько широко ssl-cert
группа является общей. Сохраняйте использование группы до абсолютного минимума: только учетные записи без регистрации. Вам, вероятно, потребуется перезапустить службы Nginx и PM2, чтобы они повторно подключились с новыми разрешениями.