Узел + 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, чтобы они повторно подключились с новыми разрешениями.

Другие вопросы по тегам