最近我开始深入研究Ansible并编写自己的剧本。但是,我在理解become
和become_user
之间的区别时遇到了麻烦。
据我了解,become_user
与su <username>
类似,become
表示sudo su
或“以sudo用户身份执行所有命令”。但有时这两个指令是混合的。
你能解释一下它们的正确含义吗?
答案 0 :(得分:67)
become_user
定义了用于privilege escalation的用户。
become
只是激活或停用相同的标志。
以下三个例子应该说清楚:
此任务将以root
执行,因为root
是权限提升的默认用户:
- do: something
become: yes
此任务将以用户someone
执行,因为用户已明确设置:
- do: something
become: yes
become_user: someone
此任务不会对become_user
执行任何操作,因为become
未设置且默认为false
/ no
:
- do: something
become_user: someone
...除非在更高级别设置为true
,例如一个街区,剧本,团体或主持人等等。
以下是block的示例:
- become: yes
block:
- do: something
become_user: someone
- do: something
第一个是用户someone
,第二个是root
。
据我所知,become_user与su类似,并且变为像sudo su或&#34;像sudo用户一样执行所有命令&#34;。
默认become_method
为sudo
,因此sudo do something
或sudo -u <become_user> do something
Fineprint:当然&#34; 做:某事&#34;是伪代码。把实际的Ansible模块放在那里。
答案 1 :(得分:2)
become: yes
= sudo
become_user: user_name
= sudo -u user_name
become: yes
become_user: root
等同于become: yes
此link清楚地说明了区别。
答案 2 :(得分:0)
如果我需要使用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语句上放置一个标签 希望这对任何人都有帮助