新サーバにMaildirディレクトリを移動させたときのトラブル
この記事の所要時間:約8分54秒
サーバを作りなおした件で、Postfix・Dovecotサーバもリストアしました。
新サーバでPostfixとDovecotをyum install
したあと、設定ファイル群(/etc/postfix
と/etc/dovecot
)と/home
をrsync -av
で旧サーバのものにごっそり入れ替え。メールの中身も設定も全てこれで受け継がれる。
しかし問題が発生。メールの送受信が上手くいかない。MacのMailがエラーを吐き続ける。/var/log/maillog
を見ると以下のようになっていた。
Jun 8 10:45:45 hostname dovecot: imap(user): Error: opendir(/home/user/Maildir/tmp) failed: Permission denied Jun 8 10:45:45 hostname dovecot: imap(user): Error: open(/home/user/Maildir/dovecot.index.log) failed: Permission denied (euid=500(user) egid=500(user) missing +r perm: /home/user/Maildir/dovecot.index.log, euid is not dir owner) Jun 8 10:45:45 hostname dovecot: imap(user): Error: open(/home/user/Maildir/dovecot-uidlist) failed: Permission denied Jun 8 10:45:45 hostname dovecot: imap(user): Error: open(/home/user/Maildir/dovecot-uidlist) failed: Permission denied
“Permission denied”?? rsync -a
なら所有権も全てそのままコピーされるはずだけど。chmod -R user.user ~/Maildir
しても何も変化なし・・・・。かなりハマりました。
調べてみると上の"euid is not dir owner"
がどうもポイントのようだ。EUID(実効ユーザID)とやらが正しくないから、SELinuxに引っかかってるということらしい。EUIDはls
に-Z
オプションをつけるとファイルのSELinuxの「コンテキスト」を表示できる。
$ ls -lZ ~/Maildir drwx------. user user unconfined_u:object_r:home_root_t:s0 cur -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot-keywords -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot-uidlist -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot-uidvalidity -r--r--r--. user user unconfined_u:object_r:home_root_t:s0 dovecot-uidvalidity.5161460f -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot.index -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot.index.cache -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot.index.log -rw-------. user user unconfined_u:object_r:home_root_t:s0 dovecot.mailbox.log drwx------. user user unconfined_u:object_r:home_root_t:s0 new -rw-------. user user unconfined_u:object_r:home_root_t:s0 subscriptions drwxrwxrwx. user user unconfined_u:object_r:home_root_t:s0 tmp
よく意味は分からないが、例えば”unconfied_u:object_r:home_root_t:s0″は”(ユーザ):(ロール):(タイプ):(謎)”となっているところまでは理解した。
SELinuxコンテキストがおかしくなった場合、restorecon
というコマンドでその名の通り適切なものに戻してくれるらしい。
$ restorecon -R ~/Maildir
この結果が以下。タイプが全てmail_home_rw_t
となったのを確認した。
$ ls -lZ ~/Maildir drwx------. user user unconfined_u:object_r:mail_home_rw_t:s0 cur -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot-keywords -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot-uidlist -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot-uidvalidity -r--r--r--. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot-uidvalidity.5161460f -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot.index -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot.index.cache -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot.index.log -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 dovecot.mailbox.log drwx------. user user unconfined_u:object_r:mail_home_rw_t:s0 new -rw-------. user user unconfined_u:object_r:mail_home_rw_t:s0 subscriptions drwxrwxrwx. user user unconfined_u:object_r:mail_home_rw_t:s0 tmp
このあと直ちにメールの送受信が可能になった。SELinuxで引っかかって問題が起こったのはこれが初めてなのでかなり路頭に迷ってしまった。SELinuxをdisabledにする気持ちもわかる。個人レベルのサーバだと必要ないのかもね。
SELinuxに関してこちらのサイトがわかり易かったので載せておきます。
http://www.kozupon.com/security/selinux.html
[amazonjs asin=”4873112257″ locale=”JP” title=”SELinuxシステム管理 ―セキュアOSの基礎と運用”]
関連記事
-
-
/tmp/orbit-ユーザ名以下の謎のファイルが/tmpパーティションを圧迫する問題
これも以前から解決していなかった問題。tmpwatchの設定を変更することで解決した。 cronか
-
-
サーバに追加していく機能まとめ。
いろいろと本を読んでいたら錯綜してきた。 ちょっとここでこれからやることを整理する。
-
-
Postfixに新規ユーザを追加する場合の手順
送受信どちらも問題なくできるようになり、ひとまず安心。 サブで使ってるユーザアカウントの方のア
-
-
Twitterで自動フォロー返しをするPHPコード
Apple信者の毒舌な妹botで使用している自動フォロー返しのコードをメモ。前提は Githu
-
-
CakePHPディレクトリを他サーバに移転する際に困ったこと
まだ解決できていないが、CakePHPで作ったアプリケーションを別のレンタルサーバーに移転し
-
-
OP25Bを越えてメールの送信を可能にする手順
やっと出来るようになりました。この本のお陰ですほんとに。 送信関連でやったことは、SM
-
-
MySQLからツイートを選択してツイートするPHPコード
Twitter escultura de arena / Rosaura Ochoa Ap
-
-
外付けHDDを起動時に自動マウントする
前エントリでフォーマットからマウントまでやったが、自動マウントの設定を忘れていた
-
-
ApacheでSSLを有効に(mod_ssl)
動機は、ownCloudをインストールしたこと。自分しか使わないとはいえブラウザでアクセスできるオン
-
-
WordPress記事にツイートを埋め込むテスト
なんとWordPressでは何もプラグインを導入しなくても、デフォルトでTwitterのツイートを貼