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.