在我的组织中,我们在验证 sudo 时需要使用不同的 kerberos 主体,而不是其他类型的身份验证(例如登录)。例如,我的常规(登录)主体可能称为foobar@DOMAIN
,而我的 sudo 主体称为foobar/sudo@DOMAIN
。过去,我们通过在构建时设置--with-kerb5
和标志来构建我们自己的 sudo 来满足此要求。--enable-kerb5-instance=sudo
这意味着我们的 sudo 版本直接挂钩到 kerberos,根本不使用 PAM 堆栈。
我们试图看看是否可以在不构建和分发我们自己的 sudo 版本的情况下满足拆分主体的要求。我的问题是:这可能吗?如果可以,如何实现?
使用标准 RHEL 6/7 sudo 包,我无法使用--with-kerb5
构建时选项;我必须使用 PAM 作为我的身份验证堆栈。这意味着我必须使用pam_krb5
.通过pam_krb5
,我注意到我可以/etc/krb5.conf
使用appdefaults/pam/mappings
配置选项将用户名映射到主体名称。这让我完成了一半,因为它使我能够将用户名 映射foobar
到主体名称foobar/sudo
。但是,据我所知,无法为每个应用程序设置映射(kerberos 将 PAM 视为单个应用程序,无论哪个应用程序调用 PAM 堆栈),这意味着映射适用于pam_krb5
在其 PAM 配置中使用的任何应用程序。因此,我可以让系统对 sudo 和登录使用 sudo 主体,或者对两者都使用登录主体,但我无法让系统对 sudo 使用 sudo 主体,对登录使用登录主体。
有任何想法吗?或者我是否必须构建和分发自定义 sudo?
答案1
这不是一个完整的答案,但我想知道您是否可以使用 SSSD 来完成此任务。
该pam_sss
模块允许您将服务限制为仅考虑/etc/sssd/sssd.conf
.从pam_sss(8)
:
域
允许管理员限制允许特定 PAM 服务进行身份验证的域。该格式是逗号分隔的 SSSD 域名列表,如 sssd.conf 文件中指定的。
理论上,您可以有两个域都指向相同的上游身份验证环境,但使用不同的规则将用户映射到主体。
不幸的是,SSSD 似乎只支持用户名到主体名称的静态映射,这不能很好地扩展。
更新
看起来该pam_krb5
模块的最新版本也支持一个alt_auth_map
选项确切地你想要什么。也就是说,在 中/etc/pam.d/sudo
,我可以这样做:
auth required pam_krb5.so alt_auth_map=%s/sudo only_alt_auth
...现在sudo
将始终使用<username>/sudo
主体进行身份验证。
这个版本pam-krb5
是随 Ubuntu 一起发布的,但想必人们可以构建一个 rpm 并将其安装在您的系统上,而不需要太多麻烦。