Ansible复制模块并变为-权限被拒绝

atb00ker

我正在运行ansible脚本,localhost以将文件夹复制到另一个位置。然而,

- name: Copy Network
  become: yes
  become_user: root
  copy:
    src: /d/
    dest: "/dest/d/"
    mode: 0644
  tags: [network]

在给我[Errno 13] Permission denied: b'd/f1'我原以为become_user会使命令以root身份执行,但没有用。此文件的权限为0600(root:root)

您能给我指点一下以获得使用ansible复制该文件的权限吗?

注意:

  • sudo ansible-playbook p.yml但是,它可以完美地工作,如果不想使用sudoansible命令并且ansible有一个窍门,我就不想使用它。

  • command: cp -r /d/ /dest/d/无需附加sudoansible命令(ansible-playbook p.yml)即可工作。但是,我不想使用command是否可以帮助我,因为幂等性&copy模块具有mode该任务所需的选项。

弗拉基米尔·博特卡

错误消息:运行ansible-playbook的用户无法读取/ d / f1。

在模块copy中become: yes仅适用于写入文件,而不适用于读取文件。结果,该模块按预期工作。

“尝试读取文件'/ d / f1'时发生错误:[Errno 13]权限被拒绝:'/ d / f1'”

细节

默认情况下,模块copy将文件从src(要复制到远程服务器的文件的本地路径)复制到dest(应将文件复制到的远程绝对路径)。在这种情况下,become: yes意味着在远程主机中具有Ansible升级特权,而在本地主机中则没有。尽管任务在本地主机上运行,​​即主机和远程主机均为本地主机,但该任务become: yes仅适用于写入文件而不是读取文件。

如果不是这样,become: yes它将自动升级master中的特权。这可能是一个安全问题。


问:“有什么解决方法吗?”

答:没有解决方法。它将侵犯文件的所有权和权限。例如,给定控制器上的文件

shell> ll f1
-rw-rw---- 1 root root 0 Sep 13 18:17 f1

下面的剧本由无特权的用户启动

shell> cat playbook.yml
- hosts: test_01
  become: true
  tasks:
    - copy:
        src: f1
        dest: /tmp

会崩溃

TASK [copy] ****
fatal: [test_01]: FAILED! => 
  msg: 'an error occurred while trying to read the file ''/scratch/f1'':
       [Errno 13] Permission denied: b''/scratch/f1'''

解决方案之一是使运行剧本的用户可读取文件。例如,在第一次播放中使超级用户可以读取其他文件,而在第二次播放中使用它

shell> cat playbook.yml
- hosts: localhost
  become: true
  tasks:
    - file:
        path: f1
        mode: o+r

- hosts: test_01
  become: true
  tasks:
    - copy:
        src: f1
        dest: /tmp

当然,只有在允许用户升级到控制器的root用户的情况下,这才起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章