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
には
- 1024未満のポートはrootでないと開けない
- 80を1024以上のポートに転送すれば、普通のユーザで起動させたものにアクセスできる
だって。その下にはご丁寧にiptablesでの設定方法まで。親切だなあ。