PHP 앱과 함께 nginx가 있습니다. 또한 이 서버에 Ansible을 설치하고 플레이북을 복사했습니다. 제가 하고 싶은 것은 webapp을 통해 ansible 플레이북을 실행하는 것입니다. 안전한 방법을 알고 싶습니다.
Nginx는 사용자 nginx로 실행 중이고 php-fpm은 apache에서 실행 중이며 ansible에는 자체 사용자가 있습니다. Php 앱은 /var/www/html/에 있고 ansible 플레이북은 /var/www/html/ansible에 있지만 이러한 디렉토리는 모든 사람이 읽을 수 있습니다.
따라서 흐름은 다음과 같아야 합니다.
- 사용자가 웹페이지에서 작업을 선택합니다.
- 아약스는 그것을 PHP로 보냅니다.
- php는 ansible 명령을 준비하고 ansible 플레이북을 실행합니다.
- 앤서블 실행
- php는 stdout&stderr을 잡아서 json으로 웹페이지에 다시 보냅니다.
- ajax는 웹페이지에 stdout&stderr을 표시합니다.
이제 PHP 스크립트에서 exec('ansible-playbook site.yml -t ...')를 실행할 계획입니다. 이것은 Apache 사용자로 실행됩니다. 아니면 sudo를 사용하여 ansible 사용자로 시작해야 합니까? 아니면 아무도 없는 상태에서 nginx, php-fpm 및 ansible을 시작하는 것이 더 낫습니까?
이것에 가장 적합한 것이 무엇인지 잘 모르겠습니다.
의견을 보내주셔서 감사합니다.
답변1
Ansible의 기존 웹 인터페이스는 다음과 같습니다.
- 신호기
- 타워 또는 AWX
직접 구축하고 싶다면 다음을 사용하세요.앤서블 러너Ansible을 실행하기 위한 스크립트/Python 라이브러리/컨테이너입니다. ansible-playbook은 대화형 사용을 위한 것이며 안정적인 API가 없습니다.
자신만의 것을 작성하기 전에 이것이 인프라에 많은 작업을 수행할 수 있는 특권 애플리케이션이라는 점을 이해하십시오. 설치된 웹 서버의 기본 보안 모델에 의해 제한되지 않습니다.
예를 들어, 웹 서버가 실행되는 사용자와 별도로 전용 사용자로 실행되는 작업 실행기 데몬이 있을 수 있습니다. 이렇게 하면 사용자 nginx를 손상시켜도 자동으로 루트로 sudo를 가져오지 않으며 일부 API도 거쳐야 합니다.
또한 실행 중인 플레이북을 격리할 수 있는 가능성도 높이 평가합니다. AWX는 구현을 선택했습니다.chroot 스타일 직업 격리.
일반적으로 안전하고 사용 가능한 웹 앱 개발은 한 가지 대답으로는 너무 큰 주제이며, 개발 주제에 대해서는 더 나은 Stack Exchange 사이트가 있습니다. 이미 존재하는 것을 연구하십시오.