我正在使用tacacs+使用pam_tacplus.so pam模块对linux用户进行身份验证,它可以正常工作。
我已经修改了pam_tacplus模块,以满足一些自定义需求。
我知道默认情况下,tacacs+没有任何方法支持linux组或对linux bash命令的访问级别控制,但是,我想知道是否有任何方法可以从tacacs+服务器端传递一些信息,让pam_tacplus.so模块允许/拒绝,或动态修改用户组[从pam模块本身)。
示例:如果我可以将priv lvl编号从服务器传递给客户机,并且可以在pam模块中用于一些决策。
ps:我更喜欢在服务器端不需要修改的方法[代码],所有修改都应该在linux端ie pam_tacplus模块完成。
谢谢你的帮助。
最佳答案
根据您打算如何实现这一点,pam可能不足以满足您的需求。来自tacacs+的权限级别不是“身份验证”步骤的一部分,而是“授权”步骤。如果您使用的是pam_tacplus,那么该授权将作为pam中“account”(也称为pam_acct_mgmt)步骤的一部分进行。然而,不幸的是,*nix系统并没有给您提供很多在这里进行细粒度控制的能力——您可能可以拒绝基于无效的“服务”、“协议”甚至诸如“主机”或“tty”之类的细节的访问,但可能不会超出这个范围。(priv_lvl是请求的一部分,而不是响应,pam_tacplus总是发送“0”。)
如果您想更改*nix系统上的权限,您可能希望在该环境功能内工作。我的建议是将分组作为一种生成“基于角色”的访问控制的方法。如果您希望这些在TACACS+服务器上存在,那么您将需要介绍有意义的自定义AVP,然后将这些与用户关联起来。
您可能需要一个nss(name service switch)模块来实现这一点——例如,当您到达pam时,openssh已经确定您的用户是“伪造的”,并将类似的伪造密码发送到服务器。使用nss模块,您可以根据tacacs+服务器上的avps为用户填充“passwd”记录。有关NSS的更多详细信息,请参阅glibc的“Name Service Switch”文档。