AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1119191
Accepted
William Seligman
William Seligman
Asked: 2023-01-01 10:23:40 +0800 CST2023-01-01 10:23:40 +0800 CST 2023-01-01 10:23:40 +0800 CST

sendmail 和基于 LDAP 的别名

  • 772

环境:CentOS 7.9、Sendmail 8.14、OpenLDAP 2.4

我试图让 sendmail 从 LDAP 数据库中读取它的别名(这已经与 NIS 一起工作多年,但 NIS 正在逐渐消失)。我的邮件服务器是一个 LDAP 客户端。在mailserver:/etc/mail/sendmail.mc:

define(confLDAP_DEFAULT_SPEC, `-H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org" -d "uid=sendmail,dc=myoffice,dc=mycompany,dc=org" -M simple -P /etc/mail/secret')dnl
define(`ALIAS_FILE',`ldap:-k (&(objectClass=nisMailAlias)(cn=%0)) -v "rfc822MailMember",/etc/aliases')dnl

推导出第一行是痛苦的,因为我的 web-fu 很差,因为我在 LDAP 的 sendmail K 宏上搜索文档。这个页面是我能找到的最好的页面,它似乎适用于旧版本的 sendmail。

当我在邮件服务器上重新启动 sendmail 并尝试使用别名数据库时,响应是:

# sendmail -bv sysadmin
ldap_init/ldap_bind failed to ldaps://ldap.myoffice.mycompany.org in map Alias0: Protocol error
sysadmin... deliverable: mailer local, user sysadmin

请注意,当我恢复到 NIS 版本时,别名解析;这是我期待的输出:

# sendmail -bv sysadmin
myname... deliverable: mailer local, user myname

在mailserver:/etc/openldap/ldap.conf:

BASE    dc=myoffice,dc=mycompany,dc=org
URI     ldaps://ldap.myoffice.mycompany.org ldaps://ldap-replica-1.myoffice.mycompany.org ldaps://ldap-replica-2.myoffice.mycompany.org

SIZELIMIT       unlimited

TLS_CACERT /etc/mail/certs/certs-latest/__myoffice_mycompany_org.cer
TLS_CACERTDIR /etc/mail/certs/certs/certs-latest

__myoffice_mycompany_org.cer是 PEM 格式,包含我的站点的证书链和通配符证书,*.myoffice.mycompany.org.

对于 sendmail 之外的身份验证和搜索,通过邮件服务器的 LDAP 客户端配置进行的 LDAP 搜索似乎工作正常。这是我的测试,所有测试都产生了我期望的结果:

# Authentication-type searches
ldapsearch -LLL -x -H ldaps://ldap.myoffice.mycompany.org "(uid=myname)"
ldapsearch -LLL -x uid=myname -b dc=myoffice,dc=mycompany,dc=org
ldapsearch -LLL -x uid=myname

# Mail-aliase-type searches
ldapsearch -x -h ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org" "cn=sysadmin"
ldapsearch -x -H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org" "cn=sysadmin"
ldapsearch -H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org" "(cn=sysadmin)" -D "uid=sendmail,dc=myoffice,dc=mycompany,dc=org" -y /etc/mail/secret

最后三个命令的输出是相同的,并且表明我根据以下内容在 LDAP 服务器上设置了别名misc.schema:

# extended LDIF
#
# LDAPv3
# base <ou=Aliases,dc=myoffice,dc=mycompany,dc=org> with scope subtree
# filter: cn=sysadmin
# requesting: ALL
#

# sysadmin, Aliases, myoffice.mycompany.org
dn: cn=sysadmin,ou=Aliases,dc=myoffice,dc=mycompany,dc=org
cn: sysadmin
objectClass: nisMailAlias
objectClass: top
rfc822MailMember: myname

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

请注意,对于ldapsearch上面的最后一项,为了尝试调试正在发生的事情,我uid=sendmail,dc=myoffice,dc=mycompany,dc=org在我的 LDAP 服务器上创建了一个单独的用户,明文密码在/etc/mail/secret.

在sendmail.mc中,我也尝试过:

