特権ユーザで80ポートをlistenしたら一般ユーザに切り替える

80番ポートを使ってlistenしたいけど、ルートだと危ないから一般ユーザでやりたいなーと思っていたのだけど、UNIX的な知識がないのでどうやるのかしらなかったのですが、調べて知ったのでメモメモ。
環境:OS X 10.7.5 / node.js 0.8.11

Hello, Worldサーバ

node.jsでよく見かける一番最初のコードをちょっと改変した感じのコードです。

#!/usr/bin/env node
// index.js
var http = require('http'),
    server = http.createServer();

server.on('request', function (req, res) {
  res.end('Hello, World!');
});
server.listen(80, function () {
  process.setuid('sasaplus1');
});

listenが終わったらsetuidで一般ユーザのIDにしてあげると良いみたい。


setuidするものと、しないものとで起動した後の

$ ps au | grep node

を比べると、ユーザの部分がrootか一般ユーザかで変わっているはず。


こういうところ全然しらないのだよねえ……UNIX的な基本知識が欠如している証拠だと思うのでもっとそういう基礎のところを知りたいなあ。


参考:
Node.jsで 80番ポートをListenするWebサーバを作る | 元祖ワシ的日記
fukaoi.org
複数Webアプリを1つのホストで立ち上げる方法 - ぽりぴぃすらいと