atb*_*ker 4 linux permissions ansible
我正在运行一个 ansible 脚本来localhost将文件夹复制到另一个位置。然而,
- name: Copy Network
become: yes
become_user: root
copy:
src: /d/
dest: "/dest/d/"
mode: 0644
tags: [network]
Run Code Online (Sandbox Code Playgroud)
正在给我[Errno 13] Permission denied: b'd/f1'。我期望become_user能让命令以 root 身份执行,但没有成功。该文件的权限是0600(root:root).
您能给我指点一下如何使用 ansible 访问该文件并复制它吗?
笔记:
sudo ansible-playbook p.ymlsudo工作完美,但是,如果不需要,我不想与 ansible 命令一起使用,并且 ansible 有一个技巧。
command: cp -r /d/ /dest/d/sudo无需附加到 ansible 命令 ( )即可工作ansible-playbook p.yml。但是,如果我可以帮助它,我不想使用command它,因为幂等性和copy模块具有mode任务所需的选项。
更新:如果您可以将权限升级为本地主机上的root,解决方案是设置remote_src: true(信用@ivandov)
- copy:
src: /d/
dest: /dest/d/
mode: '0644'
remote_src: true
become: true
become_user: root
Run Code Online (Sandbox Code Playgroud)
以下详细信息描述了您无法升级到本地主机上的 root 的情况。给定本地主机上的文件
shell> ll /tmp/test/d/f1
-rw-r----- 1 root root 0 Aug 25 23:23 /tmp/test/d/f1
Run Code Online (Sandbox Code Playgroud)
模块副本按预期工作
- copy:
src: /tmp/test/d/
dest: /tmp/test/dest/
become: true
become_user: root
Run Code Online (Sandbox Code Playgroud)
首先,它尝试读取文件但失败
致命:[localhost]:失败!=> msg: '尝试读取文件 ''/tmp/test/d/f1'' 时发生错误: [Errno 13] 权限被拒绝: b''/tmp/test/d/f1''。[Errno 13] 权限被拒绝:b''/tmp/test/d/f1'''
默认情况下,模块复制将文件从src(要复制到远程服务器的文件的本地路径)复制到dest(文件应复制到的远程绝对路径)。在这种情况下,become: true意味着 Ansible 会提升远程主机上的权限,但不会提升本地主机上的权限。尽管该任务在本地主机上运行,即主主机和远程主机都是本地主机,但remote_src: true该设置become: true仅适用于写入文件而不适用于读取文件。如果您无法在 localhost 设置上升级到 rootremote_src: true
- copy:
src: /tmp/test/d/
dest: /tmp/test/dest/
remote_src: true
become: true
become_user: root
Run Code Online (Sandbox Code Playgroud)
将失败
致命:[localhost]:失败!=> 更改=假 ansible_facts: Discover_interpreter_python: /usr/bin/python3 module_stderr: |- sudo: 需要密码 module_stdout: '' msg: |- MODULE FAILURE 请参阅 stdout/stderr 以了解确切的错误 rc: 1
问:“有什么解决办法吗?”
答:如果不升级到根目录,就没有解决方法。这会侵犯文件的所有权和权限。例如,给定控制器上的文件
shell> ll f1
-rw-rw---- 1 root root 0 Sep 13 18:17 f1
Run Code Online (Sandbox Code Playgroud)
下面的剧本是由非特权用户启动的
shell> cat playbook.yml
- hosts: test_01
become: true
tasks:
- copy:
src: f1
dest: /tmp
Run Code Online (Sandbox Code Playgroud)
会崩溃
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'''
Run Code Online (Sandbox Code Playgroud)
如果您无法升级到 localhost master 上的 root,解决方案是使运行 playbook 的用户可以读取该文件。