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