SSL配置してNginx再起動したらSELinuxにヤられた話

タイトル通り、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のページでも重要として書かれていました。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-maintaining_selinux_labels_

ちゃんとSELinux勉強したいと思ういいキッカケになりました。

しかし、毎度嫌な汗かかされますわ。

ほなまた

ちょっと余談

nginxの再起動時のお作法について

nginxをsystemctl stop nginxで落とした後、

# ps aux | grep nginx
# ss -lntp

で、プロセスがきちんと落ちているか、ポートもきちんと開放されたか確認すること

今回この確認をすっ飛ばしたら、systemctl start nginxはfailedになるのにnginxプロセスは生きていてポートも開放されていないというキモい状態になった。