root として実行されている Node.JS プログラムが、実行中にその権限をダウングレードすることは可能ですか? これは最初に行うことの 1 つであり、その目的はもちろん、このプロセスで実行される脆弱性や信頼できないコードが存在する可能性が低い場合に、発生する可能性のある損害を制限することです。
または、ルートとして実行されている Node.JS プロセスがルート以外の別のプロセスを開始する方法はありますか? (できればsudoなどの間にレイヤーを追加しないでください)
はい、process.setuid(id)とprocess.setguid(id)を使用して、現在のプロセスの有効なユーザー/グループ ID を変更します。
@mabako の答えは素晴らしいように見えますが、より簡単なオペレーティング システムのトリックがあるはずです。
人々がノードで多くのことをしているのを私が見たのは、
ノード コードを実行するユーザーをwww-data
グループに追加して、特権ポートにバインドできるようにします。
例: http://kvz.io/blog/2009/12/15/run-nodejs-as-a-service-on-ubuntu-karmic/
iptables を使用して、特権ポートを特権のないノード プログラムにリダイレクトします。ノード プログラムは高いポートでリッスンします。
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
ノード サーバーをルートとして実行するポート バインディング以外の理由はありますか?
編集:ここにさらにトリックがあります:非ルートプロセスがLinuxの「特権」ポートにバインドする方法はありますか?