我使用TACACS+来使用pam_tacplus.so PAM模块对pam_tacplus.so用户进行身份验证,它的工作原理没有问题。
我已经修改了pam_tacplus模块以满足我的一些自定义需求。
我知道默认情况下,TACACS+没有任何方法支持linux组或对linux命令的访问级别控制,但是,我想知道是否可以从TACACS+服务器端传递一些信息,让pam_tacplus.so模块允许/拒绝,或者从pam模块本身动态修改用户组。
示例:如果我可以将priv-lvl号从服务器传递到客户端,并且可以用于PAM模块的某些决策。
PS:我更喜欢一种不涉及服务器端代码修改的方法,所有修改都应该在Linux端(即pam_tacplus模块)进行。
谢谢你的帮助。
发布于 2015-02-24 14:58:04
最后我让它起作用了。
问题1:
我面临的问题是,很少有文档可用于为非CISCO设备配置TACACS+服务器。
问题2:
我正在使用的tac_plus版本
tac_plus -v
tac_plus version F4.0.4.28似乎不支持
service = shell protocol = ssh 选项在tac_plus.conf文件中。
所以最终我用了
service = system {
default attribute = permit
priv-lvl = 15
}在客户端(pam_tacplus.so),
我在授权阶段发送了AVP service=system (Pam_acct_mgmt),这迫使服务返回在配置文件中定义的priv-lvl,用于设备用户的权限级别。
注意:在一些文档中,提到不再使用service=system。因此,此选项可能不适用于CISCO设备。
HTH
发布于 2015-02-24 08:36:23
根据您打算如何实现这一点,PAM可能不足以满足您的需求。来自TACACS+的特权级别不是‘身份验证’步骤的一部分,而是‘授权’步骤的一部分。如果您使用的是pam_tacplus,那么该授权将作为PAM中的“account”(也称为pam_acct_mgmt)步骤的一部分进行。然而,不幸的是,*nix系统无法在这里进行细粒度的控制--您可能能够基于无效的“服务”、“协议”,甚至是诸如“主机”或“tty”等细节拒绝访问,但可能不会超过这一点。(priv_lvl是请求的一部分,而不是响应,pam_tacplus总是发送‘0’)。
如果您想改变*nix系统上的特权,您可能希望在该环境功能中工作。我的建议是将分组作为一种产生一种基于角色的访问控制的手段。如果希望这些内容存在于TACACS+服务器上,则需要引入有意义的自定义AVP,然后将它们与用户关联起来。
您可能需要一个NSS (名称服务交换机)模块来完成这一任务--例如,当您到达PAM时,OpenSSH已经确定您的用户是“伪造”的,并向服务器发送一个类似的假密码。使用NSS模块,您可以根据来自TACACS+服务器的AVP为用户填充“passwd”记录。有关NSS的更多细节可以在glibc关于"名称服务交换机“的文档中找到。
https://stackoverflow.com/questions/28633496
复制相似问题