使用wp-cli工具更新WordPress时Ansible剧本权限错误



我的hosts文件

ansible_user=ansible

剧本

- name: WordPress setup
hosts: servers
gather_facts: false
remote_user: ansible
become: true
roles:  
- wp

角色的任务

- name: Update admin user's password
command: wp user update admin
--user_pass="{{ wp_admin_pwd }}"
args:
chdir: "/var/www/{{ domain_name }}"
become: yes
become_user: www-data

运行这个剧本,出现一个错误:

为Ansible非特权用户创建的临时文件设置权限失败
(rc: 1, err: chmod: invalid mode: ' A+user:www-data:rx:allow '
尝试'chmod——help'

我用来连接到远程服务器的用户名为ansible,是一个具有sudo权限的用户。
WordPress安装在NGINX下运行。

我错过了什么吗?

正如成为非特权用户的风险一章所指出的,当成为非特权用户时,Ansible必须依靠一些技巧来使文件同时被remote_userbecome_user可读。

Ansible在POSIX系统上解决这个问题的方法之一是依靠setfacl命令。

首先,ifsetfacl在远程PATH中安装并可用,并且远程主机上的临时目录挂载了POSIX.1e文件系统ACL支持,Ansible将使用POSIX ACL与第二个非特权用户共享模块文件。

<一口>来源:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_privilege_escalation.html risks-of-becoming-an-unprivileged-user

因此,解决这个问题的一种方法是在远程节点上安装acl包,例如在Debian发行版上(例如:Debian, Ubuntu,…):
apt install acl

或者通过剧本本身在pre_tasks中,例如:

- hosts: servers
gather_facts: false
remote_user: ansible
pre_tasks:
- apt:
name: acl
become: true
become_user: root

roles:  
- wp

最新更新