最近我正在使用RBAC工具Open Policy Agent(OPA(。OPA网站上有一个链接,可以利用OPA对SSH和Sudo进行安全控制。为了使它发挥作用,我们必须将它与linuxPAM模块一起使用。
请找到以下链接:
https://www.openpolicyagent.org/docs/v0.12.2/ssh-and-sudo-authorization/
在这里,他们提供了使用docker图像的示例。PAM和OPA集成部分不清楚。我的需求是在没有docker映像的Linux系统中使用PAM来利用OPA功能。
我在谷歌上搜索了一下,但没有得到任何有用的文章。所以,如果有人能给我提供一些例子或参考链接,或者为我指明正确的方向,这将是非常有帮助的。提前感谢!
您可以下载并运行OPA作为一个独立的可执行文件,而不需要Docker。请参阅OPA官方页面的下载页面。
然后,您可以按照文档中的说明在系统上运行OPA:
opa run --server --set=decision_logs.console=true
默认情况下,OPA服务器将在localhost:8181上运行-有关更多选项,请参阅opa run --help
。
我在我工作的公司实现了这一点,并对其工作原理进行了高级别的概述=>https://www.youtube.com/watch?v=6vUw6f7KlqI
视频提供了更多的概述,而不是关于如何配置PAM的详细信息。然而,我很乐意回答关于我们如何设置PAM配置的任何后续问题,但基本上,我们让OPA作为systemd服务在linux主机上运行,并向/etc/pam.d/sshd
=>添加了pam_exec
调用;
auth sufficient pam_exec.so quiet /some/path/pam_opa_entrypoint.sh ssh
pam_opa_entrypoint.sh或多或少看起来像:
#!/bin/bash
INPUT_JSON=$(jq -n -c --arg username "$PAM_USER" '{input:{pam_username:$username}}')
OPA_RESULT_JSON=$(curl -s -X POST https://opa.local/v1/data/linux/$1 -H "Content-Type: application/json" -d $INPUT_JSON)
OPA_RESULT=$(jq -r '.result.allowed' <<< "$OPA_RESULT_JSON")
if [[ "$OPA_RESULT" == "true" ]]; then
# Authorization success
exit 0
else
# Authorization failed
exit 1
fi
pam_exec.so
方法比Styra提供的在C.中编写PAM模块的示例更可取