從網路伺服器執行 ansible 來管理基礎架構
我有 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 啟動它嗎?或者更好的是在nobody下啟動nginx、php-fpm和ansible?
不知道什麼是最好的。
謝謝你的意見。
Ansible 的現有 Web 界麵包括:
- 信號
- 塔式或 AWX
如果您希望自己建構,請使用ansible-runner作為腳本/Python 庫/容器來執行 Ansible。ansible-playbook 用於互動使用,沒有穩定的 API。
在編寫自己的東西之前,請了解這是一個特權應用程序,可以對您的基礎設施做很多事情。您不受已安裝 Web 伺服器的預設安全模型的限制。
例如,您可以有一個作為其自己的專用使用者執行的作業執行程序守護程序,與執行 Web 伺服器的使用者分開。這樣,破壞使用者 nginx 不會自動將 sudo 設置為 root,您還需要通過一些 API。
還要欣賞隔離正在執行的劇本的可能性。AWX 選擇實施chroot 風格的作業隔離。
一般來說,開發一個安全、可用的 Web 應用程序對於一個答案來說是一個太大的話題,並且有更好的 Stack Exchange 站點用於開發主題。研究已經存在的東西。