Назад | Перейти на главную страницу

добавление user_attrs в триггеры dovecot-ldap.conf «не удалось сбросить привилегии: у пользователя отсутствует UID (см. настройку mail_uid)»

Задний план:

Я использую Dovecot в Debian 10 и переключаю серверную часть userdb / passdb с NIS на LDAP, главным образом потому, что хочу узнать о LDAP.

Для NIS это было в dovecot.conf:

userdb {
    driver = passwd
}
passdb {
    driver = pam
    args = dovecot
}

#  mail_uid and mail_gid are NOT set
#mail_uid = dovecot
#mail_gid = mail

и это (извлечение) в nsswitch.conf:

passwd: files nis
group:  files nis
shadow: files nis

Когда я переключился на LDAP, у меня есть это (отрывок) в dovecot.conf:

userdb {
    driver = ldap
    args = /etc/dovecot/dovecot-ldap.conf
}
passdb {
    driver = ldap
    args = /etc/dovecot/dovecot-ldap.conf
}

#  mail_uid and mail_gid are still NOT set
#mail_uid = dovecot
#mail_gid = mail

и это (и только это) в dovecot-ldap.conf:

base = ou=Users,dc=pasta,dc=net
uris = ldap://192.168.1.21/
auth_bind = yes
auth_bind_userdn = uid=%u,ou=Users,dc=pasta,dc=net

И NIS, и версия LDAP работают, что означает, что я могу запустить Mutt и прочитать свою (alexis) почту.

Однако я хочу, чтобы Dovecot искал другие атрибуты из LDAP, например почтовая квота или домашний каталог - но не зацикливайтесь на этих конкретных атрибутах: я пытаюсь узнать, как передавать атрибуты из LDAP в Dovecot, и я просто собираюсь использовать домашний каталог в качестве примера в конфигурации ниже.

Эта проблема:

Поэтому я сообщаю Dovecot, какие записи LDAP указывают домашний каталог, добавляя это в dovecot-ldap.conf:

user_attrs = homeDirectory=home

Однако, как только я это сделаю, голубятня начнет жаловаться:

dovecot: imap(alexis)<26179><hHrHde6XHLjAqAEQ>: Error: Couldn't 
    drop privileges: User is missing UID (see mail_uid setting)

Что пробовал:

Теперь я думаю, что текст mail_uid вводит в заблуждение: мне он не нужен с NIS, так зачем мне вдруг он нужен с LDAP?

И действительно, если я добавлю в dovecot.conf следующее:

mail_uid = dovecot
mail_gid = mail

тогда жалоба просто меняется на:

dovecot: imap(alexis): Error: Mail access for users with UID 111
    not permitted (see first_valid_uid in config file, uid 
    from mail_uid setting).

Но UID dovecot - это просто значение по умолчанию в Debian 10: я не думаю, что мне следует с этим связываться. И вообще я не пытаюсь читать голубятня mail, я пытаюсь прочитать свою (alexis), поэтому я действительно думаю, что это сообщение об ошибке вводит в заблуждение.

Я попытался просто поместить высокий числовой UID несуществующего пользователя в mail_uid, с предсказуемыми результатами:

dovecot: imap(alexis)<28748><7lb3y+6XmLjAqAEQ>: Error: 
    stat(/var/mail/maildir/alexis/tmp) failed: Permission denied 
    (euid=5000(<unknown>) egid=5000(<unknown>) missing +x perm: 
    /var/mail/maildir/alexis, dir owned by 1000:1000 mode=0700)

Я мог бы изменить владельца всего в / var / mail по своему усмотрению, но это действительно кажется неправильным поступком.

Итак, я закомментировал mail_uid и mail_gid очередной раз.

Мне было интересно, подумал ли Dovecot, что необходимо переключиться с анонимного доступа LDAP (для получения атрибутов пользователя, а не для чтения почты) на аутентифицированный доступ LDAP, но добавив пользователя dovecot в LDAP и установив dn и dnpass в dovecot-ldap.conf ничего не изменилось, ошибка осталась:

dovecot: imap(alexis)<26179><hHrHde6XHLjAqAEQ>: Error: Couldn't 
    drop privileges: User is missing UID (see mail_uid setting)

Но он должен иметь возможность читать атрибуты без аутентификации:

ziti# ldapsearch -Y EXTERNAL -H ldapi:/// -W -b 'cn=config' -LLL "(objectClass=olcDatabaseConfig)"
...
dn: olcDatabase={1}mdb,cn=config
...
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
...
ziti#

я видел Не удалось сбросить привилегии: у пользователя отсутствует UID (см. Настройку mail_uid) но я очень хочу учиться что здесь происходит и Зачем он не работает, а не переключается на другой драйвер userdb / passdb.

Я много гуглил и нашел много похожих проблем (с решениями), но ни одна из них не соответствовала моей ситуации (хотя это не помешало мне попробовать половину из них).

Кто-нибудь может посоветовать, пожалуйста? Спасибо!

Дох ... Установка user_attr на что-то перезаписывает по умолчанию! (Я неосознанно предположил, что он добавил указанные значения к значениям по умолчанию.)

Поэтому мне просто нужно было установить user_attrs, чтобы указать расположение все атрибуты, необходимые Dovecot:

user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid

Тогда это сработало.