1、 控制提权
Ansible playbook 能实现多种不同方式的提权操作,提权的级别取决于你打算控制的级别,ansible使用命令或连接参数,在play、role、block和tasks中,都可以设置提权,设置提权的命令有:become、become_user、become_method和become_flags
1.1 配置提权方式
如果你需要通过become参数进行提权,可以在ansible.cfg文件中设置become=true设置提权
配置文件 | 命令行 | 说明 |
---|---|---|
become | --become或-b | 设置提权 |
become_method | --become-method=提权方式 | 提权方式 |
become_user | --become-user=用户 | 提权用户 |
become_password | --ask-become-pass或-K | 提权用户密码 |
1.2 在play中设置提权
可在playbook中每个play通过设置提权参数become:true的方式进行,play提权应该最小提权方式(需要提权再提权)
---
- name: 提权管理
beceom: true
tasks:
- name: 显示用户ID
debug:
var: ansible_user_id
- name: 不提权管理
hosts: webservers
become: false
debug:
var: ansible_user_id
# 通过配置文件设置提权
[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_password="XX"
---
- name: 通过配置文件管理
hosts: webservers
tasks:
debug:
var: ansible_user_id
1.3 在task中提权
可在task中设置提权参数
---
- name: task配置提权
hosts: all
become: false
tasks:
- name: task提权
yum:
name: httpd
state: present
become: yes
- name: 查看服务
shell: "systemctl status httpd"
become: false
1.4 在Block块中配置提权
可以针对一组逻辑块进行整体的提权操作,相比task,范围更大,可以整体控制become状态
---
- name: Block块中配置提权
hosts: all
become: false
tasks:
- block:
- name: task提权
yum:
name: httpd
state: present
become: yes
- name: 查看服务
shell: "systemctl status httpd"
become: yes
1.5 在Role中配置提权
如果role中become没有开启,可以在roles下配置提权选项进行提权
---
- name: 在role中配置提权
hosts: all
roles:
- role: apache
become: true
1.6 配置提权变量
可以通过在配置文件中设置参数或使用提权变量在设置提权
配置文件 或 playbook选项 | 连接变量 |
---|---|
become | ansible_become |
become_method | ansible_become_method |
become_user | ansible_become_user |
become_password | ansible_become_pass |
1.6.1 针对主机组
可以通过设置变量的方式对主机组进行批量提权
webservers:
hosts:
servera.lab.example.com:
serverb.lab.example.com:
vars:
ansible_become: true
1.6.2 针对单个主机
可以通过设置变量的方式真的单个主机提权
webservers:
hosts:
servera.lab.example.com:
ansible_become: true
serverb.lab.example.com:
1.6.3 playbook设置提权变量
可以通过在playbook下通过设置变量进行提权
---
- name: 通过变量进行提权
hosts: all
vars:
ansible_become: true
tasks:
- name: 安装WEB服务器
yum:
name: httpd
state: present