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 / 问题 / 1166586
Accepted
user4540359
user4540359
Asked: 2024-10-15 05:00:57 +0800 CST2024-10-15 05:00:57 +0800 CST 2024-10-15 05:00:57 +0800 CST

使用 Postfix/Dovecot 支持用户和服务电子邮件的正确方法

  • 772

我正在尝试了解通过 Postfix/Dovecot 支持网络认证用户和各种网络服务(如 Gitlab)发送电子邮件的正确方法。

我的网络身份验证服务器是 Ubuntu 22.04,使用 OpenLDAP 和 Kerberos。我的网络身份验证用户都从posixAccount和PostfixBookMailAccount对象类继承,而我的服务帐户仅从后者继承。这是一种尝试,只允许我的用户登录各种机器,但不允许服务帐户登录,但支持两者的电子邮件。

我尝试配置 Dovecot 以使用pam适用于用户电子邮件的驱动程序,但 Gitlab 不起作用。我修改了 PAM 配置(所有配置都使用 Kerberos 但不使用 LDAP),在 Kerberos 之前添加了 LDAP。这包括将 PAM LDAP 配置为基于用户查找mailEnabled而不是posixAccount用户查找进行搜索,但可能有些问题,因为它仍然适用于用户但不适用于服务。

我也尝试配置 Dovecot 以使用ldap驱动程序并进行类似的搜索mailEnabled,但也出现问题,因为它不适用于任何帐户。

看来我可能会屈服并为 Gitlab 之类的服务创建用户帐户,但这会激起我的安全恐惧。

在继续研究或走错方向之前,我首先想了解区分这两个电子邮件来源是否有意义,或者我是否只是在过度思考。如果我需要区分,有人可以给我指出概述这种方法的参考资料,或者在配置 Postfix/Dovecot 时是否有/需要考虑哪些方面提供一些提示吗?到目前为止,我还没有找到适合这两种帐户类型的组合。我的网络搜索没有找到任何关于采取什么方法的信息,因此也没有找到任何相关材料。

我的10-auth.conf包含:

auth_krb5_keytab = /etc/dovecot/dovecot.keytab
auth_mechanisms = plain login gssapi

其中 keytab 填充了imap、nslcd和smtp主体。

当配置为 PAM 时,我的auth-network.conf.ext外观如下:

passdb {
  driver = pam
}
userdb {
  driver = passwd
  args = uid=vmail gid=vmail home=/srv/vmail/%u mail=maildir:/srv/vmail/%u/Maildir
}

当配置为 LDAP 时,它是:

passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
userdb {
  driver = prefetch
}
userdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
email
  • 2 2 个回答
  • 86 Views

2 个回答

  • Voted
  1. u1686_grawity
    2024-10-16T00:56:30+08:002024-10-16T00:56:30+08:00

    看来我可能会屈服并为 Gitlab 之类的服务创建用户帐户,但这会激起我的安全恐惧。

    这是标准做法。相关概念是,帐户的存在或作为帐户进行身份验证的能力不应与该帐户访问服务的授权挂钩- 例如,这就是为什么 PAM 对所有事物都有单独的auth(身份验证)和account(授权)堆栈。

    • 身份验证:确定客户是谁
    • 授权:确定客户端可以做什么

    因此,您可以进行基于 Kerberos 的身份验证(绕过 PAM 的 GSSAPI 或通过 PAM 的密码),同时仍让服务通过从其 PAMaccount堆栈调用 pam_ldap.so 来验证授权。标准方法是使用 LDAPauthorizedService属性,该属性与 LDAP 服务名称 1:1 对应(但您可以使用非基于 PAM 的系统的自定义值来扩展它)。

    这样,您的“服务”帐户就可以被授权仅访问特定服务(例如 SMTP),但尽管是 posixAccount,仍然无法使用 SSH/Telnet/cron/sudo,因为它们没有允许authorizedService: sshdSSH 登录的权限。

    或者,您可以使用pam_succeed_if来要求特定 POSIX 组的成员资格(例如,如果您的常规用户是“用户”的成员,但服务帐户不是),以实现相同的目标,即防止服务帐户通过 SSH 等登录。


    与 AD 相比,它实际上没有“完整”帐户和“仅 LDAP”帐户之间的区别,因此任何需要 LDAP 读取权限的服务只会获得一个“完整”用户帐户(它是唯一存在的类型)并且所有形式的访问都通过 ACL 进行控制,而不是通过帐户的存在进行控制。

    • 0
  2. Best Answer
    user4540359
    2024-11-06T04:19:12+08:002024-11-06T04:19:12+08:00

    不确定这种方法是否完整,但至少它适用于电子邮件。我的经过网络身份验证的用户现在都具有authorizedService以下服务的属性:

    • 自动文件系统
    • gdm 密码
    • sshd
    • 苏
    • systemd 用户

    而我的服务用户却没有。我的每台客户端机器和邮件服务器本身gitlab的相关部分包含:/etc/sssd/sssd.conf

    [domain/EXAMPLE.COM]
    auth_provider = krb5
    krb5_server = sso.example.com
    krb5_realm = EXAMPLE.COM
    access_provider = ldap
    chpass_provider = krb5
    id_provider = ldap
    ldap_id_use_start_tls = true
    ldap_uri = ldap://sso.example.com
    ldap_schema = rfc2307
    ldap_search_base = dc=example,dc=com
    ldap_default_bind_dn = ...
    ldap_default_authtok = ...
    ldap_access_order = authorized_service
    ldap_user_authorized_service = authorizedService
    ldap_access_filter = authorizedService
    

    example.com/EXAMPLE.COM你的域名在哪里;)

    我认为如果不添加授权服务属性,su我就无法切换到其他用户,例如:

    su someone
    

    没有它gdm-password我就无法从锁定屏幕登录。

    我没有找到太多关于使用此属性的信息,如果这是标准方法,我会感到有点惊讶。此链接https://freeradius-users.freeradius.narkive.com/IW953CLH/ldap-authorizedservice-attribute-matching#post2提供了我应该授权哪些服务的提示,并且还建议了如果您有任何其他显示管理器,还需要哪些其他服务。

    • 0

相关问题

  • 如何绕过 ISP 的限制性电子邮件政策?

  • SharePoint 传入电子邮件出现“未知别名”错误

  • 电子邮件帐户的角色名称与人名

  • 如何在笔记本电脑上使用 Tobit David?[关闭]

  • 随行人员通过 VPN 连接到 Exchange 2007

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