Ubuntuで80番ポートを使う

Ubuntuだとufwなどで80番が開いていても、rootでないと(sudoを使わないと)80番ポートが使えないようで……
wheelグループとかあるのかな、グループに入れたら普通のユーザでも大丈夫なのかな、どうなのかな。
環境:Ubuntu 10.04.3 LTS 64bit / nvm / node.js 0.6.7

aaa.jsの中身

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80, "IPアドレス");

console.log('Server running at http://IPアドレス:80/');

実行

$ node aaa.js
Server running at http://IPアドレス:80/

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EACCES
    at errnoException (net.js:640:11)
    at Array.0 (net.js:726:28)
    at EventEmitter._tickCallback (node.js:192:40)

oh...

$ sudo node aaa.js
Server running at http://IPアドレス:80/

えええええ


サーバサイドはまだまだ知らないことがたくさんだ……
(今回はUbuntuの制限に引っかかっただけのような。まあ、これだからこそセキュアとも言えるのかもしれないけど)


追記:
1023以下のポートは、特権ポートとか言うらしい。
root権限がないと使えないとか。22も80も443も例に漏れず。
なので、sudoで直に動作させるか、sudoで動作させたポートフォワーディング用のアプリケーションで他のポートに転送するとかするみたい。

$ sudo ufw allow proto tcp from IPアドレス port 80 to IPアドレス port 8080
$ sudo ufw allow 8080/tcp

ufwの設定はこれでいいのかな、どうなのかな。なんか違う気がする。
まあ、root権限で動かすのが楽なんだろうね……


How to run a server on port 80 as a normal user on Linux? - Server Fault
には

  1. 1024未満のポートはrootでないと開けない
  2. 80を1024以上のポートに転送すれば、普通のユーザで起動させたものにアクセスできる

だって。その下にはご丁寧にiptablesでの設定方法まで。親切だなあ。