Ansible切换非特权用户执行任务时临时文件权限设置失败问题求助
报错原因
本次报错和你之前在Ubuntu上遇到的问题本质一致,核心是目标主机缺少acl工具包导致Ansible无法正常处理非特权用户的临时文件权限:
- Ansible切换到非特权用户执行任务时,需要让目标用户有权限访问上传到目标主机的临时执行文件。如果系统安装了
acl,Ansible会通过POSIX ACL规则直接给目标用户开放临时文件的访问权限,无需修改文件所有者。 - 你的目标主机是Scientific Linux 6.9,默认没有预装
acl包,Ansible无法使用ACL调整权限,只能尝试用chown命令修改临时文件的所有者为user2。 - 你使用的adminek用户的sudo权限没有授予
chown操作的相关权限,导致chown执行失败,触发权限报错。
解决方法
按照优先级从高到低推荐以下方案:
- 方案一:目标主机安装
acl包(最优解,符合官方推荐逻辑)
在目标主机用root或sudo权限执行安装命令:
安装完成后无需额外配置,重新运行playbook即可正常执行。yum install acl -y - 方案二:开启Ansible pipelining特性(无需装包,适用于无权限安装软件的场景)
修改ansible.cfg的ssh_connection配置段,开启pipelining后Ansible会直接通过SSH管道传输执行代码,不会在目标主机创建临时文件,自然不会触发权限问题:
注意:该方案仅对command、shell等轻量模块有效,部分需要上传文件执行的复杂模块仍可能报错。[ssh_connection] pipelining = true - 方案三:调整sudo规则(不推荐,会降低安全性)
如果你既不能安装acl也无法开启pipelining,可以修改目标主机的sudoers配置,给adminek用户授予无需密码执行任意命令的权限,允许chown操作,配合你已经配置的allow_world_readable_tmpfiles = True参数即可解决问题,但会降低系统安全性,生产环境不建议使用。
内容的提问来源于stack exchange,提问作者bartek lab
相关产品推荐
相关产品推荐

