web-dev-qa-db-ja.com

Node + PM2-root以外のユーザーでSSL秘密鍵を安全に読み取る方法は?

安全なディレクトリに配置されているSSL秘密鍵を読み取りながら、PM2を介してノードを実行する方法を探しています。

詳細:ノードを備えたBitnamiLEMPスタック

/ etc/ssl/privateの権限:

drwx------ 2 root root  4096 private

キーファイルのアクセス許可:

-rw-r----- 1 root root 1704 my_key_file.key

上記の権限があれば、nginxとphpの両方が問題なく正常に実行されます(これは、nginxのmasterプロセスがrootとして実行されるためだと思いますか?)、実行中のノードもSudoとして実行されます。

ただし、このノードコードをroot以外のユーザーとして実行したいのは、ノードサーバーが危険にさらされた場合のセキュリティリスクが軽減されるためです。

ここでの私のオプションは何ですか?私がそれを理解する方法は、これらのオプションのようなものです:

  • 秘密鍵フォルダー/ファイルのアクセス許可を緩めます(悪い、/ etc/ssl/privateへの変更が含まれます!)
  • Private_keyをコピーして、pm2を実行する安全なユーザーだけが読み取れるようにします(少し面倒で、更新のためにコピーされたファイルを追跡する必要があります)
  • PM2masterをrootとして実行すると、非rootユーザーとしてプロセス/インスタンスが生成されます(nginxの動作と同じように、これが偶数かどうかはわかりません)可能)
  • PM2をrootとして実行し、rootとしていくつかのことを行った後、コードを変更して独自の特権レベルを削除します(概要 ここ -少し厄介に見え、セキュリティリスクもある可能性があります)

どんな種類の助けも大歓迎です!ありがとう

4
jolian

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サービスを再起動して、新しい権限で再接続する必要があります。

2
bruceskyaus