タイトル通り、SELinuxにヤられました。
新しく取得したSSL証明書とkey(秘密鍵)ファイルを、/etc/nginx/cert/に配置して、Nginx落として立ち上げると、failedになりました。
/var/log/nginx/error.logには以下のメッセージが
2020/03/06 22:16:37 [emerg] 142740#142740: SSL_CTX_use_PrivateKey_file("/etc/nginx/cert/server.key") failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen('/etc/nginx/cert/server.key','r') error:20074002:BIO routines:FILE_CTRL:system lib error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib)
どうもserver.keyが開けないと言っている
ls -Z でSELinuxポリシーコンテキストを確認したところ
# ls -Z /etc/nginx/cert/
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 ca.crt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 royozaki.net.crt
-rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 server.key
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 www.yasukato.com.crt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 yasukato.server.key
なぜかserver.keyだけ、SELinuxコンテキストのラベルが違う。
user_home_t:s0になっている・・・
コレ、私がrootじゃないユーザーのhomeディレクトリにあったkeyファイルをmvで持ってきちゃったから起きた問題らしいです。
cpではなくmvで持ってくると、SELinuxコンテキストのラベル付けがおかしくなるそうです。
cpで持ってき直したら、無事nginx起動できました。
Redhatのページでも重要として書かれていました。
ちゃんとSELinux勉強したいと思ういいキッカケになりました。
しかし、毎度嫌な汗かかされますわ。
ほなまた
ちょっと余談
nginxの再起動時のお作法について
nginxをsystemctl stop nginxで落とした後、
# ps aux | grep nginx
# ss -lntp
で、プロセスがきちんと落ちているか、ポートもきちんと開放されたか確認すること
今回この確認をすっ飛ばしたら、systemctl start nginxはfailedになるのにnginxプロセスは生きていてポートも開放されていないというキモい状態になった。