define(confLDAP_DEFAULT_SPEC, `-h ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org"')dnl
define(confLDAP_DEFAULT_SPEC, `-H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org"')dnl

但结果是一样的。

只是为了确认该帐户myname存在(尽管我怀疑这是问题所在):

# ldapsearch -LLL -x uid=myname -b dc=myoffice,dc=mycompany,dc=org
dn: uid=myname,ou=People,dc=myoffice,dc=mycompany,dc=org
uid: myname
cn: Bill Myname
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 17316
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 11230
gidNumber: 10130
homeDirectory: /myoffice/desktop/home/myname
gecos: Bill Myname,Room 321,x2280

我错过了什么?或者换句话说,sendmail 中的 LDAP 查找与 CentOS 其余部分中的 LDAP 查找有何不同?

编辑:

我发现一个网页表明问题可能是 CentOS 7 上的 sendmail 可能使用其 NSS 存储中的证书,而不仅仅是CERT_DIR目录中的文本文件。我按照该页面上建议的说明进行操作:

cd /etc/openldap/certs
certutil -A -d . -n "Myoffice 2022" -a -i /etc/mail/certs/certs-latest/__myoffice_mycompany_org.cer -t "CT,c,"

但这并没有改变 sendmail 的 LDAP+aliases 行为。

ldap
  • 1 1 个回答
  • 39 Views

1 个回答

  • Voted
  1. Best Answer
    William Seligman
    2023-01-03T18:53:34+08:002023-01-03T18:53:34+08:00

    感谢larsks的建议,我有了答案。原来olcLogLevel在我的 LDAP 服务器上已经设置为 -1。我在日志中寻找,我认为我以前做过,但显然不够仔细。我找到了消息:

    send_ldap_result: err=2 matched="" text="historical protocol version requested, use LDAPv3 instead"
    

    事实证明,sendmail 8.14 默认使用 LDAPv2 协议,该协议在多年前已被 LDAPv3 淘汰。网络搜索向我展示了在我的 LDAP 服务器上添加选项以接受 v2 连接的过程:

    在allow_bind_v2.ldif:

    dn: cn=config
    add: olcAllows
    olcAllows: bind_v2
    

    然后我发出命令

    # ldapmodify -H ldapi:// -Y EXTERNAL -f allow_bind_v2.ldif
    

    回到我的邮件服务器,我发现一个简单的配置就足够了sendmail.mc:

    define(confLDAP_DEFAULT_SPEC, `-H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org"')dnl
    

    重启sendmail后,得到了我预期的结果:

    # sendmail -bv sysadmin
    myname... deliverable: mailer local, user myname
    

    虽然这行得通,但对我来说似乎难以置信,这么多年过去了,即使是相对较旧的 sendmail 版本也无法支持 LDAPv3。现在我知道要寻找什么,我找到了这个页面,它解释了如何让 sendmail 使用 LDAPv3:添加-w 3到 confLDAP_DEFAULT_SPEC:

    define(confLDAP_DEFAULT_SPEC, `-H ldaps://ldap.myoffice.mycompany.org -b "ou=Aliases,dc=myoffice,dc=mycompany,dc=org" -w 3')dnl
    

    这样,我就可以在我的 LDAP 服务器上关闭 bind_v2:

    在remove_bind_v2.ldif:

    dn: cn=config
    delete: olcAllows
    
    ldapmodify -H ldapi:// -Y EXTERNAL -f remove_bind_v2.ldif
    

    Sendmail 别名解析仍然工作得很好。

    虽然我承认整个情况+解决方案倾向于证实 larsks 关于 sendmail 的论点,但我现在已经找到了一些有用的东西。是时候继续下一个问题了。

    • 0

相关问题

  • Cygwin sshd 和 LDAP 身份验证

  • 从 OpenLDAP 检索操作属性

  • 为 Mac 网络使用 Linux 和 Open LDAP

  • 使用LDAP服务器身份验证的Linux中单个用户的多个登录名

  • 使用 smbldap 管理用户/组的 Web 前端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve