Dovecot: Permission denied
Cent OS 6.2のDovecot 2.0.9でPOP3サーバを構築中のこと。最後の段階になってDovecotがメールボックスを読み取れないという問題に遭遇しました。/var/log/maillog
には次のようなエラーが出ています。
Error: chdir(/var/vmail/kuroda@example.com//) failed:
Permission denied (euid=10000(vmail) egid=10000(vmail) missing +w perm:
/var/vmail/kuroda@example.com//, euid is not dir owner)
最初はパーミッションの問題かなと考えましたが、どうも違うようです。/var/vmail
は vmail
ユーザーがオーナーで、パーミッションは 770 になっています。これでいいはずです。
しばらく悩みましたが、「あ、SELinuxか」と気づきました。
かつては、SELinuxを無効にしてサーバを運用していましたが、最近は多少慣れてきたので、面倒ですが有効にして頑張っています。
案の定、setenforce 0
コマンドでSELinuxをPermissiveモードにすると先ほどのエラーは消えます。
では、SELinuxポリシーを作ってやりましょう。以下、rootで作業をしました。
$ cd /root/
$ mkdir -p selinux
$ cd selinux
$ grep dovecot /var/log/audit/audit.log | audit2allow -M dovecot-local
$ semodule -i dovecot-local
$ service dovecot restart
普通はこれでうまく行くのですが、今回はEnforceモードに戻したらまたエラーが出たので、もう1回
$ grep dovecot /var/log/audit/audit.log | audit2allow -M dovecot-local
$ semodule -i dovecot-local
$ service dovecot restart
を実行する必要がありました。まあ、すごく簡単と言うほどでもないけど、慣れれば短時間で終わる作業です。
dovecot-local
はSELinuxポリシー(モジュール)の名前です。既存のポリシーと名前がかぶるとダメなので、あらかじめ semodule -l | grep dovecot-local
コマンドで確認する必要があります。
ちなみに、audit2allow
コマンドはデフォルトではインストールされていません。policycoreutils-python
パッケージに含まれています。