非root用户不允许Ansible chown操作

时间:2019-06-20 21:04:13

标签: ansible chown

我在Ansible剧本中拥有以下内容:

- name: Create certificates directory
  file:
    dest: "{{ '~/wireguard/certs' | expanduser }}"
    state: directory
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_id }}"
    mode: 0700
  run_once: true
  delegate_to: localhost

但是,当它在剧本中运行时,出现以下错误:

fatal: [1.2.3.4 -> localhost]: FAILED! => {
  "changed": false,
  "gid": 1000,
  "group": "alex",
  "mode": "0755",
  "msg": "chown failed: [Errno 1] Operation not permitted: b'/home/alex/wireguard'",
  "owner": "alex",
  "path": "/home/alex/wireguard",
  "size": 4096,
  "state": "directory",
  "uid": 1000
}

我需要以root用户身份运行它还是其他东西?如果我确实需要以root用户身份运行它,become是否可以正常工作?

2 个答案:

答案 0 :(得分:0)

Do I need to run this as root or is it something else?

根是必需的。例如参见Changing Ownership

  

“超级用户root具有更改任何文件所有权的不受限制的功能,但是普通用户只能更改其拥有的那些文件的所有权。”

这实际上意味着普通用户只能将其拥有的文件组更改为他们所属的组。

If I do need to run it as root, does become work?

是的。 become有效。经常使用的become pluginsudo become_user 的默认值为root。

- file:
  become: yes
  become_method: sudo
  ...

通常,使远程/登录用户成为root用户。但是在您的特定情况下,由于delegate_to: localhost,请启用正在运行播放的用户。例如在 localhost

进行更改
$ grep alex /etc/sudoers
alex ALL=(ALL) NOPASSWD: ALL

有关其他选项,请参见plugin list

答案 1 :(得分:0)

我意识到ansible_user_id没有我所期望的用户名,因此我试图将所有权更改为不存在的用户。我通过为本地用户设置新变量来修复它。