使用 pam_tacplus Linux authentication/authorization 的 tacacs+

tacacs+ for Linux authentication/authorization using pam_tacplus

我正在使用 TACACS+ 对使用 pam_tacplus.so PAM 模块的 Linux 用户进行身份验证,它可以正常工作。

我修改了 pam_tacplus 模块以满足我的一些自定义要求。

我知道默认情况下,TACACS+ 没有任何方法来支持 linux 组或对 linux bash 命令的访问级别控制,但是,我想知道有什么办法可以从 TACACS+ 服务器端传递一些信息,让 pam_tacplus.so 模块可以用于 allow/deny ,或者动态修改用户组 [从 pam 模块本身]。

示例:如果我可以将 priv-lvl 编号从服务器传递到客户端并且可以用于 PAM 模块的某些决策。

PS:我更喜欢一种在服务器端不涉及修改的方法[代码],所有修改都应该在Linux端完成,即pam_tacplus模块。

感谢您的帮助。

根据您打算如何实现,PAM 可能不足以满足您的需求。来自 TACACS+ 的权限级别不是 'authentication' 步骤的一部分,而是 'authorization' 步骤的一部分。如果您使用 pam_tacplus,那么该授权将作为 PAM 中 'account'(又名 pam_acct_mgmt)步骤的一部分进行。然而不幸的是,*nix 系统并没有给你很多能力在这里做细粒度的控制——你可能能够拒绝基于无效 'service'、'protocol' 甚至细节的访问如 'host' 或 'tty',但可能仅此而已。 (priv_lvl 是请求的一部分,不是响应,并且 pam_tacplus 总是 发送“0”。)

如果您想在 *nix 系统上改变权限,您可能希望在该环境的能力范围内工作。我的建议是将分组作为一种产生某种 'role-based' 访问控制的方法。如果您希望这些存在于 TACACS+ 服务器上,那么您需要引入有意义的自定义 AVP,然后将它们与用户相关联。

您可能需要一个 NSS(名称服务切换)模块来完成此操作——例如,当您访问 PAM 时,OpenSSH 已经确定您的用户是 "bogus" 并且向服务器发送类似的伪造密码。使用 NSS 模块,您可以根据来自 TACACS+ 服务器的 AVP 为您的用户填充 'passwd' 记录。有关 NSS 的更多详细信息,请参阅 glibc 的“Name Service Switch”文档。

最终我成功了。

问题 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),它强制服务到配置文件中定义的 return priv-lvl,我用它来设置权限级别用户。

注意:在一些文档中提到不再使用 service=system 。因此此选项可能不适用于 CISCO 设备。

HTH