运行“su - username”时,pam_group 不会从 /etc/security/group.conf 添加其他组,但 sshd 登录会添加?

运行“su - username”时,pam_group 不会从 /etc/security/group.conf 添加其他组,但 sshd 登录会添加?

我无法确定为什么su行为不像 PAM 配置所暗示的那样。简而言之,使用su成为另一个用户应该根据 PAM 配置加载辅助组,但pam_group不会添加/etc/security/group.conf组,我们最终只会得到 LDAP 组。当通过 SSH 作为用户登录时,您拥有来自两个来源的组。

我们的设置与默认的 CentOS 6.5 相差不远,我们使用 SSSD 通过 Kerberos / LDAP 提供登录,但/etc/pam.d据我记得,没有对任何内容进行直接更改,更改是通过以下方式进行的:

authconfig --updateall --enablesssd --enablesssdauth --enablemkhomedir

当然有单独的/etc/pam.d/su/etc/pam.d/sshd,但它们都包含相同的文件pam_group.so(分别包含system-authpassword-auth,但这两个包含的文件是相同的)。

的相关部分/etc/pam.d/su

#%PAM-1.0
auth            sufficient      pam_rootok.so
auth            include         system-auth

的相关部分/etc/pam.d/sshd

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth

在包含的文件中:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        optional      pam_group.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_deny.so
...

通过 SSH 登录时, pam_group.so 行通过 添加组/etc/security/group.conf,将“apache”组(以及其他组)添加到登录的任何人:

*;*;*;Al0000-2400;apache,devs,rvm

su - username以 root(或sudo su - ...其他任何人)身份运行并成为另一个用户时,此 pam_group 似乎不会添加这些附加组。事实上,以 root 身份登录会为您提供这些组(因为 pam_group 完成了它的工作),运行su - username会导致您丢失这些组,因为su从零开始,仅添加从 PAM 获取的组(本质上是 LDAP 组,因为 pam_group 不是不工作)

在这里您可以看到,最初以 root 身份登录时,我有 apache (48)、devs (501) 和 rvm (504),但仅以su -root 身份运行时我会丢失除 root (0) 之外的所有内容。此外,使用用户“bob”登录,su - bob您可以看到我有很多来自 LDAP 的组(加上一个来自 /etc/group 的硬编码组,可以正常工作),但没有来自/etc/security/group.conf.

[root@dev-web pam.d]# id -G
0 48 501 504
[root@dev-web pam.d]# su -
[root@dev-web ~]# id -G
0
[root@dev-web ~]# logout
[root@dev-web pam.d]# su - bob
[bob@dev-web ~]$ id -G
1005001 10 1001000 1001001 1001002 1001003 1001004 1001005 1001008 1001009 1001010 1001011 1001012 1001017 1001018 1001025 1001027 1001028 1001033 1001034

最后,以 bob 身份进行 SSH 登录是什么样子的 - 我再次拥有 apache (48)、devs (501) 和 rvm (504)。

[bob@dev-web ~]$ id -G
1005001 10 48 501 504 1001000 1001001 1001002 1001003 1001004 1001005 1001008 1001009 1001010 1001011 1001012 1001017 1001018 1001025 1001027 1001028 1001033 1001034

人们可能会认为 SSH 登录与使用 SSH 登录的区别su - username在于,在 SSH 情况下,使用的各种模块都有可用的密码try_first_pass等,但由于我们经常使用 Kerberos 登录,因此这些模块没有密码。

如果有助于诊断这种差异,我将提供任何进一步的信息(在合理范围内)。提前致谢!

编辑:

我已经打开了 PAM 调试,并且pam_group似乎没有触发su- 即使我禁用,pam_rootok所以我必须登录(以确保它实际上尝试通过 pam 堆栈的其余部分)。无论它位于堆栈中的哪个位置,其他项目都会触发(一旦pam_rootok被禁用,因为它的“足够”状态似乎会使堆栈短路)。

我也只是想到测试一下sudo,似乎也有几乎相同的问题。 Root 可以sudo对其自身保留组,但sudo访问另一个用户只能获取 LDAP 组。/etc/pam.d/sudo仅包括使用/etc/pam.d/system-auth相同的堆栈su,因此这不足为奇。我想sudo如果目标用户与当前用户相同,则足够聪明,不会实际删除权限/切换用户,因此根保留组。

答案1

我假设你的问题是 su-pam 文件和pam_rootok模块。

#%PAM-1.0
auth            sufficient      pam_rootok.so
auth            include         system-auth

sufficient子句缩短了身份验证过程。因此 system-auth 永远不会被包含在内,这意味着 pam_group 模块永远不会为此会话激活。

然后,我读了你的编辑。不管怎样,这绝对是解决这个问题的一个开始。也许打开 pam_group 的调试来查看它是否返回记录的错误值之一 ( man pam_group)。

关于 sudo,实际上是有道理的验证用户通过PAM,所有帐户信息被丢弃/禁用。它有自己的将用户添加到组的机制。尝试添加preserve_groups相关 sudo 条目的选项。

所有这些让我想知道:为什么 pam 使组模块只与授权。事实上,它应该是帐户

答案2

仅在处理密码时才会查看 auth 行,因此当您是 root 时,或使用公钥的 ssh 时,都会忽略 auth 行。

我还没有找到一种方法来完成这项工作。

相关内容