使用 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
我正在使用 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