
CentOS 7システムで、TLSが必要なdovecotを実行しようとしています。そのために、秘密鍵と証明書を作成しました。
[root@homeserver /]# ls -lZ indernet/cert/homeserver.*
-r--r--r--. root certuser system_u:object_r:default_t:s0 indernet/cert/homeserver.crt
-r--r-----. root certuser system_u:object_r:default_t:s0 indernet/cert/homeserver.key
[root@homeserver /]#
dovecot が実際にファイルをロードするようにするには、/etc/dovecot/conf.d/10-ssl.conf に次の行が含まれていることを確認しました。
ssl=required
ssl_key=</indernet/cert/homeserver.key
ssl_cert=</indernet/cert/homeserver.crt
問題の部分: Dovecot が起動できず、このエラーで失敗します:
dovecot: doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 14: ssl_key: Can't open file /indernet/cert/homeserver.key: Permission denied
証明書とキーのファイル権限を変更しようとしました(これは、https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/) を 777 に設定しても何も変わりません。SELinux がアクセスをブロックしている可能性があると指摘されたので、上記のように unconfined_u:object_r:default_t:s0 と system_u:object_r:default_t:s0 を設定しました。変化はありません。
さて、驚くべき部分: 非常に興味が湧いたので、/usr/lib/systemd/system/dovecot.serviceを編集して
ExecStart=/bin/strace /usr/sbin/dovecot
そして、/var/log/messages で、証明書とキーがアクセスされ、ロードされているのを確認できました。そして、dovecot は動作します。しかし、strace を再度削除すると、同じ問題が残ります。
ここで何が起こっているのでしょうか?
答え1
SELinux によってキーへのアクセスが拒否されたため、キーを読み取ることができません。
この問題を解決するには、コピー(cp
または を使用mv -Z
)、キーを、SELinux が TLS キーと証明書が保存されると想定しているディレクトリ (つまり、 とそのサブディレクトリ) にコピーします。または を/etc/pki/tls
使用した場合、新しいファイルには正しい SELinux コンテキストが含まれます。次に、Dovecot 構成でファイルの場所を更新します。cp
mv -Z