Apache のポート番号を変えると Permission Denied でエラーとなる件

Fedora 14 で Apache のポート番号を標準の 80番から 8001番に変えて起動しようとしたところ、以下のようにエラーとなってしまいました。

# service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:8001
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:8001
no listening sockets available, shutting down
Unable to open logs

他のプログラムがこのポートを使っているわけでもないし、権限も root で実行しています。 何故かと思ったところこれは SELinux の機能でした。 SELinux という名前はディストリビューションっぽいですが、そうではなくセキュリティ強化のためのモジュールですね。

SELinux が有効 (enforcing mode) になっているかどうかは以下のコマンドの結果で確認できます。 endorcing mode であれば 1が表示されます。

# cat /selinux/enforce

現在の各サービスで使用できるポートは以下のコマンドで出力されます。

# semanage port -l

Apache の使えるポート (http_port_t) に 8001番を追加しなければなりません。 以下のコマンドを実行します。

# semanage port -a -t http_port_t -p tcp 8001

これで無事起動することができました。 このあたりのセキュリティ機能は「よくわからないから機能切っちゃえ~」というのではなく、きちんと理解して設定しておかねばなりません。 というわけで SELinux の仕組みを一通り見ておかねば、と思ったのでした。

参考記事