Dovecot配置LDAP认证

本章介绍如何为Dovecot配置LDAP认证。Dovecot配置龙LDAP认证后,还可通过SASL为Postfix提供认证。

环境确认

首先需要确认LDAP服务可用,且用户可登录:

$ ldapwhoami -H ldap://localhost/ -D cn=user@example.com,dc=example,dc=com -W
Enter LDAP Password: 
dn:cn=user,dc=example,dc=com

并安装了Dovecot:

# apt install dovecot-core dovecot-ldap dovecot-imapd dovecot-lmtpd

配置Dovecot

打开/etc/dovecot,可以看到配置目录结构:

$ ll /etc/dovecot
total 48
drwxr-xr-x  4 root root    4096 Sep  3 09:45 ./
drwxr-xr-x 70 root root    4096 Sep  1 15:58 ../
drwxr-xr-x  2 root root    4096 Sep  3 09:46 conf.d/
-rw-r--r--  1 root root    4343 Jan 11  2023 dovecot.conf
-rw-r-----  1 root dovecot 1507 Aug  6  2021 dovecot-dict-auth.conf.ext
-rw-r-----  1 root dovecot  522 Aug  6  2021 dovecot-dict-sql.conf.ext
-rw-r-----  1 root dovecot 5898 Sep  3 09:45 dovecot-ldap.conf.ext
drwx------  2 root root    4096 Sep  1 14:32 private/

打开dovecot.conf,可以看到其中配置文件主要集中在conf.d

第一步,编辑/etc/dovecot/conf.d/10-auth.conf

# 使用完整的用户名来认证(完整的 用户名@域名 格式)
auth_username_format = %Lu

# 取消注释ldap配置,其他的认证方式按需使用
!include auth-ldap.conf.ext

第二步,编辑/etc/dovecot/auth-ldap.conf.ext

# hosts 和 uri二选一配置
uris = ldap://localhost/

# 使用bind方式来进行LDAP认证
auth_bind = yes

# 设置bind方式认证的用户
auth_bind_userdn = cn=%Lu,dc=example,dc=com

# 配置下查询base(可选,但不配置好像会报错)
base = dc=example,dc=com

# (可选)最好限制下查询范围scope
scope = subtree

# 这两句按照官方的来
pass_attrs = uid=user, userPassword=password
pass_filter = (&(objectClass=inetOrgPerson)(cn=%Lu))

# 如果LDAP使用加密方式存储密码,建议配置下
default_pass_scheme = SSHA256

第三步(可选),为了提高查询性能,链接一份auth-ldap.conf.ext,并使用

# ln -s /etc/dovecot/auth-ldap.conf.ext /etc/dovecot/auth-ldap-userdb.conf.ext
# vi /etc/dovecot/conf.d/auth-ldap.conf.ext
userdb {
  driver = ldap
args修改为:
  args = /etc/dovecot/dovecot-ldap-userdb.conf.ext

验证

验证LDAP帐号是否可用:

$ ldapwhoami -H ldap://localhost/ -D cn=user@example.com,dc=example,dc=com -W
Enter LDAP Password: 
dn:cn=user,dc=example,dc=com

验证Dovecot能否使用LDAP认证:

$ sudo -u dovecot doveadm auth test -x "service=imap" user@example.com
Password: 
passdb: user@example.com auth succeeded
extra fields:
  user=user@example.com

也可以:

$ sudo -u dovecot doveadm auth test user@example.com
Password: 
passdb: user@example.com auth succeeded
extra fields:
  user=user@example.com

发表评论