Dea*_*nMV 29 git sudo vagrant ansible ansible-2.x
我的服务器上有一个ansible 2.1.0,我通过vagrant和PC 进行部署."部署"角色具有:
- name: upload code
become: true
become_user: www-data
git: repo=git@bitbucket.org:****.git
dest=/var/www/main
key_file=/var/www/.ssh/id_rsa
accept_hostkey=true
update=yes
force=yes
register: fresh_code
notify: restart php-fpm
tags: fresh_code
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用ansible 2.1.0我收到一个错误:
fatal: [default]: FAILED! => {"failed": true, "msg": "Failed to set permissions on the temporary files Ansible needs to create when becoming an unprivileged user. For information on working around this, see https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user"}
Run Code Online (Sandbox Code Playgroud)
我在我的电脑上使用它的2.0.1.0,通常都是 - 文件夹/ var/www /有文件夹主要与所有者和组www-data
如果我只使用become_user:www-data,如果我使用become_method:sudo with become_user:www-data - 我得到了同样的错误
需要做些什么来解决这个问题?
Jus*_*wig 45
在debian/ubuntu上,你可以通过首先acl在远程主机上安装软件包来解决这个问题,就像这个ansible任务一样:
- name: install setfacl support
become: yes
apt: pkg=acl
Run Code Online (Sandbox Code Playgroud)
与redhat/centos相同 - acl在远程主机上安装软件包:
- name: install setfacl support
become: yes
yum: name=acl
Run Code Online (Sandbox Code Playgroud)
Szt*_*upY 18
问题是www-data无法访问您用于连接到计算机的默认非root ansible用户创建的相同文件.此外,错误消息明确指出ansible的文档,该文档描述了从ansible 2.0或更低版本升级时必须解决此问题的选项.
他们提出了三种正确解决问题的方法:
- 使用流水线.启用流水线操作时,Ansible不会将模块保存到客户端上的临时文件中.相反,它将模块传递给远程python解释器的stdin.流水线操作不适用于非python模块.
- 在托管主机上安装filesystem acl支持.如果远程主机上的临时目录安装时启用了文件系统acls并且setfacl工具位于远程PATH中,则Ansible将使用filesystem acls与第二个非特权组件共享模块文件,而不必让所有人都可以读取文件.
- 不要通过成为非特权用户在远程计算机上执行操作.当您成为root或不使用成员时,临时文件受UNIX文件权限保护.在Ansible 2.1及更高版本中,如果以root用户身份连接到受管计算机,然后使用变为非特权帐户,则UNIX文件权限也是安全的.
或者如果你不能做任何这些修复,那么你可以强制ansible以更不安全的方式运行(这似乎是ansible 2及以下的默认方式),这也应该解决你的问题,但不会修复底层安全风险:
如果您无法进行上述任何更改来解决问题,并且您认为正在运行的计算机足够安全,您希望在那里运行的模块具有全局可读性,则可以
allow_world_readable_tmpfiles在ansible.cfg文件中打开.设置allow_world_readable_tmpfiles会将此错误从错误更改为警告,并允许任务像2.1之前一样运行.
| 归档时间: |
|
| 查看次数: |
12957 次 |
| 最近记录: |