我的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_user
和become_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