Cum scriu un Sarcină ansible pentru a rula un script PHP ca al treilea utilizator; nu utilizatorul root și nu utilizatorul care se conectează, ci utilizatorul âwebserverâ?
Programul de administrare NextCloud occ, conform documentatiei, trebuie rulat ca utilizator de server web:
sudo -u www-data php occ
Pentru a deveni un alt utilizator pentru rularea unei comenzi, Ansible oferă deveni caracteristică. Documentația Ansible cu severitate recomandă să nu încercați să rulați comenzi ca alt utilizator, non-root:
Totul este în regulă dacă fișierul modul este executat fără a fi folosit deveni, cand deveni_utilizator este root, sau când conexiunea la mașina de la distanță se face ca root. În aceste cazuri, Ansible creează fișierul modul cu permisiuni care permit citirea numai de către utilizator și root, sau permite citirea doar de către utilizatorul neprivilegiat la care este comutat.
Cu toate acestea, atunci când atât utilizatorul conexiunii, cât și deveni_utilizator nu sunt privilegiați, fișierul modul este scris ca utilizatorul la care Ansible se conectează (the utilizator_la distanţă), dar fișierul trebuie să fie citit de utilizatorul Ansible este setat să devină.
Folosind deveni_utilizator la acel utilizator
Utilizatorul conexiunii are sudo permisiunea de a rula comenzi ca al treilea utilizator:
$ sudo -u www-data whoami
www-data
Când folosesc deveni_utilizator pe sarcină, pentru a rula comanda ca utilizatorul respectiv:
- nume: „NextCloud: Configurare instanță”
become_user: „{{ web_process_user }}”
comanda:
cmd: >-
php „{{ apache_nextcloud_dir }}/occ” întreținere:instalare
--fără-interacțiune
â¦
ACTUALIZAȚI: um, funcționează. Nu știu ce s-a schimbat, dar încercând să reproduc problema, s-a oprit.
Folosind coajă cu un explicit sudo invocare ca acel utilizator
Când configurez sarcina Ansible cu a coajă comanda:
coajă: >-
su '{{ web_process_user }}' --shell '/bin/bash' -c ' \
php „{{ apache_nextcloud_dir }}/occ” â¦
Ansible se plânge:
[AVERTISMENT]: Luați în considerare utilizarea „become”, „become_method” și „become_user” în loc să rulați su
Mi-ar plăcea să fac asta. Al lui Ansible deveni ar fi un mod mult mai grațios decât acesta coajă: su hack.
Dar la utilizare deveni, apar problemele descrise în documentația Ansible: modulul de sarcini trimis prin conexiunea pentru rularea acelei comenzi nu reușește să obțină privilegiul de a-și crea fișierele temporare.
Documentația Ansible recomandă:
- âutilizați pipeliningâ: Aceasta pierde avantajele sistemului implicit de task-module.
- âevitați să deveniți un utilizator neprivilegiatâ: nu este o opțiune, deoarece
Este necesar un utilizator de server web neprivilegiat pentru rularea acestei comenzi
corect.
Cum ar trebui face o sarcină Ansible care rulează php „{{ apache_nextcloud_dir }}/occ” ca al treilea utilizator neprivilegiat {{ web_process_user }}?
ACTUALIZAȚI: cel deveni funcționalitatea pare să funcționeze corect acum.