Ansible 无法设置临时权限

问题描述 投票:0回答:5

我正在使用 ansible 替换多个 RHEL6 和 RHEL7 服务器上用户的 ssh 密钥。 我正在运行的任务是:

- name: private key   
  copy:
    src: /Users/me/Documents/keys/id_rsa
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes

我尝试更新的两个主机出现以下错误:

致命:[host1]:失败! => {"failed": true, "msg": "设置失败 Ansible 需要在以下情况下创建的临时文件的权限 成为非特权用户(rc:1,错误:chown:更改所有权

/tmp/ansible-tmp-19/': Operation not permitted\nchown: changing
  ownership of
/tmp/ansible-tmp-19/stat.py':操作不 允许的 )。有关解决此问题的信息,请参阅 https://docs.ansible.com/ansible/become.html#becoming-an-unprivileged-user”}

问题是,这两个出现错误的版本是一些正在更新的版本的克隆。 我比较了 sudoers 和 sshd 设置,以及 /tmp 目录上的权限和安装选项。 问题主机和工作主机之间的情况都是相同的。 关于我下一步可以检查什么有什么想法吗?

我正在 Mac OS Sierra 上运行 ansible 2.3.1.0,如果有帮助的话。

更新:

@techraf

我不知道为什么这对除两台主机之外的所有主机都有效。这是原始剧本:

- name: ssh_keys
  hosts: my_hosts
  remote_user: my_user
  tasks:
    - include: ./roles/common/tasks/keys.yml
      become: yes
      become_method: sudo

和原始keys.yml:

- name: public key
  copy:
    src: /Users/me/Documents/keys/id_rsab
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 060
    backup: yes

我将剧本更改为:

- name: ssh_keys
  hosts: my_hosts
  remote_user: my_user
  tasks:
    - include: ./roles/common/tasks/keys.yml
      become: yes
      become_method: sudo
      become_user: root

keys.yml
至:

- name: public key
  copy:
    src: /Users/me/Documents/keys/id_rsab
    dest: /home/unpriv/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes

它适用于所有主机。

ansible
5个回答
93
投票

尝试在远程主机上安装ACL,然后执行ansible脚本

sudo apt-get install acl

doc

中所述

当连接用户和become_user都没有权限时,模块文件将以Ansible连接的用户(remote_user)写入,但该文件需要被Ansible设置为become的用户可读。在 POSIX 系统上,Ansible 通过以下方式解决这个问题:

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

接下来,如果 POSIX ACL 不可用或 setfacl 无法运行,对于支持以非特权用户身份执行此操作的系统,Ansible 将尝试使用 chown 更改模块文件的所有权


10
投票

你可以尝试这样的事情:

- name: private key 
  become: true
  become_user: root
  copy:
    src: /Users/me/Documents/keys/id_rsa
    dest: ~/.ssh/
    owner: unpriv
    group: unpriv
    mode: 0600
    backup: yes

注意:

become: true
become_user: root

查看“成为”文档以获取更多信息


6
投票

虽然安装

acl
模块有效,但还有另一种选择。

将下面的行添加到 ansible.cfg 的默认部分。

allow_world_readable_tmpfiles = True

更好的是,只需将其添加到需要它的任务中即可:

  vars:
    allow_world_readable_tmpfiles: true

具有更多详细信息的类似问题是Becoming non root user in ansible failed


0
投票

我正在使用临时命令,当我遇到这个问题时,将

-b --become-user ANSIBLE_USER
添加到我的命令中可以解决我的问题。 示例:

ansible all  -m file -a "path=/etc/s.text state=touch" -b --become-user ansadmin

当然,在此之前,我已经向用户授予了 Sudo 访问权限

如果您向您的用户授予 Sudo 访问权限,您可以这样写:

ansible all  -m file -a "path=/var/s.text state=touch"  -b --become-user root

0
投票

我可以知道如何在aix服务器上安装acl吗?

© www.soinside.com 2019 - 2024. All rights reserved.