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 の仕組みを一通り見ておかねば、と思ったのでした。
参考記事