了解 Ansible Playbook 中的权限升级

与您在终端上执行的常规命令一样,某些任务需要特殊权限,以便 Ansible 在远程节点上成功执行它们。

重要的是要了解优先权升级在 Ansible 中是如何工作的,以便您能够使用适当的权限执行任务. 默认情况下,任务将作为连接用户运行 - 这可能是 root 或任何有 SSH 访问的普通用户在库存文件中的远程节点。

要运行具有扩展权限的命令,例如需要sudo的命令,您需要在游戏中包含一个变成指令设置为。这可以作为适用于该游戏中的所有任务的全球设置,或者作为每个任务的单独指令。

在你的ansible-practice目录中创建一个名为playbook-07.yml的新文件:

1nano ~/ansible-practice/playbook-07.yml

然后将以下行添加到新播放簿文件中:

1[label ~/ansible-practice/playbook-07.yml]
2---
3- hosts: all
4  become: yes
5  tasks:
6    - name: Update apt cache
7      apt:
8        update_cache: yes

保存并关闭文件,当你完成。

要运行此播放本,您需要在ansible-playbook命令中包含-K选项。

1ansible-playbook -i inventory playbook-07.yml -u sammy -K

要做到这一点,将become_user指令设置为您要切换的远程用户的名称。

以下示例定义了本场比赛中的所有任务将默认执行为sudo。 这是在hosts定义后,在sudo级设置的。 第一项任务使用root特权创建了在/tmp上的文件,因为这是默认的became_user值。

在你的ansible-practice目录中创建一个名为playbook-08.yml的新文件:

1nano ~/ansible-practice/playbook-08.yml

将以下内容添加到新播放簿文件中:

 1[label ~/ansible-practice/playbook-08.yml]
 2---
 3- hosts: all
 4  become: yes
 5  vars:
 6    user: "{{ ansible_env.USER }}"
 7  tasks:
 8    - name: Create root file
 9      file:
10        path: /tmp/my_file_root
11        state: touch
12
13    - name: Create user file
14      become_user: "{{ user }}"
15      file:
16        path: /tmp/my_file_{{ user }}
17        state: touch

保存并关闭文件,当你完成。

ansible_env.USER事实包含连接用户的用户名,在运行ansible-playbook命令时可以定义在执行时使用-u选项。

1ansible-playbook -i inventory playbook-08.yml -u sammy -K
 1[secondary_label Output]
 2BECOME password: 
 3
 4PLAY [all] **********************************************************************************************
 5
 6TASK [Gathering Facts] **********************************************************************************
 7ok: [203.0.113.10]
 8
 9TASK [Create root file] *********************************************************************************
10changed: [203.0.113.10]
11
12TASK [Create user file] *********************************************************************************
13changed: [203.0.113.10]
14
15PLAY RECAP **********************************************************************************************
16203.0.113.10           : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

当播放簿完成运行时,您可以登录远程节点(s),以验证在 `/tmp 上创建了两个新文件,每个文件具有不同的所有权信息:

1[environment second]
2ls -la /tmp/my_file*
1[secondary_label Output]
2[environment second]
3-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root
4-rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy

有关 Ansible 中的特权升级的详细信息,请参阅 官方文件

Published At
Categories with 技术
comments powered by Disqus