ansible小结(十一)ansible普通用户su切换问题 篇中提到了在命令执行模式下普通用户切换为root的问题,不过在遍写playbook的时候如何解决该问题呢?这里也小结了下,这里先给一个成功的playbook内容:后面逐步解释

1- hosts: www.361way.com
2  remote_user: zabbix
3  become: yes
4  become_method: su
5  tasks:
6   - selinux:
7        state: disabled
8   - name: disable firewalld
9     shell: systemctl stop firewalld && systemctl disable firewalld

这个playbook的内容比较简单,所实现的功能就是先以zabbix用户登陆,再切换为root的身份执行关闭selinux和关闭firewalld 。执行结果如下:

playbook-su
playbook-su

一、become语名的调用

上面的切换主要使用的是become语句,其参数主要解释如下:

  • become: yes #是否允许身份切换
  • become_method: su #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo
  • become_user: root #切换指定的用户

become语句的使用,可以是在全局位置(见开始示例),也可以是在局部任务处,如下是局部任务位调用的方法:

1tasks:
2- name: transfer file to server
3  copy: src=/root/pswd.sh dest=/tmp/pswd.sh mode=755
4- name: to root and chage password
5  become: yes
6  become_method:  su
7  shell:    /bin/bash -x /tmp/pswd.sh

当然,这里不仅仅是切换为root,也可以配合become_user,切换为其他用户。

二、通过sudo进行操作

sudo相关的配置文件内容解释如下:

  • hosts:用于指定要执行指定任务的主机其可以是一个或多个由冒号分隔主机组。
  • remote_user :用于指定远程主机上的执行任务的用户。不过remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务其可用于play全局或某任务。此外甚至可以在sudo时使用sudo_user指定sudo时切换的用户。
  • user:于remote_user相同
  • sudo:如果设置为yes,执行该任务组的用户在执行任务的时候,获取root权限
  • sudo_user:如果设置user为breeze,sudo为yes,sudo_user为bernie时,则breeze用户在执行任务时会获得bernie用户的权限

使用的时候也比较简单,还是如最上面的配置一样,只是从become换成了sudo,所不同的是,sudo方式需要事先配置的有sudo权限。