Node.jsで80番ポートを使用するHTTPサーバ

  • このエントリーをはてなブックマークに追加
  • LINEで送る
この記事は 2018年2月14日 に書かれたものです

一般ユーザーで動作させたい

0〜1023番はウェルノウンポートと呼ばれ、Linuxではスーパーユーザー(root権限)でないとサーバとして動かすことができません。しかし何も考えずにsudo node xxx.js的な感じで起動するとプロセスがrootで動作するため恐ろしいことこの上なく夜も眠れない日々を過ごす羽目になります。

そこで、以下のようにいったんrootとして起動した後に、子プロセスを別のユーザーに切り替えることで解決を図ります。

- Sponsored Link -

コード例

/**
 * Nodejs + expressで80番ポートを使用する(一般ユーザー)
 *
 * Usage:
 *   $ sudo node index.js
 *   listening on *:80
 * 
 *  親プロセスはrootだが、子プロセスが指定したユーザーになるる。
 */

var app  = require('express')();
var http = require('http').Server(app);

app.get('/', function(req, res){
  res.send("<h1>It works.</h1>");
})

http.listen(80, function(){   //80番ポートでlistenする
  // ユーザーを変更する
  process.setuid(501);

  console.log('listening on *:80');
});

ユーザーidの確認方法

setuid()メソッドに指定する数値は以下のようにidコマンドで確認することができます。node専用ユーザーを作っておくのが良いでしょう。

### 指定ユーザーのIDを表示(以下なら48)
$ id apache
uid=48(apache) gid=48(apache) groups=48(apache)

### オプションを指定しないとログイン中ユーザーのIDを表示
$ id 
uid=501(katsube) gid=501(ws) groups=501(ws),10(wheel)

コメント

コメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -