从 Web 服务器运行 ansible 来管理基础设施

从 Web 服务器运行 ansible 来管理基础设施

我有带 php 应用程序的 nginx。我还在此服务器上安装了 ansible 并复制了剧本。我想要做的是通过 webapp 运行 ansible 剧本。我想知道如何安全地做到这一点。

Nginx 在用户 nginx 下运行,php-fpm 在 apache 下运行,ansible 有自己的用户。Php 应用程序位于 /var/www/html/,ansible playbooks 位于 /var/www/html/ansible,但这些目录对每个人都是可读的。

因此流程应该是这样的:

  1. 用户在网页上选择操作
  2. ajax 将其发送到 php
  3. php 准备 ansible 命令并运行 ansible playbook
  4. ansible 运行
  5. php 捕获 stdout&stderr 并将其以 json 形式发送回网页
  6. ajax 将在网页上显示 stdout&stderr。

现在,在 php 脚本中,我计划执行 exec('ansible-playbook site.yml -t ...')。这将以 apache 用户身份执行。或者我应该使用 sudo 在 ansible 用户下启动它?或者更好的方法是在 nobody 下启动 nginx、php-fpm 和 ansible?

不确定什么是最好的。

谢谢你的意见。

答案1

Ansible 现有的 Web 界面包括:

如果你想自己构建,请使用ansible-runner作为运行 Ansible 的脚本/Python 库/容器。ansible-playbook 用于交互式使用,没有稳定的 API。

在编写自己的程序之前,请理解这是一个特权应用程序,它可以对您的基础设施执行许多操作。您不受已安装的 Web 服务器的默认安全模型的限制。

例如,您可以让作业运行器守护进程以自己的专用用户身份运行,与 Web 服务器以用户身份运行的用户分开。这样,入侵用户 nginx 不会自动获得 root 权限,您还需要通过一些 API。

还欣赏隔离正在运行的剧本的可能性。AWX 选择实施chroot 风格的作业隔离

总体而言,开发安全、可用的 Web 应用程序是一个太大的话题,无法通过一个答案回答,而且有更好的 Stack Exchange 网站来讨论开发主题。研究已经存在的内容。

相关内容