如何将PAM和OPA集成在一起,以在linux中实现对SSH的安全控制



最近我正在使用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模块的示例更可取

最新更新