Nodeで80ポートのhttpサーバーを起動させる

Linuxでは、そもそも1024番以下のポート(特権ポートと呼ばれる)には、一般ユーザ権限では、Listenできないことを知らなかった。

サーバー上でroot権限のないユーザ権限では、80番ポートにバインドしたHttpサーバーを起動すると、Permission Deniedでエラーになる。これらの内容で検索すると、回避策としてrootで起動して起動後に別ユーザに切り替えることをプログラムでやる内容を良く見るが、以下のように特定のプログラムに特権ポートのListenする権限を与える方法をメモしておく。セキュリティが低下するが、少ない設定で可能になる。

設定には、setcapというコマンドを使うため、libcap2-binをインストールし、以下のようにnode本体に対して権限を付与するだけでOK.

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep /usr/local/bin/node