Ansible_note:管理Ansible配置文件,控制端普通用户提权

目录

一、管理Ansible配置文件

1../ansible.cfg

2.~/.ansible.cfg

3./etc/ansible/ansible.cfg

4.优先级概述

二、Ansible配置文件结构

1.[defaults]

2.小实验

2.0 实验准备

2.1 建立ansible目录,以及主机清单inventory

2.2 编辑ansible配置文件

2.3 验证

三、ansible控制端普通用户sudo提权

0.准备步骤

1.建立Ansible目录以及主机清单inventory

2.编辑ansible.cfg配置文件

3.测试是否ping通受控主机

4.尝试在受控主机执行fdisk --list

5.sudo提权

5.1 在受控端编辑/etc/sudoers文件

5.2 配置ansible.cfg文件,加入[privilege_escalation]

5.3 测试


一、管理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 - kavinsu kavin是两种不同的切换用户的方式。

  1. su - kavin:使用su -命令以及-选项来切换到用户"kavin"。这种方式会启动一个新的登录会话,并且会加载目标用户的环境变量和配置文件。这意味着你将以"kavin"用户的身份登录,并且会获得与"kavin"用户相同的环境设置。

  2. 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            #提权的方式:sudo                                  

become_user = root              #提权到root                                     

become_ask_pass = false         #是否需要输入密码   

5.3 测试

[elysia@controller ansible]$ ansible all -m shell -a "sudo fdisk --list"

提权成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值