综合案列,处理敏感文件,Sudo
作者:互联网
综合安例
control 控制端服务器 (所有操作在control主机操作)
node3,node4安装启动httpd 服务
node2 proxy代理(Nginx)
roles/proxy/files 编写脚本源码安装Nginx
将真机(lnmp_soft/nginx-1.17.6)源码包拷贝到 roles/proxy/files目录下
在此目录下编写脚本源码安装Nginx
编写配置文件 定义集群 调用集群
roles/proxy/tasks编写任务
copy模块拷贝到对方/tmp目录下
script模块不支持幂等性,
加args: (和scripts对齐)
creates: 后跟一个文件(/usr/local/nginx/sbin/nginx)
ansible-doc script 查看模块
copy拷贝配置文件
启服务
shell: (因为shell不支持幂等性 操作同上)
args:
creates: /usr/local/nginx/logs/nginx.pid 判断此文件是否存在 有则不再启动
防火墙打开
确定之前是否在node2开启过http服务,如果开启将http关闭
编写剧本 执行角色proxy
service模块开启http自带幂等性
2、ansible-vault处理敏感数据
encrypt(加密)、decrypt(解密)、view(查看),rekey(重置密码)。
[root@control ansible]# echo 12345678 > data.txt
[root@control ansible]# ansible-vault encrypt data.txt
New Vault password:
Confirm New Vault password:
Encryption successful
[root@control ansible]# cat data.txt
$ANSIBLE_VAULT;1.1;AES256.............
[root@control ansible]# ansible-vault view data.txt
Vault password:
12345678
[root@control ansible]# ansible-vault rekey data.txt
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
[root@control ansible]# ansible-vault decrypt data.txt
Vault password:
Decryption successful
[root@control ansible]# cat data.txt
12345678
[root@control ansible]# echo "lm secret data" > data.txt 写入数据
[root@control ansible]# echo 123456 > pass.txt 将密码写入文件
[root@control ansible]# ansible-vault encrypt --vault-id=pass.txt data.txt
Encryption successful 用密码加密文件
[root@control ansible]# cat data.txt
$ANSIBLE_VAULT;1.1;AES256.........................
[root@control ansible]# ansible-vault decrypt --vault-id=pass.txt data.txt
Decryption successful 解密文件
[root@control ansible]# cat data.txt
lm secret data
3、Sudo权限(让普通用户提升权限)
管理员需要先授权(修改/etc/sudoers文件)
普通用户以sudo的形式执行命令
修改/etc/sudoers的方法如下:
visudo(带语法检查,默认没有颜色提示)
vim /etc/sudoers(不带语法检查,默认有颜色提示)
授权格式
用户或组 主机列表=(提权身份)[NOPASSWD]:命令列表
命令需要写绝对路径 提权输自己密码NOPASSWD不需要密码 多个命令用逗号分隔
/etc/sudoers 此文件为只读wq!强制保存 立即生效
sudo 命令 (提权)
Ubuntu默认禁用root 第一个用户自动sudo ALL
[root@control ansible]# ansible all -m user -a "name=all password={{'123456' | password_hash('sha512')}}"
[root@control ansible]# ansible all -m lineinfile -a "path=/etc/sudoers line='all ALL=(ALL) NOPASSWD:ALL'"
[root@control ansible]# ssh all@node1 验证
all@node1's password:
[all@node1 ~]$ sudo systemctl restart sshd
[all@node1 ~]$ exit
修改Ansible配置
[root@control ansible]# vim ~/ansible/ansible.cfg
[defaults]
inventory = ~/ansible/inventory
remote_user = alice #以什么用户远程被管理主机(被管理端主机的用户名)
[privilege_escalation]
become = true #alice没有特权,是否需要切换用户提升权限
become_method = sudo #如何切换用户(比如用su就可以切换用户,这里是sudo)
become_user = root #切换成什么用户(把alice提权为root账户)
become_ask_pass = no #执行sudo命令提权时是否需要输入密码
远程被管理端主机的all用户,需要提前配置SSH密钥。
[root@control ansible]# for i in node1 node2 node3 node4 node5
do
ssh-copy-id all@$i
done
验证效果:
[root@control ansible]# ssh alice@node1 #依次远程所有主机看看是否需要密码
#注意:是远程登录node1,应该输入的是node1电脑上面alice账户的密码,control没有all用户
[root@node1 ~]# exit #退出远程连接
[root@control ansible]# ansible all -m command -a "who" #测试效果
[root@control ansible]# ansible all -m command -a "touch /test" #测试效果
常见报错(有问题可以参考,没问题可以忽略):
node1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: alice@node1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
"unreachable": true
}
问题分析:
Failed to connect to host via ssh alice@node1(通过ssh使用alice远程连接到主机失败)
Permission denied(因为无法连接,所以报错说权限被拒绝)
标签:control,data,Sudo,案列,敏感,ansible,node1,txt,root 来源: https://blog.csdn.net/HYJW01/article/details/117369959