我正在采用 samba / winbind / PAM 路由从我们的 Active Directory 域对我们的 Linux 服务器上的用户进行身份验证。
一切正常,但我想限制允许哪些 AD 组进行身份验证。Winbind / PAM 当前允许活动目录中任何已启用的用户帐户,而 pam_winbind.so 似乎不关注该参数。无论我在或文件require_membership_of=MYDOMAIN\\mygroup
中设置它都没关系。/etc/pam.d/system-auth
/etc/security/pam_winbind.conf
我如何强制 winbind 遵守该require_membership_of
设置?使用带有最新软件包的 CentOS 5.5。
更新:事实证明,由于 root 是 root,因此 PAM 始终允许 root 通过身份验证。因此,只要该帐户存在,root 就会通过身份验证。任何其他帐户都受身份验证限制。
更新 2: require_membership_of
似乎可以正常工作,除非请求用户具有 root uid。在这种情况下,无论设置如何,登录都会成功require_membership_of
。对于任何其他帐户,这都不是问题。如何配置 PAM 以强制require_membership_of
检查,即使当前用户是 root?
当前 PAM 配置如下:
auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
account sufficient pam_winbind.so
account sufficient pam_localuser.so
account required pam_unix.so broken_shadow
password ..... (excluded for brevity)
session required pam_winbind.so
session required pam_mkhomedir.so skel=/etc/skel umask=0077
session required pam_limits.so
session required pam_unix.so
require_memebership_of
当前已在文件中设置/etc/security/pam_winbind.conf
,并且正在运行(除了上面概述的根情况)。
答案1
免责声明:您可能不应该尝试require_membership_of
。是否存在无法登录的root
情况?如果出现问题(例如网络中断),您可能会面临无法修复此机器的风险,除非重新启动进入单一模式。root
无论如何我都会回答。
TL;DR:如果您想要强制本地用户(包括 root)拥有成员资格,请将第一个替换sufficient
为requisite
。
require_membership_of
pam_winbind.c
仅用于pam_sm_chauthtok
(参与管理组password
)和pam_sm_authenticate
(参与管理组auth
)。
因此,如果用户不具有您所需的会员资格,则失败的 PAM 步骤如下所示:
auth [...] pam_winbind.so [...]
你确实有一个,但它被标记为sufficient
:
auth sufficient pam_winbind.so
因此,如果失败,PAM 将继续通过其链。下一站:
auth sufficient pam_unix.so nullok try_first_pass
这个会成功,如果getent passwd root
返回一个有效的用户,getent shadow root
(运行为root
)返回一个有效的加密密码,并且用户输入的密码匹配。
我不会引导您完成其余的操作,但没有其他操作可以阻止root
登录。
我将向您介绍pam.d(5)
有关通用 PAM 配置机制pam_unix(8)
和各种模块的更多信息。
答案2
通过 SID 引用该组可能会更幸运。
查找组的 SID:
wbinfo -n "mygroup"
然后使用 SID(根据 wbinfo 确定)设置 require_membership_of
require_membership_of=S-1-5-21-1757981276-1399067357-839522115-75638
答案3
在我们的设置中,这受到文件 /etc/security/pam_lwidentity.conf 中的以下行的限制:
require_membership_of = OURDOMAIN\domain^admins
答案4
您可以使用 AD 服务器的全局目录端口吗?使用 LDAP 协议,可能在端口 3268 上(或加密 LDAP 的 3269 上)。
我发现使用 ldap auth 和 nsswitch 模块比 winbind 更容易、更快捷、更可靠,而且(如上面 Handyman5 所建议的)使用 pam_access 并编辑 /etc/security/access.conf 来控制谁被允许登录。