Добрые люди, помогите пожалуйста разобраться! Голову сломал, маны прочитал, но видно туповат.
Пришло время, и на обновленном серваке нужно поменять способ хранения почты на maildir. Дальше я сразу скажу, что похоже, я чего-то глобально не понимаю. Расскажу, что сделал. По идее, почта для каждого пользователя должна складываться в свою папку: /var/mail/%u. Складывается. Прямо в корень (уже догадываюсь, что зря, но это проблемы не решает). Простейшая plainlogin аутентификация.
Вот мои .conf
protocols = imap pop3
listen = *
base_dir = /var/run/dovecot/
dict {
}
!include conf.d/*.conf
disable_plaintext_auth = no
ssl=no
auth_mechanisms = plain login
!include auth-system.conf.ext
service director {
unix_listener login/director {
}
fifo_listener login/proxy-notify {
}
unix_listener director-userdb {
}
inet_listener {
}
}
service imap-login {
}
service pop3-login {
}
protocol lmtp {
}
plugin {
}
mail_location = maildir:/var/mail/%u/
namespace inbox {
inbox = yes
}
mail_uid = mail
mail_gid = mail
protocol !indexer-worker {
}
mbox_write_locks = fcntl
service imap-login {
inet_listener imap {
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener lmtp {
}
}
service imap {
}
service pop3 {
}
service auth {
unix_listener auth-userdb {
}
}
service auth-worker {
}
service dict {
unix_listener dict {
}
}
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cipher_list = PROFILE=SYSTEM
protocol lda {
}
namespace inbox {
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Trash {
special_use = \Trash
}mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
}
protocol imap {
}
protocol lmtp {
}
protocol pop3 {
}
passdb {
driver = pam
}
userdb {
driver = passwd
args = blocking=no
}
Часть из этого я не понимаю, в тч вообще всё, что касается inbox.
Пользователь проходит аутентификацию, после чего получается вот что:
dovecot[31438]: pop3-login: Login: user=<a>, method=PLAIN, rip=xx.xx.xx.xx, lip=xx.xx.xx.xx, mpid=372, session=<7WxoLY52ZHSwOUxwO>
dovecot[31438]: pop3(a): Error: opendir(/var/mail/a/new) failed: Permission denied (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))
dovecot[31438]: pop3(a): Error: Couldn't init INBOX: opendir(/var/mail/a/new) failed: Permission denied (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))
dovecot[31438]: pop3(a): Couldn't init INBOX: opendir(/var/mail/a/new) failed: Permission denied (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail)) top=0/0, retr=0/0, del=0/0, size=0
Я прочитал маны довекота по поводу этих ошибок, где написано, что довекот пытается создать в каждой папке еще кучу чего-то. Тут я задымился.
Можно я задам два базовых вопроса, может быть зацепившись разберусь ))
1)Я явно не понимаю структуры каталогов в maildir. Просто /cur,/new и /tmp недостаточно? Или мой же конфиг ведет мимо?..
2) WTF, как это we're not in group 12(mail), если именно в ней "мы" и состоим?
Заранее спасибо и извините за много букв
https://serverfault.com/questions/814398/dovecot-missing-w-p...
> https://serverfault.com/questions/814398/dovecot-missing-w-p...Спасибо, но это кстати неверный ответ. Ман довекота категорически не советует ему следовать )) Там есть второй - выставить права родительской директории в 600. Он работает. Но это не всегда удобно..
>[оверквотинг удален]
> denied (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group
> 12(mail)) top=0/0, retr=0/0, del=0/0, size=0
> Я прочитал маны довекота по поводу этих ошибок, где написано, что довекот
> пытается создать в каждой папке еще кучу чего-то. Тут я задымился.
> Можно я задам два базовых вопроса, может быть зацепившись разберусь ))
> 1)Я явно не понимаю структуры каталогов в maildir. Просто /cur,/new и /tmp
> недостаточно? Или мой же конфиг ведет мимо?..
> 2) WTF, как это we're not in group 12(mail), если именно в
> ней "мы" и состоим?
> Заранее спасибо и извините за много буквSorry, но Вы даже базово не пытались разобраться.
Почту принимает MTA и раскладывает туда, куда настроите, последнее
ВАЖНО для сопряжения с доступом к ней по IMAP(POP3).Допустим Вы используете системных пользователей и нативную авторизацию,
для MBOX by default:# ls -la /var/ | grep mail
drwxrwxr-x 2 root mail 512 7 авг. 15:14 mail
^^^^^^^^^^^^^^^^^^^^^^^^^^^^а вот внутри, почтовые ящики с chown системного пользователя, с его id/gid
Теперь Вы решили перейти на Maildir и у Вас:
>mail_uid = mail
>mail_gid = mailПонятно что системный пользователь не сможет без доп.движений создавать, удалять
директории и файлы внутри /var/mail/%u с uid/gid=mailКогда пользователь авторизуется в системе через passwd(pam), dovecot
использует его euid/egid и ничего не может сделать, о чем и сообщает:> dovecot[31438]: pop3(a): Error: opendir(/var/mail/a/new) failed: Permission denied
> (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))не могу создать директорию /var/mail/a/new - потому как user: "a" id=516,gid=100 не
в группе mail(gid=12)В логах все очень понятно расписано.
Читать wiki не очень удобно, это конечно же не структурированная документация,
но вполне можно.
>[оверквотинг удален]
> директории и файлы внутри /var/mail/%u с uid/gid=mail
> Когда пользователь авторизуется в системе через passwd(pam), dovecot
> использует его euid/egid и ничего не может сделать, о чем и сообщает:
>> dovecot[31438]: pop3(a): Error: opendir(/var/mail/a/new) failed: Permission denied
>> (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))
> не могу создать директорию /var/mail/a/new - потому как user: "a" id=516,gid=100 не
> в группе mail(gid=12)
> В логах все очень понятно расписано.
> Читать wiki не очень удобно, это конечно же не структурированная документация,
> но вполне можно.Большое спасибо за оценку моего развития, это всегда приятно )
А какой это проливает свет на стандартную структуру каталогов maildir?
(вы не правы - см коммент выше, там написано)
>[оверквотинг удален]
>>> dovecot[31438]: pop3(a): Error: opendir(/var/mail/a/new) failed: Permission denied
>>> (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))
>> не могу создать директорию /var/mail/a/new - потому как user: "a" id=516,gid=100 не
>> в группе mail(gid=12)
>> В логах все очень понятно расписано.
>> Читать wiki не очень удобно, это конечно же не структурированная документация,
>> но вполне можно.
> Большое спасибо за оценку моего развития, это всегда приятно )
> А какой это проливает свет на стандартную структуру каталогов maildir?
> (вы не правы - см коммент выше, там написано)что есть "стандартная структура maildir"? RFC на данный формат просто нет.
Те (то есть) Вы не удосужились изучить формат?
Ниже, то что я себе набросал много лет назад, на скорую руку, для
общего развития, надеюсь хоть какую-то пользу принесет...Описание формата Maildir
------------------------Maildir - структура директорий в которой хранятся email сообщения.
Традиционно, email директории где сохраняются email в виде текстовых
файлов, называются "mboxes".Mboxes имеют известные ограничения:
- невозможность одновременного использования разными приложениями,
только одно приложение может использовать mboxes в конкретный момент
времени
- для одновременного использования несколькими приложениями, необходимо
использовать блокировку файлов: locking
- при использовании блокировки часто возникают проблемы, особенно в случае
сетевых файловых систем, например: nfs, samba и тд
- проблемы с locking могут привести к порче mboxes при одновременном
использовании несколькими приложениямиСпецификация Maildir в отличие от Mboxes:
- позволяет одновременную работу
- не требует использовать механизм locking'а
- приложения могут производить одновременный update в maildirСодержимое Maildir
"maildir" - структура директорий:
- в Courier создается утилитой maildirmake (maildrop-maildirmake)
- в procmail создается автоматически
- в dovecot создается автоматическиОбычно, "maildir" не требует "group"/"world" привилегий, пока не потребуется
чтобы кто-то еще мог читать Вашу почту.Maildir содержит три поддиректории:
- tmp
- new
- cur
Эти три директории входят в состав "maildir", куда и будет доставляться
новая почта.
Дополнительные директории/фолдеры с именами, которые начинаются с "."
- .Drafts
- .Sent
также имееют внутри структуру поддиректорий, аналогичную первичной:
- tmp, new, cur + дополнительно, файл нулевой длины maildirfolder,
цель которого, информировать агент почтовой доставки о том что он
действительно доставляет почту в folder и дополнительную информации,
должен или может получить из родительской директории.
Нет необходимости в реальной вложенности фолдеров. Фолдеры, такие как
.Sent, в реалии, могут не иметь вложенных поддиректорий-фолдеров.
Только primary-первичная (main) maildir содержит поддиректории, остальные,
могут вместо физической фложенности, использовать логическую вложенность,
которая реализуется посредством использования разделетеля "."
Например: фолдер ".Sent.2002" - обозначает subfolder "2002" для subfolder
"Sent".Folder name encoding
Имена фолдеров могуь содержать любой Unicode символ, исключая управляющие:
- US-ASCII characters, U+0x0020 - U+0x007F
- исключение period ".", forward-slash "/" и амперсенд "&" символы
соответственно: "." = U+0x002E, "/" = U+0x002F, "&" = U+0x0026
- амперсенд представляется двумя символами: "&-"
- ".", "/" и non US-ASCII unicode символы, представляются с использованием
UTF-7 и модифицированным base64-encoding'ом.Название non US-ASCII фолдера, начинается с символа "&" - это начало
модифицированной base64-encoding последовательности и заканчивается
символом "-". Последовательность 16-bit Unicode символов, записывется
в big-endian order, и кодируется base64-encoding методом (RFC1521 sec.5.2)
с использованием следующей модификацией:
- "=" опускается
- "," используется как разделитель вместо "/"Пример: the word “Resume” with both "e"s being the e-acute character, U+0x00e9, is encoded as “R&AOk-sum&AOk-” (so a folder of that name would be a maildir subdirectory called “.R&AOk-sum&AOk-”).
ПО которое использует "maildirs" может создавать дополнительные файлы,
кроме директорий tmp,new,cur для собственных целей, индексы, списки, логи,
зависит от реализации Maildir.Почтовые сообщения
сохраняются в отдельных файлах, "one mail per one file", каждое письмо
в отдельном файле.
- tmp - для временной работы с mail в процессе доставки
- new - содерджит файлы-письма, доставленные, но еще не просмотренные
- cur - содержит письма которые хоть раз были открыты mail applicationsДобавление нового сообщения в maildir
Общий формат maildir файла:
"<base filename>:2,<flags>"
При создании имени нового файла для сохранения почты, используется
два формата:
- "time.MusecPpid.host"
- "time.MusecPpid_unique.host""time" и "usec" - берутся из системного вызова gettimeofday,
"pid" - номер ткущего процесса доставки этой почты в maildir
"host" - имя хоста где производится доставкаВерхнее из описания Maildir от Courier, Dovecot использует свои
дополнительные расширения:
- imap uid - постоянный уникальный ID номер для каждого сообщения
dovecot использует dovecot-uidlist файл для сохранения соответствия
uid <-> filename, файл базируется на формате Courier IMAP:
courierimapuiddb file# cat dovecot-uidlist
3 V1341751864 N35214 Gd7a85e003402aa5779100000b0808fdd
22215 :1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359
30270 :1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935
30285 :1497496598.M121151P77394.joker.jinr.ru,S=7161,W=7263
34220 :1516186098.M483926P75277.joker.jinr.ru,S=3661182,W=3708766
34297 :1516608714.M734791P3232.joker.jinr.ru,S=3027,W=3083
34316 :1516692335.M644598P7722.joker.jinr.ru,S=13970,W=14227
34512 :1517390833.M516761P46296.joker.jinr.ru,S=13816,W=14138
34706 :1518089238.M969474P25018.joker.jinr.ru,S=5893,W=5988
34724 :1518174535.M309472P84653.joker.jinr.ru,S=3501,W=3600
35153 :1519822787.M80161P28033.joker.jinr.ru,S=2713,W=2773
35213 :1519987101.M852881P74418.joker.jinr.ru,S=4644,W=4762
#файл начинается с заголовка:
3 V1341751864 N35214 Gd7a85e003402aa5779100000b0808fdd
- 3 версия формата используемого Dovecot v1.1+
- 1341751864 IMAP UIDVALIDITY
- 35214 UID который будет присвоен следующему сообщению-файлу
- d7a85e003402aa5779100000b0808fdd 128'bitный mailbox global UID hex
- возможны другие поля, порядок которых неваженV1 - совместима с Courier
V2 - была использована несколькими non-release версиямивслед за заголовком следует список мапирования UID <-> имена файлов
22215 :1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359
30270 :1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935- 22215,30270 - UID сообщений-писем
- S=2306 и S=40025 - размеры файлов
- W=2359 и W=40935 - размеры файлов +CR+LF- ,S=<size>: указывает размер файла (имя файла содержит размер который
полезен для Maildir++ quota
- ,W=<vsize>: указывает размер файла по RFC822.SIZE, размер файла с CR+LF,
если письмо сохранено с CR+LF, <size> == <vsize>Использование timestamp в именах файлов
Вернемся к формату имени файла maildir:
"<base filename>:2,<flags>"
Как уже было сказано, <base filename> состоит из timestamp, имени хоста
и флагов:# ls -la cur
-rw-r--r-- 1 lavr 1000 2306 Dec 23 2007 1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359:2,RS
-rw-r--r-- 1 lavr 1000 40025 Jun 14 2007 1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935:2,S
-rw-r--r-- 1 lavr 1000 7161 Jun 15 2007 1497496598.M121151P77394.joker.jinr.ru,S=7161,W=7263:2,S
-rw-r--r-- 1 lavr 1000 3661182 Jan 17 13:48 1516186098.M483926P75277.joker.jinr.ru,S=3661182,W=3708766:2,RS
...
где:
1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359:2,RS
^^^^^^^^^^- unix timestamp ^^^^^^- размер^-новое,далее состояние
- :2 - новое, если состояние отсутствует, значит:
not seen/replied/marked/deleted
состояние:
- "D" - черновое "draft"
- "R" - "reply"
- "S" - "seen" просмотрено
- "T" - "trashed" помечено на удаление
- "F" - помечено пользователемИспользование "timestamps":
- mtime используется как "IMAP INTERNALDATE" по RFC 3501 сек. 2.3.3
и не должно изменяться в соответствии с сек.2.3.1.1.4
- ctime используется DOvceot для внутренних нужд "save/copy date", за
исключением корректного значения в "dovecot.index.cache". Используется
внешними командами, например: 'doveadm expunge savedbefore'В директориях "cur" и "new", в качестве timestamp используется:
- mtime - для определения изменений mailbox и регенерации индексных
файловСтруктура директорий.
По умолчанию, Dovecot использует свой Maildir++ формат, это означает что
все фолдеры находятся внутри директории ~/Maildir:Описание формата Maildir++
http://www.courier-mta.org/imap/README.maildirquota.htmlОсновным достижением Maildir++, является реализация maildirquota,
однако при этом, считается что лучшей реализацией квот для почтовых
ящиков, будет квотирование на уровне файловой системы и использование
квот для каждого пользователся системными средствами.И тем не менее, для формата Maildir имеется собственная реализация
квотирования, которая не зависит от квот на уровне файловой системы.
Важным условием для использования maildirquota является хранение почты
в формате maildir в домашней директории пользователя, другим ньюансом,
является использование квот для пользователей виртуального домена, когда
для доступа к почте пользователей виртуального домена используется один
специальный идентификатор пользователя.http://www.courier-mta.org/maildir.html - спецификация
http://www.courier-mta.org/imap/README.maildirquota.html
https://wiki.dovecot.org/Quota/Maildir
> 1)Я явно не понимаю структуры каталогов в maildir. Просто /cur,/new и /tmp
> недостаточно? Или мой же конфиг ведет мимо?..
> 2) WTF, как это we're not in group 12(mail), если именно в
> ней "мы" и состоим?
> Заранее спасибо и извините за много буквИзвините, со вторым вопросом я разобрался (чуть выше написал, что дело в правах типа 600 на вышестоящую директорию; почему так не знаю, но работает).
А вот первый вопрос? Спасибо
>> А вот первый вопрос? Спасибо
>Я прочитал маны довекота по поводу этих ошибок, где написано, что довекот пытается создать в
>каждой папке еще кучу чего-то. Тут я задымился.
>1)Я явно не понимаю структуры каталогов в maildir. Просто /cur,/new и /tmp недостаточно?Да, недостаточно - он там создает как файлы различных индексов и хранилищ доп информации , так и каталоги вложенных папок, а также плагины могут создавать каталоги под свои цели (sieve/ например).
>>> А вот первый вопрос? Спасибо
>>Я прочитал маны довекота по поводу этих ошибок, где написано, что довекот пытается создать в
>>каждой папке еще кучу чего-то. Тут я задымился.
>>1)Я явно не понимаю структуры каталогов в maildir. Просто /cur,/new и /tmp недостаточно?
> Да, недостаточно - он там создает как файлы различных индексов и хранилищ
> доп информации , так и каталоги вложенных папок, а также плагины
> могут создавать каталоги под свои цели (sieve/ например).Спасибо!
еще один копипастер конфигов по разнобойным статьям...
отключенный но наконфигуряный lmtp в конфиге зачем? про mta и local delivery страшно спрашивать. namespaces это вообще страх и ужас...
> еще один копипастер конфигов по разнобойным статьям...
> отключенный но наконфигуряный lmtp в конфиге зачем? про mta и local delivery
> страшно спрашивать. namespaces это вообще страх и ужас...Да причем тут копипаст )) Я же написал - что-то не ловится логика у меня. Поэтому и спрашиваю коллективного разума. Дабы вразумиться, именно понять логику. Конфиг просто по умолчанию + я сконфигурил то, без чего работать не будет.
LMTP уберу, спасибо.
Про mta и local delivery можно не спрашивать.
А вот про namespaces я реально не понял. В чем суть этого явления?
Спасибо, если поможете.
>[оверквотинг удален]
>> страшно спрашивать. namespaces это вообще страх и ужас...
> Да причем тут копипаст )) Я же написал - что-то не ловится
> логика у меня. Поэтому и спрашиваю коллективного разума. Дабы вразумиться, именно
> понять логику. Конфиг просто по умолчанию + я сконфигурил то, без
> чего работать не будет.
> LMTP уберу, спасибо.
> Про mta и local delivery можно не спрашивать.
> А вот про namespaces я реально не понял. В чем суть этого
> явления?
> Спасибо, если поможете.ну для начала https://wiki.dovecot.org/Namespaces :-)
> ну для начала https://wiki.dovecot.org/Namespaces :-)Ну вот вроде я читаю, но.. )) Видно у меня нет задач, под которые это заточено, что ли. У меня почта используется несколькими десятками системных пользователей исключительно как личная. Общей почты нет.. Я так понимаю, это нужно для структурирования разных типов почты, нет? Да, туплю
>> ну для начала https://wiki.dovecot.org/Namespaces :-)
> Ну вот вроде я читаю, но.. )) Видно у меня нет задач,
> под которые это заточено, что ли. У меня почта используется несколькими
> десятками системных пользователей исключительно как личная. Общей почты нет.. Я так
> понимаю, это нужно для структурирования разных типов почты, нет? Да, туплюа к чему тогда в конфиге блок namespace inbox {}? наверное чтобы описать структуру вложенных imap каталогов, которые автоматически создаются для новых пользователей? а вот нахрена оно надо сразу проявится как только нарисуется первый imap клиент или web-морда.
>>> ну для начала https://wiki.dovecot.org/Namespaces :-)
>> Ну вот вроде я читаю, но.. )) Видно у меня нет задач,
>> под которые это заточено, что ли. У меня почта используется несколькими
>> десятками системных пользователей исключительно как личная. Общей почты нет.. Я так
>> понимаю, это нужно для структурирования разных типов почты, нет? Да, туплю
> а к чему тогда в конфиге блок namespace inbox {}? наверное чтобы
> описать структуру вложенных imap каталогов, которые автоматически создаются для новых
> пользователей? а вот нахрена оно надо сразу проявится как только нарисуется
> первый imap клиент или web-морда.Вот спасибо! ЧТо-то такое и надеялся услышать! ))
Все, всем спасибо, пошел править