使用 pam_access 检查帐户是否被允许

使用 pam_access 检查帐户是否被允许

我正在使用 pam_access 和 /etc/security/access.conf 来限制谁可以登录我的 Rhel 6.5 主机。

我有一个拥有多样化用户群的 LDAP 服务器,安全人员想要一份谁可以登录到哪个服务器的列表。

我需要一种可编写的方法来检查某个帐户是否能够登录到主机。getent passwd、id、finger、groups 以及我尝试过的所有其他工具都会返回相同的输出,以判断某个帐户是否被限制登录。passwd -S 似乎根本不适用于 LDAP 帐户。

有没有办法检查给定帐户是否具有登录权限?在 Solaris 上,如果用户或网络组不在 /etc/passwd 中,则任何工具都无法识别受限帐户,但在 Linux 上似乎完全相反。

谢谢!

编辑:这是 /etc/pam.d/system-auth 的帐户部分: account required pam_access.so account required pam_unix.so broken_shadow account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_krb5.so account required pam_permit.so

我的 puppet 配置仅执行以下操作,这可能会更改 pam 设置。 /usr/sbin/authconfig --enablemkhomedir --updateall /usr/sbin/authconfig --enablekrb5 --updateall /usr/sbin/authconfig --enablepamaccess --updateall /usr/sbin/authconfig --enablesssd --updateall /usr/sbin/authconfig --nisdomain=domainname.corp --updateall 我的 /etc/security/access.conf + : root : ALL .... all system accounts + : @ngunix_admins : ALL - : ALL : ALL 我的网络组 getent netgroup ngunix_admins ngunix_admins ( ,danw,domainname.corp) 我在 ngunix_admins 网络组中,因此这是有意义的, % id danw uid=355400001(danw) gid=355400001(danw) groups=355400001(danw) % getent passwd danw danw:*:355400001:355400001:unixadmin:/home/danw:/bin/bash 但是这个其他用户不在 ngunix_admins 网络组中,所以我需要某种方式来识别他无法登录 id testuser uid=355400003(testuser) gid=355400003(testuser) groups=355400003(testuser) getent passwd testuser testuser:*:355400003:355400003:first last:/home/testuser:/bin/bash 第二次编辑:澄清我不是调整登录权限,而是尝试报告访问权限以供审核。

答案1

我最近必须执行非常类似的 PCI 审计(谁可以登录这些系统以及他们的权限是什么),因此请充分了解您要在此完成的任务。根据 PAM 和 LDAP 的配置方式,方法因环境而异。

以下因素似乎适用于您的环境:

  • 枚举passwd数据库(getent passwd)包含绝不应允许访问系统的用户。
  • shadow必须考虑限制。有时,无论如何。您已broken_shadow启用。
  • 必须考虑 PAM 限制。(包括pam_access限制,这大大降低了找到一个无需实际执行调用即可完成此操作的一体化工具的可能性pam_acct_mgmt
  • 对于拥有账户的用户,必须考虑 KRB5 限制。

如果没有测试 PAM 堆栈的实用程序,我会将此任务的复杂性评为“高且耗时”。pamtester看起来它可以完成这项工作。您需要循环遍历每个用户getent passwd并执行身份验证后记帐检查:

pamtester sshd $user acct_mgmt

这假设您只需要通过 测试访问ssh。如果您需要测试更多内容,请这样做。检查/etc/pam.d您已配置的服务并审核所有必要内容。

(我对最初的回答表示抱歉,我上次的努力更多地集中在 sudo 审计而不是 PAM 审计上,而且我太过于“手动完成所有事情”的思维模式了。)

相关内容