/home/xxxx/mail/.imap/INBOX 作成について

http://wiki2.dovecot.org/Errors/ChgrpNoPerm

dovecot は /var/mail/user ファイルのグループ (mail グループ) を /home/user/mail/.imap/INBOX
の作成時にコピーしようとしたが、このプロセス (接続したユーザ関連のプロセス?) は mail グループ
に属していないので、INBOX の作成に失敗した、というメッセージみたい。

回避方法としては、以下になる。
※アクセス権が mail グループ相当になる?。

mail_access_groups=mail

上記の dovecot プロセスの strace を採取すると、/home/user/mail/.imap/INBOX を
mail グループ (GID が 12) で chown して失敗し、その後、/home/test03/mail/.imap/INBOX
が削除されている。

[pid 1598] mkdir("/home/test03/mail", 0700) = 0 <0.000274>
[pid 1598] umask(077) = 0 <0.000003>
[pid 1598] chown("/home/test03/mail", 4294967295, 4294967295) = 0 <0.000009>
[pid 1598] stat("/home/test03/mail", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 <0.000006>
[pid 1598] prctl(PR_SET_DUMPABLE, 1) = 0 <0.000005>
[pid 1598] fcntl(11, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) <0.000004>
[pid 1598] fcntl(11, F_SETFL, O_RDWR|O_NONBLOCK) = 0 <0.000004>
[pid 1598] fcntl(11, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) <0.000004>
[pid 1598] fcntl(11, F_SETFL, O_RDWR|O_NONBLOCK) = 0 <0.000004>
[pid 1598] fstat(11, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0 <0.000005>
[pid 1598] lseek(11, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) <0.000004>
[pid 1598] getsockname(11, {sa_family=AF_INET6, sin6_port=htons(110), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 <0.000005>
[pid 1598] epoll_ctl(9, EPOLL_CTL_ADD, 11, {EPOLLIN|EPOLLPRI|EPOLLERR|EPOLLHUP, {u32=30022144, u64=30022144}}) = 0 <0.000006>
[pid 1598] stat("/home/test03/mail/.imap/INBOX", 0x7fffc306aaf0) = -1 ENOENT (No such file or directory) <0.000008>
[pid 1598] stat("/var/mail/test03", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000010>
[pid 1598] getegid() = 504 <0.000004>
[pid 1598] stat("/var/mail/test03", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000006>
[pid 1598] getegid() = 504 <0.000004>
[pid 1598] stat("/var/mail/test03", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000006>
[pid 1598] access("/var/mail/test03", R_OK|W_OK) = 0 <0.000006>
[pid 1598] stat("/var/mail/test03", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0 <0.000005>
[pid 1598] getegid() = 504 <0.000013>
[pid 1598] umask(0) = 077 <0.000004>
[pid 1598] mkdir("/home/test03/mail/.imap/INBOX", 0770) = -1 ENOENT (No such file or directory) <0.000005>
[pid 1598] umask(077) = 0 <0.000004>
[pid 1598] umask(0) = 077 <0.000004>
[pid 1598] mkdir("/home/test03/mail/.imap", 0700) = 0 <0.000070>
[pid 1598] umask(077) = 0 <0.000004>
[pid 1598] chown("/home/test03/mail/.imap", 4294967295, 4294967295) = 0 <0.000008>
[pid 1598] umask(0) = 077 <0.000014>
[pid 1598] mkdir("/home/test03/mail/.imap/INBOX", 0770) = 0 <0.000024>
[pid 1598] umask(077) = 0 <0.000004>
[pid 1598] chown("/home/test03/mail/.imap/INBOX", 4294967295, 12) = -1 EPERM (Operation not permitted) <0.000006>
[pid 1598] rmdir("/home/test03/mail/.imap/INBOX") = 0 <0.000055>
[pid 1598] open("/etc/group", O_RDONLY|O_CLOEXEC) = 14 <0.000007>
[pid 1598] fcntl(14, F_GETFD) = 0x1 (flags FD_CLOEXEC) <0.000004>
[pid 1598] fstat(14, {st_mode=S_IFREG|0644, st_size=644, ...}) = 0 <0.000004>
[pid 1598] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f98bbebc000 <0.000005>
[pid 1598] read(14, "root:x:0:\nbin:x:1:bin,daemon\ndaemon:x:2:bin,daemon\nsys:x:3:bin,adm\nadm:x:4:adm,daemon\ntty:x:5:\ndisk:x:6:\nlp:x:7:daemon\nmem:x:8:\nkmem:x:9:\nwheel:x:10:\nmail:x:12:mail,postfix\nuucp:x:14:\nman:x:15:\ngames:x:20:\ngopher:x:30:\nvideo:x:39:\ndip:x:40:\nftp:x:50:\nlock:x:54:\naudio:x:63:\nnobody:x:99:\nusers:x:100:\nutmp:x:22:\nutempter:x:35:\nfloppy:x:19:\nvcsa:x:69:\ncdrom:x:11:\ntape:x:33:\ndialout:x:18:\nsaslauth:x:76:\npostdrop:x:90:\npostfix:x:89:\nsshd:x:74:\ntcpdump:x:72:\napache:x:48:\nwbpriv:x:88:\ncentos:x:500:\nCENTOS01:x:501:\nntp:x:38:\nabrt:x:173:\ndbus:x:81:\ndovecot:x:97:\ndovenull:x:499:\nmailnull:x:47:\nsmmsp:x:51:\ntest01:x:502:\ntest02:x:503:\ntest03:x:504:\n", 4096) = 644 <0.000008>
[pid 1598] close(14) = 0 <0.000005>
[pid 1598] munmap(0x7f98bbebc000, 4096) = 0 <0.000008>
[pid 1598] getegid() = 504 <0.000004>
[pid 1598] getegid() = 504 <0.000004>
[pid 1598] open("/etc/group", O_RDONLY|O_CLOEXEC) = 14 <0.000006>
[pid 1598] fstat(14, {st_mode=S_IFREG|0644, st_size=644, ...}) = 0 <0.000004>
[pid 1598] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f98bbebc000 <0.000005>
[pid 1598] read(14, "root:x:0:\nbin:x:1:bin,daemon\ndaemon:x:2:bin,daemon\nsys:x:3:bin,adm\nadm:x:4:adm,daemon\ntty:x:5:\ndisk:x:6:\nlp:x:7:daemon\nmem:x:8:\nkmem:x:9:\nwheel:x:10:\nmail:x:12:mail,postfix\nuucp:x:14:\nman:x:15:\ngames:x:20:\ngopher:x:30:\nvideo:x:39:\ndip:x:40:\nftp:x:50:\nlock:x:54:\naudio:x:63:\nnobody:x:99:\nusers:x:100:\nutmp:x:22:\nutempter:x:35:\nfloppy:x:19:\nvcsa:x:69:\ncdrom:x:11:\ntape:x:33:\ndialout:x:18:\nsaslauth:x:76:\npostdrop:x:90:\npostfix:x:89:\nsshd:x:74:\ntcpdump:x:72:\napache:x:48:\nwbpriv:x:88:\ncentos:x:500:\nCENTOS01:x:501:\nntp:x:38:\nabrt:x:173:\ndbus:x:81:\ndovecot:x:97:\ndovenull:x:499:\nmailnull:x:47:\nsmmsp:x:51:\ntest01:x:502:\ntest02:x:503:\ntest03:x:504:\n", 4096) = 644 <0.000008>
[pid 1598] close(14) = 0 <0.000004>
[pid 1598] munmap(0x7f98bbebc000, 4096) = 0 <0.000007>
[pid 1598] write(2, "\1\0101598 prefix=pop3(test03): \n", 29) = 29 <0.000021>
[pid 1598] write(2, "\1\0041598 chown(/home/test03/mail/.imap/INBOX, -1, 12(mail)) failed: Operation not permitted (egid=504(test03), group based on /var/mail/test03)\n", 142) = 142 <0.000050>
[pid 1598] write(2, "\1\0041598 mkdir(/home/test03/mail/.imap/INBOX) failed: Operation not permitted\n", 76) = 76 <0.000033>

以下が参考になる?
http://server-setting.info/centos/dovecot-fchmod-error.html



●mail_access_groups=mail が未設定の場合


(1) ユーザ作成

[root@LVS ~]# useradd test01
[root@LVS ~]# passwd test01
ユーザー test01 のパスワードを変更。
新しいパスワード:
よくないパスワード: 異なる文字が十分に含まれていません
よくないパスワード: 簡単すぎます
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
[root@LVS ~]#
[root@LVS ~]#
[root@LVS ~]# ls -lR /var/spool/mail/
/var/spool/mail/:
合計 4
-rw-rw----. 1 CENTOS01 mail 0 1月 16 21:59 2014 CENTOS01
-rw-rw----. 1 centos mail 0 1月 16 21:58 2014 centos
-rw------- 1 root root 745 8月 25 23:26 2014 root
-rw-rw---- 1 test01 mail 0 8月 27 00:09 2014 test01★ユーザ作成時に生成
[root@LVS ~]#
[root@LVS ~]# ls -alR /home/test01/
/home/test01/:
合計 20
drwx------ 2 test01 test01 4096 8月 27 00:09 2014 .
drwxr-xr-x. 5 root root 4096 8月 27 00:09 2014 ..
-rw-r--r-- 1 test01 test01 18 2月 22 06:09 2013 .bash_logout
-rw-r--r-- 1 test01 test01 176 2月 22 06:09 2013 .bash_profile
-rw-r--r-- 1 test01 test01 124 2月 22 06:09 2013 .bashrc
[root@LVS ~]#

(2) pop3 に初回接続

[root@LVS ~]# telnet localhost pop3
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user test01
+OK
pass test
-ERR [IN-USE] Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2014-08-27 00:11:14]
Connection closed by foreign host.
[root@LVS ~]#

以下ログ出力。

Aug 27 00:11:14 LVS dovecot: pop3-login: Login: user=<test01>, method=PLAIN, rip=::1, lip=::1, mpid=1430, secured
Aug 27 00:11:14 LVS dovecot: pop3(test01): Error: chown(/home/test01/mail/.imap/INBOX, -1, 12(mail)) failed: Operation not permitted (egid=502(test01), group based on /var/mail/test01)
Aug 27 00:11:14 LVS dovecot: pop3(test01): Error: mkdir(/home/test01/mail/.imap/INBOX) failed: Operation not permitted
Aug 27 00:11:14 LVS dovecot: pop3(test01): Error: Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2014-08-27 00:11:14]
Aug 27 00:11:14 LVS dovecot: pop3(test01): Couldn't open INBOX top=0/0, retr=0/0, del=0/0, size=0

以下ファイルの生成状況。

[root@LVS ~]# ls -lR /var/spool/mail/
/var/spool/mail/:
合計 4
-rw-rw----. 1 CENTOS01 mail 0 1月 16 21:59 2014 CENTOS01
-rw-rw----. 1 centos mail 0 1月 16 21:58 2014 centos
-rw------- 1 root root 745 8月 25 23:26 2014 root
-rw-rw---- 1 test01 mail 0 8月 27 00:09 2014 test01
[root@LVS ~]#
[root@LVS ~]#
[root@LVS ~]# ls -alR /home/test01/
/home/test01/:
合計 24
drwx------ 3 test01 test01 4096 8月 27 00:11 2014 .
drwxr-xr-x. 5 root root 4096 8月 27 00:09 2014 ..
-rw-r--r-- 1 test01 test01 18 2月 22 06:09 2013 .bash_logout
-rw-r--r-- 1 test01 test01 176 2月 22 06:09 2013 .bash_profile
-rw-r--r-- 1 test01 test01 124 2月 22 06:09 2013 .bashrc
drwx------ 3 test01 test01 4096 8月 27 00:11 2014 mail★初回接続時に生成

/home/test01/mail:
合計 12
drwx------ 3 test01 test01 4096 8月 27 00:11 2014 .
drwx------ 3 test01 test01 4096 8月 27 00:11 2014 ..
drwx------ 2 test01 test01 4096 8月 27 00:11 2014 .imap

/home/test01/mail/.imap:
合計 8
drwx------ 2 test01 test01 4096 8月 27 00:11 2014 .
drwx------ 3 test01 test01 4096 8月 27 00:11 2014 ..
[root@LVS ~]#
[root@LVS ~]#


●mail_access_groups=mail が設定済み

(1) ユーザ作成

[root@LVS ~]# useradd test02
[root@LVS ~]# passwd test02
ユーザー test02 のパスワードを変更。
新しいパスワード:
よくないパスワード: 異なる文字が十分に含まれていません
よくないパスワード: 簡単すぎます
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
[root@LVS ~]#
[root@LVS ~]#
[root@LVS ~]# ls -lR /var/spool/mail/
/var/spool/mail/:
合計 4
-rw-rw----. 1 CENTOS01 mail 0 1月 16 21:59 2014 CENTOS01
-rw-rw----. 1 centos mail 0 1月 16 21:58 2014 centos
-rw------- 1 root root 745 8月 25 23:26 2014 root
-rw-rw---- 1 test01 mail 0 8月 27 00:09 2014 test01
-rw-rw---- 1 test02 mail 0 8月 27 00:25 2014 test02
[root@LVS ~]#
[root@LVS ~]# ls -alR /home/test02/
/home/test02/:
合計 20
drwx------ 2 test02 test02 4096 8月 27 00:25 2014 .
drwxr-xr-x. 6 root root 4096 8月 27 00:25 2014 ..
-rw-r--r-- 1 test02 test02 18 2月 22 06:09 2013 .bash_logout
-rw-r--r-- 1 test02 test02 176 2月 22 06:09 2013 .bash_profile
-rw-r--r-- 1 test02 test02 124 2月 22 06:09 2013 .bashrc
[root@LVS ~]#

(2) pop3 に初回接続

[root@LVS ~]# telnet localhost pop3
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user test02
+OK
pass test
+OK Logged in.
stat
+OK 0 0
quit
+OK Logging out.
Connection closed by foreign host.
[root@LVS ~]#

以下ログ出力。

Aug 27 00:26:09 LVS dovecot: pop3-login: Login: user=<test02>, method=PLAIN, rip=::1, lip=::1, mpid=1480, secured
Aug 27 00:26:19 LVS dovecot: pop3(test02): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

以下ファイルの生成状況。

[root@LVS ~]# ls -lR /var/spool/mail/
/var/spool/mail/:
合計 4
-rw-rw----. 1 CENTOS01 mail 0 1月 16 21:59 2014 CENTOS01
-rw-rw----. 1 centos mail 0 1月 16 21:58 2014 centos
-rw------- 1 root root 745 8月 25 23:26 2014 root
-rw-rw---- 1 test01 mail 0 8月 27 00:09 2014 test01
-rw-rw---- 1 test02 mail 0 8月 27 00:25 2014 test02
[root@LVS ~]#
[root@LVS ~]#
[root@LVS ~]#
[root@LVS ~]# ls -alR /home/test02/
/home/test02/:
合計 24
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 .
drwxr-xr-x. 6 root root 4096 8月 27 00:25 2014 ..
-rw-r--r-- 1 test02 test02 18 2月 22 06:09 2013 .bash_logout
-rw-r--r-- 1 test02 test02 176 2月 22 06:09 2013 .bash_profile
-rw-r--r-- 1 test02 test02 124 2月 22 06:09 2013 .bashrc
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 mail

/home/test02/mail:
合計 12
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 .
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 ..
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 .imap

/home/test02/mail/.imap:
合計 12
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 .
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 ..
drwxrwx--- 2 test02 mail 4096 8月 27 00:26 2014 INBOX

/home/test02/mail/.imap/INBOX:
合計 12
drwxrwx--- 2 test02 mail 4096 8月 27 00:26 2014 .
drwx------ 3 test02 test02 4096 8月 27 00:26 2014 ..
-rw-rw---- 1 test02 mail 148 8月 27 00:26 2014 dovecot.index.log
[root@LVS ~]#


●もう一度、mail_access_groups=mail が未設定の場合 (ただしユーザは、mail グループ)
※ユーザのグループ設定に関連するか確認するため。
結論としては、グループ設定に関連していた。

デフォルトから追加した設定は、以下の設定のみ

mail_location = mbox:~/mail:INBOX=/var/mail/%u

(1) ユーザ作成

[root@LVS ~]# useradd -g mail test04
[root@LVS ~]# passwd test04
ユーザー test04 のパスワードを変更。
新しいパスワード:
よくないパスワード: 異なる文字が十分に含まれていません
よくないパスワード: 簡単すぎます
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。
[root@LVS ~]# id test04
uid=505(test04) gid=12(mail) 所属グループ=12(mail)
[root@LVS ~]#
[root@LVS ~]# ls -lR /var/spool/mail/test04
-rw-rw---- 1 test04 mail 0  8月 28 01:09 2014 /var/spool/mail/test04
[root@LVS ~]#
[root@LVS ~]# ls -laR /home/test04/
/home/test04/:
合計 20
drwx------  2 test04 mail 4096  8月 28 01:09 2014 .
drwxr-xr-x. 8 root   root 4096  8月 28 01:09 2014 ..
-rw-r--r--  1 test04 mail   18  2月 22 06:09 2013 .bash_logout
-rw-r--r--  1 test04 mail  176  2月 22 06:09 2013 .bash_profile
-rw-r--r--  1 test04 mail  124  2月 22 06:09 2013 .bashrc
[root@LVS ~]#

(2) pop3 に初回接続

[root@LVS ~]# telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user test04
+OK
pass test
+OK Logged in.
stat
+OK 0 0
quit
+OK Logging out.
Connection closed by foreign host.
[root@LVS ~]#

以下ログ出力。

Aug 28 01:10:26 LVS dovecot: pop3-login: Login: user=<test04>, method=PLAIN, rip=::1, lip=::1, mpid=1556, secured
Aug 28 01:10:29 LVS dovecot: pop3(test04): Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

以下ファイルの生成状況。

[root@LVS ~]# ls -lR /var/spool/mail/test04
-rw-rw---- 1 test04 mail 0  8月 28 01:09 2014 /var/spool/mail/test04
[root@LVS ~]#
[root@LVS ~]# ls -laR /home/test04/
/home/test04/:
合計 24
drwx------  3 test04 mail 4096  8月 28 01:10 2014 .
drwxr-xr-x. 8 root   root 4096  8月 28 01:09 2014 ..
-rw-r--r--  1 test04 mail   18  2月 22 06:09 2013 .bash_logout
-rw-r--r--  1 test04 mail  176  2月 22 06:09 2013 .bash_profile
-rw-r--r--  1 test04 mail  124  2月 22 06:09 2013 .bashrc
drwx------  3 test04 mail 4096  8月 28 01:10 2014 mail

/home/test04/mail:
合計 12
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 .
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 ..
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 .imap

/home/test04/mail/.imap:
合計 12
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 .
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 ..
drwxrwx--- 2 test04 mail 4096  8月 28 01:10 2014 INBOX

/home/test04/mail/.imap/INBOX:
合計 12
drwxrwx--- 2 test04 mail 4096  8月 28 01:10 2014 .
drwx------ 3 test04 mail 4096  8月 28 01:10 2014 ..
-rw-rw---- 1 test04 mail  148  8月 28 01:10 2014 dovecot.index.log
[root@LVS ~]#