проблемы с разрешениями dotlock с dovecot и OS X 10.10.3 ++

636
Haru

Я установил dovecotна OS X Yosemiteчерез Homebrew. Но по какой-то причине я не могу заставить его работать должным образом, начиная с 10.10.3обновления системы Apple. Существует некоторая неразрешимая проблема с разрешениями, когда дело доходит до создания файлов с точками блокировки, когда dovecot хочет получить доступ к INBOX. Интересно, что у postfix нет проблем с созданием файлов с точками в той же директории.

$ dovecot --version 2.2.18 

Настройка пути по умолчанию в OS X, также официально поддерживается / документируется в вики dovecot. Я бы хотел оставить это так, поскольку системные обновления обычно меняют права доступа здесь в любом случае:

$ ls -lae /var/ ... drwxrwxr-x 3 root mail 102 Aug 14 18:52 mail ...  $ ls -lae /var/mail ... -rw------- 1 haru mail 542 Aug 14 18:53 haru ... 

Это была моя первоначальная настройка до OS X 10.10.2. Я удалил кучу ненужных опций из вывода:

$ cat /usr/local/etc/dovecot/local.conf protocols = pop3 listen = localhost # Note: user _dovecot is member of the 'mail' group. default_internal_user = _dovecot default_login_user = _dovenull mail_location = mbox:~/.mail:INBOX=/var/mail/%u mail_privileged_group = mail 

Все работало нормально, пока не OS X 10.10.3пришло обновление, и внезапно dovecot[PID]: pop3(haru): Error: setegid(privileged) failed: Operation not permittedошибки были сброшены при получении почты. Он все еще мог получать почту, но не мог удалить их из INBOX, поэтому при каждой загрузке одни и те же письма приходили снова и снова.

После долгих исследований и случайных попыток я добавил mail_access_groups = mailв конфигурацию dovecot. Я действительно не понимаю, что именно делает этот вариант.

$ cat /usr/local/etc/dovecot/local.conf  protocols = pop3 listen = localhost # Note: user _dovecot is member of the 'mail' group. default_internal_user = _dovecot default_login_user = _dovenull mail_location = mbox:~/.mail:INBOX=/var/mail/%u mail_privileged_group = mail mail_access_groups = mail 

Все снова работало нормально, пока не OS X 10.10.5появилось обновление вчера, и вдруг весь ад сломался, и он потерпел полный крах dovecot[PID]: pop3(haru): Fatal: setgroups(mail,) failed: Too many extra groups. Удаление mail_access_groups = mailисправило эту ошибку, но вернуло ранее описанные ошибки, которые начинались с 10.10.3. В конце концов мне пришлось отключить блокировку dotfile, удалив dotlockзапись по умолчанию из mbox_write_locksопции:

$ cat /usr/local/etc/dovecot/local.conf  protocols = pop3 listen = localhost # Note: user _dovecot is member of the 'mail' group. default_internal_user = _dovecot default_login_user = _dovenull mail_location = mbox:~/.mail:INBOX=/var/mail/%u mail_privileged_group = mail mbox_read_locks = fcntl mbox_write_locks = fcntl 

Я что-то здесь скучаю или не понимаю? Почему настройка разрешений по умолчанию (как описано в документации dovecot) не работает? Возможно, это даже какая-то несовместимость, начинающая появляться с OS X 10.10.3, или какая-то ошибка в dovecot?

1

1 ответ на вопрос

0
Heiko Rupp

Ошибка с setgroups()происходит из-за того, что пользователю на машине, на которой работает Dovecot, назначено более 16 групп.

Запустите id -G <user>или id <user>от имени пользователя root (или от имени этого пользователя), чтобы увидеть количество групп.

К сожалению, macOS назначает кучу групп пользователям для запуска детального контроля доступа для таких вещей, как совместное использование экрана. К счастью, у Dovecot есть возможность установить диапазоны «допустимых» показателей. Таким образом, вы можете установить

last_valid_gid = 100 

Номер может отличаться для вас.

Я только столкнулся с этим и написал об этом здесь: http://pilhuhn.blogspot.com/2018/10/solution-for-dovecot-and-setgroups.html