一般ユーザーで動作させたい
0〜1023番はウェルノウンポートと呼ばれ、Linuxではスーパーユーザー(root権限)でないとサーバとして動かすことができません。しかし何も考えずにsudo node xxx.js
的な感じで起動するとプロセスがrootで動作するため恐ろしいことこの上なく夜も眠れない日々を過ごす羽目になります。
そこで、以下のようにいったんrootとして起動した後に、子プロセスを別のユーザーに切り替えることで解決を図ります。
コード例
/**
* 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)
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。
同じカテゴリの記事
- [Node.js] SequelizeでMySQLを利用する – その5「ToDoアプリ作成編」
- [Node.js] SequelizeでMySQLを利用する – その4「マイグレーション編」
- [Node.js] SequelizeでMySQLを利用する – その3「トランザクション編」
- [Node.js] SequelizeでMySQLを利用する – その2「SELECT文編」
- [Node.js] SequelizeでMySQLを利用する – その1「チュートリアル編」
- [JavaScript] クレジットカード番号から国際ブランドを特定する
- [JavaScript] クレジットカード番号が正しいか検証する
- [Node.js] ClamAVでウイルスチェック