最近我开始深入研究 Ansible 并编写自己的剧本。但是,我很难理解
become
和 become_user
之间的区别。
据我了解,become_user
类似于su <username>
,而become
意味着类似sudo su
或“以sudo用户身份执行所有命令”。但有时这两个指令会混合在一起。
你能解释一下它们的正确含义吗?
become_user
定义用于权限升级的用户。
become
只是一个激活或停用相同功能的标志。
以下三个例子应该可以清楚地说明:
此任务将以
root
执行,因为root
是提权的默认用户:
- do: something
become: true
此任务将以用户
someone
执行,因为用户已明确设置:
- do: something
become: true
become_user: someone
此任务不会对
become_user
执行任何操作,因为 become
未设置,默认为 false
/no
:
- do: something
become_user: someone
...除非在更高级别上将“成为”设置为“
true
”,例如一个块、剧本、组或主机变量等。
这是一个带有块的示例:
- become: true
block:
- do: something
become_user: someone
- do: something
第一个以用户
someone
身份运行,第二个以 root
身份运行。
据我了解,become_user类似于su,become意味着类似sudo su或“以sudo用户身份执行所有命令”。
默认
become_method
为 sudo
,因此 sudo do something
或 sudo -u <become_user> do something
Fineprint:当然“do:something”是伪代码。将您实际的 Ansible 模块放在那里。
become: yes
= sudo
become_user: user_name
= sudo -u user_name
become: yes
become_user: root
相当于 become: yes
这个链接清楚地解释了差异。
如果我需要使用 sudo 运行一批任务,我经常使用 include_task 语句。 将一本大剧本分成几个部分也很有帮助。 例如
- name: prepare task x
include_tasks: x-preparation.yml
when: condition is true
args:
apply:
become: yes
这也是使用标签时的一种方便方法:
- name: execute tasks x
include_tasks: x-execution.yml
args:
apply:
tags: exec
tags:
- exec
重要的是,您还需要在 include_tasks 语句上放置一个标签 希望这对任何人都有帮助
设为 yes 将使代码块默认以 root 用户身份运行。 如果您添加 come_user: "user1" 以及变成:yes 那么当前代码块将以 user1 身份运行。