Как мне написать Задача Ansible для запуска скрипта PHP от имени третьего пользователя; не пользователь root и не подключающийся пользователь, а пользователь «веб-сервера»?
Программа администрирования NextCloud окк
, согласно документации, должен быть запущен как пользователь веб-сервера:
sudo -u www-данные php occ
Чтобы стать другим пользователем для запуска команды, Ansible предоставляет стать
особенность. Документация Ansible строго не рекомендует запускать команды от имени другого пользователя без полномочий root:
Все нормально, если файл модуля выполняется без использования стать
, когда стать_пользователем
является пользователем root или когда подключение к удаленному компьютеру осуществляется с правами root. В этих случаях Ansible создает файл модуля с разрешениями, которые разрешают чтение только пользователю и root или разрешают чтение только непривилегированному пользователю, на которого переключается.
Однако, когда и пользователь подключения, и стать_пользователем
являются непривилегированными, файл модуля записывается как пользователь, которого подключает Ansible (т. удаленный_пользователь
), но файл должен быть доступен для чтения пользователю, настроенному для Ansible.
С использованием стать_пользователем
этому пользователю
Пользователь подключения имеет судо
разрешение запускать команды от имени третьего пользователя:
$ sudo -u www-данные whoami
www-данные
Когда я использую стать_пользователем
в задаче, чтобы запустить команду от имени этого пользователя:
- имя: «NextCloud: конфигурация экземпляра»
стать_пользователем: "{{ web_process_user }}"
команда:
команда: >-
php "{{ apache_nextcloud_dir }}/occ" обслуживание: установить
--нет-взаимодействия
¦
ОБНОВИТЬ: гм, это работает. Я не знаю, что изменилось, но при попытке воспроизвести проблему она остановилась.
С использованием ракушка
с явным судо
вызов от имени этого пользователя
Когда я настраиваю задачу Ansible с ракушка
команда:
оболочка: >-
su '{{ web_process_user }}' --shell '/bin/bash' -c ' \
php "{{ apache_nextcloud_dir }}/occ" …
Анзибл жалуется:
[ПРЕДУПРЕЖДЕНИЕ]: рассмотрите возможность использования «become», «become_method» и «become_user», а не запуска su
Я хотел бы сделать это. Ансибл стать
было бы гораздо более изящным способом, чем этот оболочка: су
взломать.
Но при использовании стать
, возникают проблемы, описанные в документации Ansible: модуль задачи, отправленный по соединению для выполнения этой команды, не может получить привилегию для создания своих временных файлов.
Документация Ansible советует:
- «использовать конвейерную обработку»: при этом теряются преимущества системы модулей задач по умолчанию.
- «не становиться непривилегированным пользователем»: не вариант, потому что
для запуска этой команды требуется непривилегированный пользователь веб-сервера
правильно.
Как я должен сделать Ansible задачу который работает php "{{apache_nextcloud_dir}}/occ"
как непривилегированный, третий пользователь {{ web_process_user }}
?
ОБНОВИТЬ: стать
функциональность теперь работает правильно.