Nginxで権限があるはずなのにポートをバインドできない
ちょっと必要があって、Nginxを8000番で動かそうとしたらなぜかエラーが出た。1023までのポートならともかく8000だし、そもそもroot権限で動かしてるのに。
nginx: [emerg] bind() to 0.0.0.0:8000 failed (13: Permission denied)
Permission deniedと来たらseLinuxかなとaudit.logを見てみる。
type=AVC msg=audit(1564721070.008:4043): avc: denied { name_bind } for pid=26994 comm="nginx" src=8000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:soundd_port_t:s0 tclass=tcp_socket permissive=0
やっぱり。semanage
というコマンドで許可できるっぽいが入ってない。yum provides
して調べる。policycoreutils-python
というパッケージに含まれてるとのこと。
sudo yum install policycoreutils-python
するとインストール済みと出る。なぜ。
sudo yum reinstall policycoreutils-python
で入ったっぽい。で、8000ポートをHTTP扱いに。
sudo semanage port -a -t http_port_t -p tcp 8000
すると、
ValueError: Port tcp/8000 already defined
ほかで使われているようだ。
sudo semanage port -l | grep 8000 # soundd_port_t tcp 8000, 9433, 16001
-mだと追加できるぽい。
sudo semanage port -m -t http_port_t -p tcp 8000