268

Node.jsで最初のサーバーをセットアップしていますcloud Linux nodeが、 の詳細についてはまったくの初心者ですLinux admin。(ところで、Apacheを同時に使用しようとしているわけではありません。)

すべてが正しくインストールされていますが、 を使用しないとノードでroot loginリッスンできないことがわかりました。port 80ただし、セキュリティ上の理由から、ルートとして実行したくありません。

次のベスト プラクティスは何ですか。

  1. 安全/サンドボックス化されるように、ノードに適切な権限/ユーザーを設定しますか?
  2. これらの制約内でポート 80 を使用できるようにします。
  3. ノードを起動し、自動的に実行します。
  4. コンソールに送信されたログ情報を処理します。
  5. その他の一般的なメンテナンスとセキュリティの問題。

ポート 80 のトラフィックを別のリッスン ポートに転送する必要がありますか?

ありがとう

4

4 に答える 4

121

安全なユーザーにポート 80 を使用する許可を与える

root ユーザーとしてアプリケーションを実行したくないことを思い出してください。ただし、安全なユーザーにはデフォルトの HTTP ポート (80) を使用する権限がありません。あなたの目標は、訪問者が次のような使いやすい URL に移動して使用できる Web サイトを公開できるようにすることです。http://ip:port/

残念ながら、root としてサインオンしない限り、通常はhttp://ip:port- where port number > 1024 のような URL を使用する必要があります。

多くの人がここで行き詰まりますが、解決策は簡単です。いくつかのオプションがありますが、これは私が好きなものです。次のコマンドを入力します。

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

これで、ポート 80 で実行することを Node アプリケーションに伝えると、エラーは発生しなくなります。

この参照リンクを確認してください

于 2014-04-24T23:03:19.737 に答える
17

ポート 80 (または 443) にバインドした後、root 権限を削除します。

これにより、ポート 80/443 は保護されたままになりますが、root としてリクエストを処理することはできなくなります。

function drop_root() {
    process.setgid('nobody');
    process.setuid('nobody');
}

上記の関数を使用した完全な動作例:

var process = require('process');
var http = require('http');
var server = http.createServer(function(req, res) {
    res.write("Success!");
    res.end();
});

server.listen(80, null, null, function() {
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
    drop_root();
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
});

詳細については、この完全なリファレンスを参照してください。

于 2016-06-22T19:28:22.167 に答える