非 root 用户不允许进行 Ansible chown 操作

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

我的 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
可以工作吗?

ansible chown
3个回答
1
投票

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

需要root。例如,请参阅更改所有权

“超级用户 root 可以不受限制地更改任何文件的所有权,但普通用户只能更改他们拥有的文件的所有权。”

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

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

是的。 成为有效。经常使用的成为插件sudobecome_user 的默认值为 root。

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

一般情况下,让远程/登录用户成为root。但在您的具体情况下,由于

delegate_to: localhost
,请启用正在运行该播放的用户。例如在 localhost

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

请参阅插件列表了解其他选项。


1
投票

我意识到

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


0
投票

我的 Ansible 剧本也遇到了类似的错误。我的问题是该目录的所有者与我的用户名($USER)不同。解决方法:

sudo chown -R $USER /home/alex/wireguard

sudo chown -R alex /home/alex/wireguard
© www.soinside.com 2019 - 2024. All rights reserved.