目录
2.1 建立ansible目录,以及主机清单inventory
5.2 配置ansible.cfg文件,加入[privilege_escalation]
一、管理Ansible配置文件
配置ansible,可以通过修改ansible配置文件中的设置来自定义ansible的安装行为。
ansible从受控节点多个可能得位置之一选择其配置文件。
1../ansible.cfg
配置文件./ansible.cfg,范围:当前目录
前面有个点("."),别看漏了!!!
如果执行ansible命令的目录中存在ansible.cfg文件,则使用它,而不是全局文件或用户的个人文件。这样,管理员可以创建一个目录结构,将不同的环境或项目存储在单独的目录中,并且每一目录包含为独特的一组设置二定制的配置文件
2.~/.ansible.cfg
配置文件~/.ansible.cfg,范围:用户家目录
ansible在用户目录中查找.ansible.cfg文件。如果存在此配置并且当前工作目录中也没有ansible.cfg 文件,则使用此配置取代/etc/ansible/ansible.cfg
3./etc/ansible/ansible.cfg
配置文件/etc/ansible/ansible.cfg 范围:/etc
ansible软件包提供的一个基本的配置文件,它位于/etc/ansible/ansible.cfg。如果找不到其他配置文件,则使用此配置文件
4.优先级概述
./ansible.cfg > ~/.ansible.cfg > /etc/ansible/ansible.cfg
可以看出范围越小就越容易找到,优先级就越高
默认使用/etc/ansible/ansible.cfg文件
ansible会根据配置文件的优先级更新,选出唯一的ansible配置文件,其余配置文件将失效,如下:
[root@controller ~]# ansible --version | grep "config file"
config file = /etc/ansible/ansible.cfg
[root@controller ~]# touch .ansible.cfg
[root@controller ~]# ansible --version | grep "config file"
config file = /root/.ansible.cfg
[root@controller ~]# touch ansible.cfg
[root@controller ~]# ansible --version | grep "config file"
config file = /root/ansible.cfg
二、Ansible配置文件结构
参考https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg
1.[defaults]
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts #资产清单路径
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp # 临时文件存放路径,在自己定义配置文件的时候,remote_tmp 和local_tmp不需要管
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True #连接受管主机时,是否要求输入密码
#transport = smart
#remote_port = 22 #连接受管主机的远程端口
#module_lang = C
#module_set_locale = False
2.小实验
2.0 实验准备
切换到kavin普通用户(Ansible工作目录:/home/kavin/ansible)
su - kavin
su - kavin 和su kavin 的区别:
在Linux系统中,su - kavin
和su kavin
是两种不同的切换用户的方式。
-
su - kavin
:使用su -
命令以及-
选项来切换到用户"kavin"。这种方式会启动一个新的登录会话,并且会加载目标用户的环境变量和配置文件。这意味着你将以"kavin"用户的身份登录,并且会获得与"kavin"用户相同的环境设置。 -
su kavin
:使用su
命令后跟用户"kavin"来切换到该用户。这种方式不会加载目标用户的环境变量和配置文件,而是保留当前用户的环境设置。这意味着你将切换到"kavin"用户,但是环境变量和配置文件将保持不变。
因此,su - kavin
会提供一个全新的登录会话,而su kavin
只是切换到"kavin"用户而已。通常情况下,如果你需要完全以目标用户的身份进行操作,包括使用其环境变量和配置文件,建议使用su - kavin
。
2.1 建立ansible目录,以及主机清单inventory
[root@controller ~]# su - kavin
[kavin@controller ~]$ mkdir ansible
[kavin@controller ~]$ cd ansible/
[kavin@controller ansible]$ touch ansible.cfg
[kavin@controller ansible]$ ls
ansible.cfg[kavin@controller ansible]$ vim inventory
[kavin@controller ansible]$ cat inventory
[servers] #建立servers组
node1.lab.example.com
node2.lab.example.com
2.2 编辑ansible配置文件
[kavin@controller ansible]$ vim ansible.cfg
[kavin@controller ansible]$ cat ansible.cfg
[defaults]inventory = /home/kavin/ansible/inventory #主机清单的路径
remote_port = 22 #受管主机远程连接的端口
remote_user = root #受管主机远程连接的登录用户
ask_pass = True #是否需要密码验证
2.3 验证
[kavin@controller ansible]$ ansible all --list-hosts #列出受管主机清单
SSH password:
hosts (2):
node1.lab.example.com
node2.lab.example.com
ssh免密登录
将ask_pass = True改为ask_pass = False即可
[defaults]
inventory = /home/kavin/ansible/inventory
remote_port = 22
remote_user = root
ask_pass = false
测试:
此时不再需要密码验证
三、ansible控制端普通用户sudo提权
0.准备步骤
切换elysia普通用户(Ansible工作目录:/home/elysia/etc/inventory)
1.建立Ansible目录以及主机清单inventory
[elysia@controller ~]$ su - elysia
[elysia@controller ~]$ mkdir ansible
[elysia@controller ~]$ cd ansible
[elysia@controller ansible]$
[elysia@controller ansible]$ vim inventory
[elysia@controller ansible]$ cat inventory
[servers]
node1.lab.example.com
node2.lab.example.com
2.编辑ansible.cfg配置文件
[elysia@controller ansible]$ vim ansible.cfg
[defaults]
inventory = /home/elysia/ansible/inventory
remote_port = 22
remote_user = elysia
ask-pass = false
3.测试是否ping通受控主机
[elysia@controller ansible]$ ansible all -m ping
4.尝试在受控主机执行fdisk --list
[elysia@controller ansible]$ ansible all -m shell -a "fdisk --list"
可以看到报错:Permission denied,原因是普通用户执行fdisk --list,这是root用户才有的权限,那么如何解决这个问题呢,方法一:sudo提权;方法二:su提权。这里推荐使用sudo提权
5.sudo提权
5.1 在受控端编辑/etc/sudoers文件
使用visudo键入以下行,visudo效果等同于vim /etc/sudoers
在node1上:
elysia ALL=(ALL) NOPASSWD: ALL
[root@node1 ~]# visudo
[root@node1 ~]# grep elysia /etc/sudoers
elysia ALL=(ALL) NOPASSWD: ALL
109 ## Same thing without a password
110 # %wheel ALL=(ALL) NOPASSWD: ALL
111 elysia ALL=(ALL) NOPASSWD: ALL
同理,我们在node2上进行相同操作。
5.2 配置ansible.cfg文件,加入[privilege_escalation]
在ansible控制端编辑ansible.cfg
[defaults]
inventory = /home/elysia/ansible/inventory
remote_port = 22
remote_user = elysia
ask-pass = false
[privilege_escalation] #权限提升配置项become = true #是否需要提权
become_method = sudo #提权的方式:sudobecome_user = root #提权到root
become_ask_pass = false #是否需要输入密码
5.3 测试
[elysia@controller ansible]$ ansible all -m shell -a "sudo fdisk --list"
提权成功