了解AnsiblePlaybook中的权限提升

来自菜鸟教程
跳转至:导航、​搜索

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

了解权限提升在 Ansible 中的工作原理非常重要,这样您就可以使用适当的权限执行任务。 默认情况下,任务将以连接用户身份运行 - 这可能是 root 或任何具有 SSH 访问清单文件中远程节点的常规用户。

要运行具有扩展权限的命令,例如需要 sudo 的命令,您需要在游戏中包含设置为 yesbecome 指令。 这可以作为对该剧中所有任务有效的全局设置来完成,也可以作为每个任务应用的单独指令来完成。 根据您的 sudo 用户在远程节点中的设置方式,您可能还需要提供用户的 sudo 密码。 以下示例更新 apt 缓存,这是一项需要 root 权限的任务。

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

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

然后将以下行添加到新的剧本文件中:

~/ansible-practice/playbook-07.yml

---
- hosts: all
  become: yes
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

完成后保存并关闭文件。

要运行此 playbook,您需要在 ansible-playbook 命令中包含 -K 选项。 这将使 Ansible 提示您输入指定用户的 sudo 密码。

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

您还可以在执行任务或播放时更改要切换到的用户。 为此,请将 become_user 指令设置为要切换到的远程用户的名称。 当您在 playbook 中有多个依赖于 sudo 的任务时,这很有用,而且还有一些任务应该以您的普通用户身份运行。

下面的例子定义了本次播放中的所有任务默认使用sudo执行。 这是在播放级别设置的,就在 hosts 定义之后。 第一个任务使用 root 权限在 /tmp 上创建一个文件,因为这是默认的 became_user 值。 然而,最后一个任务定义了它自己的 become_user

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

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

将以下内容添加到新的 playbook 文件中:

~/ansible-practice/playbook-08.yml

---
- hosts: all
  become: yes
  vars:
    user: "{{ ansible_env.USER }}"
  tasks:
    - name: Create root file
      file:
        path: /tmp/my_file_root
        state: touch

    - name: Create user file
      become_user: "{{ user }}"
      file:
        path: /tmp/my_file_{{ user }}
        state: touch

完成后保存并关闭文件。

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

ansible-playbook -i inventory playbook-08.yml -u sammy -K
OutputBECOME password: 

PLAY [all] **********************************************************************************************

TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]

TASK [Create root file] *********************************************************************************
changed: [203.0.113.10]

TASK [Create user file] *********************************************************************************
changed: [203.0.113.10]

PLAY RECAP **********************************************************************************************
203.0.113.10           : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

当 playbook 运行完成后,您可以登录远程节点以验证是否在 /tmp 上创建了两个新文件,每个文件都有不同的所有权信息:

ssh sammy@203.0.113.10
ls -la /tmp/my_file*
Output-rw-r--r-- 1 root  root 0 Apr 14 13:19 /tmp/my_file_root
-rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy

关于 Ansible 中提权的更多详细信息,请参考【X89X】官方文档【X115X】。