我有 nginx 和 php 應用程式。我還在該伺服器上安裝了 ansible 並複製了劇本。我想做的是透過 webapp 運行 ansible playbooks。我想知道如何以這種安全的方式進行。
Nginx 在使用者 nginx 下運行,php-fpm 在 apache 下運行,ansible 有它自己的使用者。 Php 應用程式位於 /var/www/html/ 中,ansible 劇本位於 /var/www/html/ansible 中,但這些目錄對每個人來說都是可讀的。
所以流程應該是這樣的:
- 使用者在網頁上選擇操作
- ajax將其發送到php
- php 準備 ansible 指令並執行 ansible playbook
- 安塞布爾運行
- php 捕獲 stdout&stderr 並將其作為 json 發送回網頁
- ajax 將在網頁上顯示 stdout&stderr。
現在,在 php 腳本中,我打算執行('ansible-playbook site.yml -t ...')。這將以 apache 使用者身分執行。或者我應該在 ansible 的用戶下使用 sudo 啟動它?或者更好的是在無人下啟動 nginx、php-fpm 和 ansible?
不確定什麼是最好的。
謝謝您的意見。
答案1
Ansible 的現有 Web 介麵包括:
- 訊號
- 塔式或 AWX
如果您想建立自己的,請使用ansible-runner作為運行 Ansible 的腳本/Python 庫/容器。
在編寫自己的東西之前,請了解這是一個特權應用程序,可以對您的基礎設施做很多事情。您不受已安裝 Web 伺服器的預設安全模型的限制。
例如,您可以有一個作業運行程式守護程序,該程式作為自己的專用使用者執行,與 Web 伺服器執行的使用者分開。這樣,受損的使用者 nginx 不會自動獲得 sudo 權限,您還需要通過一些 API。
也要欣賞隔離正在運行的劇本的可能性。 AWX 選擇實施chroot 風格的作業隔離。
一般來說,開發一個安全性、可用的 Web 應用程式對於一個答案來說是一個太大的主題,並且有更好的 Stack Exchange 網站來提供開發主題。研究已經存在的東西。