AWX中become切换用户失败,文件权限配置不生效求助
解决Ansible Become切换失败及文件权限归属错误问题
问题根源分析
- Inventory配置错误:你的
ansible_become_user被设为字符串"ansible_user",而非实际要切换到的目标用户(比如你的admin_user变量)。这会导致Ansible尝试切换到名为ansible_user的系统用户,而非你期望的用户;同时当前配置中ansible_remote_user已经是ansible_user,等于执行sudo ansible_user,完全没有切换到目标用户,最终任务可能以root权限执行(取决于sudoers配置),导致文件归属为root。 - Playbook模块缩进错误:你提供的
get_url模块参数存在缩进问题,会导致Ansible解析失败,这也是潜在的执行异常点。
解决方案
1. 修正Inventory变量配置
根据你的需求选择以下两种配置之一:
场景A:切换到admin_user执行任务
如果希望直接以admin_user身份执行所有任务,确保文件归属正确:
{ "ansible_become": true, "ansible_become_ask_pass": false, "ansible_become_method": "sudo", "ansible_become_user": "{{ admin_user }}", "ansible_python_interpreter": "/usr/bin/python3", "ansible_remote_user": "ansible_user" }
- 注意
ansible_become_user使用变量引用{{ admin_user }},而非固定字符串。
场景B:以root身份执行任务,指定文件归属
如果必须用root权限下载文件,再将权限修改为admin_user:
{ "ansible_become": true, "ansible_become_ask_pass": false, "ansible_become_method": "sudo", "ansible_become_user": "root", "ansible_python_interpreter": "/usr/bin/python3", "ansible_remote_user": "ansible_user" }
2. 修正Playbook模块缩进
修复get_url的参数缩进问题,确保Ansible能正确解析:
- name: Download file get_url: url: "https://{{ twr_ev_af_server }}/{{ twr_ev_af_path }}/{{ ag.version }}.tar.gz" dest: "{{ ag.path | dirname }}/install" tmp_dest: "{{ ag.path | dirname }}/install" mode: '00740' owner: "{{ admin_user }}" group: "{{ admin_group }}" validate_certs: no
3. 验证sudo权限
在目标主机上执行以下命令,确认ansible_user可以无密码切换到目标用户:
sudo -l -U ansible_user
确保输出包含类似({{ admin_user }}) NOPASSWD: ALL或(root) NOPASSWD: ALL的权限配置,否则需要修改sudoers文件(通过visudo命令)添加对应权限。
内容的提问来源于stack exchange,提问作者AnsiRock
相关产品推荐
相关产品推荐

