将 user_attrs 添加到 dovecot-ldap.conf 会触发“无法删除权限:用户缺少 UID(请参阅 mail_uid 设置)”

将 user_attrs 添加到 dovecot-ldap.conf 会触发“无法删除权限:用户缺少 UID(请参阅 mail_uid 设置)”

背景:

我在 Debian 10 上使用 Dovecot,并将 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.conf 来告诉 Dovecot 在哪个 LDAP 条目中属性为主目录:

user_attrs = homeDirectory=home

然而,当我这样做的时候,dovecot 就开始抱怨:

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).

但 dovecot UID 只是 Debian 10 的默认设置:我认为我不应该弄乱它。而且,无论如何,我并不想阅读鸽舍的邮件,我正在尝试阅读我自己的(亚历克西斯的),所以我真的认为这个错误信息具有误导性。

我尝试将一个不存在的用户的高数字 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 并在 dovecot-ldap.conf 中设置dndnpass没有什么区别,错误仍然存​​在:

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 驱动程序。

我在谷歌上搜索了很多次,发现了很多类似的问题(有解决方案),但没有一个符合我的情况(尽管这并没有阻止我尝试其中的一半)。

有人能给出建议吗?谢谢!

答案1

哎呀...将 user_attr 设置为某些值覆写默认值!(我不知不觉地认为它将指定的值附加到了默认值中。)

所以我只需要设置 user_attrs 来指定全部Dovecot 所需的属性:

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

然后它就起作用了。

相关内容