在Winbind / Kerberos Linux AD集成中将su限制为域用户

我们已经有一些RHEL 5服务器使用Winbind / Kerberosjoin到AD中,整体运行良好。

我已经在PAM中指定了一个AD安全组来限制哪些域用户可以login。

 auth requisite pam_succeed_if.so用户ingroup ad_groupdebugging

我还在sudoers中指定了相同的组,以便他们能够获得root权限。

 %ad_group ALL =(ALL)ALL

这些按预期工作。

但是,我注意到,“su – ”将允许我成为不属于安全组的域用户。

假设jdoe不在“ad_group”中:

 [kernelpanic @ server01〜] $ sudo su  -  jdoe
 [sudo]用户密码:
创build目录'/ home / jdoe'。
创build目录'/home/jdoe/.mozilla'。
创build目录'/home/jdoe/.mozilla/plugins'。
创build目录“/home/jdoe/.mozilla/extensions”。
 [jdoe @ server01〜] $

这里是/ var / log / secure输出:

 10月25日09:42:42 server01 su:pam_unix(su-l:session):通过kernelpanic(uid = 0)为用户jdoe打开的会话
 10月25日09:43:53 server01 su:pam_unix(su-l:session):closures用户jdoe的会话

有没有办法将用户从“su – ”限制到不允许首先login框的域用户?

我相信/etc/pam.d/su的第一行看起来像这样:

 auth sufficient pam_rootok.so 

换句话说,当你试图授权你成为jdoe时,一切都看起来没问题。

你可以做的是把你的pam_succeed_if行添加到/etc/pam.d/su ,或者更好的办法是在/etc/pam.d/system-auth添加一个条目,但是修改它使得auth变成如下所示的session

 session requisite pam_succeed_if.so user ingroup ad_group debug 

即使在你描述的情况下,这也会被触发,并且不会让非ad_group的用户打开一个shell。 这也会产生限制root打开shell的不良副作用(正如注释中所指出的那样),所以您可能只需要将它应用于正确范围的用户id:

 session [default=1 success=ignore] pam_succeed_if.so quiet uid >= 1000 session requisite pam_succeed_if.so user ingroup ad_group debug 

顺便说一句,如果您使用公钥进行身份validation, ssh也可能绕过PAM,因此使用session而不是auth更好。