RHCE-B14. 基于Ansible密码库创建用户帐户
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B14. 基于Ansible密码库创建用户帐户相关的知识,希望对你有一定的参考价值。
红帽RHCE考试下午-RHCE(RH294)
RH294任务概览
- 考试时间4个小时,6台虚拟机,15道题
- 原来通过脚本或者集群做的题现在都需要使用playbook实现
- 考试时大概有6台虚拟服务器,都已经做好了互相的免密
- 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
- 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
- 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
- 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
- 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分
14. 基于Ansible密码库创建用户帐户
- 从 http://172.25.250.250/ansible2.8/user_list.yml 下载要创建的用户的列表,并将它保存到/home/student/ansible
- 在本次考试中使用在其他位置创建的密码库 /home/student/ansible/locker.yml,
- 创建名为/home/student/ansible/users.yml 的 playbook,
- 从而按以下所述创建用户帐户:
任务要求
- 职位描述为 developer 的用户应当:
- 在 dev 和 test 主机组中的受管节点上创建
- 从 pw_developer 变量分配密码
- 是附加组 student 的成员
- 新增要求设置密码有效期为30天
- 职位描述为 manager 的用户应当:
- 在 prod 主机组中的受管节点上创建
- 从 pw_manager 变量分配密码
- 是附加组 devops 的成员
- 新增要求设置密码有效期为30天
- 密码应采用 SHA512 哈希格式。
- 您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件/home/student/ansible/secret.txt 正常运行
注意:
准备个工作
- 考试期间不需要做
设置密码有效期30天的参数跟ansible版本呢有关系
使用shell模块运行chage -M 30来修改用户密码的有效期吧
如果是设定用户的有效期,使用参数expires:指定用户的的过期时间,看清楚题中的要求
完成步骤
- 下载并查看文件
- 先从服务器上下载并查看用户yml
[student@workstationansible]$ wget http://172.25.250.250/ansible2.8//usr_list.yml
[student@workstationansible]$cat user_list.yml
users:
- name: bob
job: developer
- name: sally
job: manager
- name: fred
job: developer
- 分两个任务创建组
2.1 根据要求创建developer组用户和manager组用户
2.1.1 先按题中要求确定在那个主机组执行
2.1.2 再定义变量,指定密码文件和用户列表
2.1.3 写创建用户的任务tasks,包含三个子任务:创建组、创建用户、使用shell命令修改密码有效期
2.1.4 先使用group模块创建用户组,状态为present
2.1.5 再写个循环使用user模块创建用户,用when判断题中要求的分组job注释,用loop循环users变量列表,用password设定密码来自变量,同时用password_hash指定哈希算法为sha512
2.1.6 最后使用一个shell模块执行chage -M
命令来修改用户密码有效期
- 根据要求编写创建对应playbook
[student@workstation ansible]$ vim users.yml
---
- name: Create developer user
hosts: dev,test
vars_files:
- locker.yml ## 密码来自于上一个任务加密的文件
- user_list.yml ## 用户来自于下载的文件
tasks:
- name: Ensure group "student" exists
group:
name: student ## 考试时候要求是什么组就创建什么组
state: present
- name: Create user in developer
user:
name: "{{ item.name }}" ## 从user_list.yml里取name的值作为用户名
groups: student ## 指定题目中要求的组组
password: "{{ pw_developer | password_hash('sha512') }}" ## 从locker.yml密码文件中取pw_developer后面的内容作为密码,并指定密码应采用 SHA512 哈希格式
loop: "{{ users }}" ## 用loop调用user_list.yml中的uesrs变量,就是头上那个变量名,user是个列表
when: item.job == "developer" ## 判断job是不是题中要求的分类,另一种写法 "'developer' in item.job"
## 下面这个对应新加的修改用户密码有效期为30的内容
- name:
shell: chage -M 30 "{{ item.name}}"
loop: "{{ users }}"
when: item.job == "developer"
## 写一半先测试一下,成功了再复制一些做下一半
- name: Create manager user
hosts: prod
vars_files:
- locker.yml ## 密码来自于上一个任务加密的文件
- user_list.yml ## 用户来自于下载的文件
tasks:
- name: Ensure group "opsmgr" exists
group:
name: opsmgr
state: present
- name: Create user in manager
user:
name: "{{ item.name }}"
groups: opsmgr
password: "{{ pw_manager | password_hash('sha512') }}"
loop: "{{ users }}"
when: item.job == "manager" ## 另一种写法 "'manager' in item.job"
## 下面这个对应新加的修改用户密码有效期为30的内容
- name:
shell: chage -M 30 "{{ item.name}}"
loop: "{{ users }}"
when: item.job == "manager"
[student@workstation ansible]$ ansible-playbook --vault-id secret.txt users.yml ## 运行的时候要使用--vault-id 指定加密的文件
- 使用chage -l bob 查看新创建的用户的密码有效期,默认是99999
- 直接使用命令 chage -M 30 bob 就可以更改用户密码的有效期了
- 如果user模块没有更改用户密码有效期的选项,就需要另外想办法了
- 在写好的playbook里写个shell命令,把用户的密码给改了好不好呢?
- name:
shell: chage -M 30 "{{ item.name}}"
loop: "{{ users }}"
when: item.job == "manager"
考察的知识点
Playbook中使用变量
- 在独立的变量YAML文件中定义变量,并在playbook中通过文件的方式进行调用外部变量
- 在另一个playbook文件中引用变量文件中的变量,比playbook中定义的变量优先级高
- hosts: all
vars_files:
- vars.yml
vim vars.yml
---
# variables file
package_name: mariadb-server
service_name: mariadb
vim var5.yml
---
#install package and start service
- hosts: dbsrvs
remote_user: root
vars_files:
- vars.yml
tasks:
- name: install package
yum: name={{ package_name }}
tags: install
- name: start service
service: name={{ service_name }} state=started enabled=yes
- 变量的优先级从高到低如下
-e 选项定义变量 -->
playbook中vars_files -->
playbook中vars变量定义 -->
host_vars/主机名文件 -->
主机清单中主机变量-->
group_vars/主机组名文件-->
group_vars/all文件-->
主机清单组变量
ansible group模块
- group 模块可以帮助我们管理远程主机上的组。
name 必须参数,用于指定要操作的组名称。
state 用于指定组的状态,
两个值可选,present,absent,
默认为 present,设置为absent 表示删除组。
gid 用于指定组的gid。
#创建组
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
---
- name: creat group
hosts: websrvs
tasks:
group
name: nginx
gid: 88
system: yes
#删除组
ansible websrvs -m group -a 'name=nginx state=absent'
---
- name: del group
hosts: websrvs
tasks:
group
name: nginx
state: absent
ansible user模块
- user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
user:指定要操作的用户名称
uid:指定用户的uid
comment:指定用户的注释信息
expires:指定用户的的过期时间,相当于设置/etc/shadow文件中的第8列
shell:指定用户的默认shell
group:指定用户的基本组
groups:指定用户的附加组,新加时会覆盖原有的附加组,默认append=no
append:配合groups使用,在原有附加组的基础上追加组,append=yes
state present|absent:默认present,表示添加用户或需要用户存在;absent表示删除用户
remove:删除用户时,默认是不删除家目录,remove=no;remove=yes表示删除用户家目录
password:指定用户的密码,需要是加密后的字符串,相当于/etc/shadow文件中的第2列
update_password always|on_create:默认always
generate_ssh_key no|yes:默认为no;yes表示生成ssh密钥对,在用户家目录.ssh/目录中生成id_rsa的私钥和id_rsa.pub的公钥;若已存在同名的密钥,不会覆盖
ssh_key_file:前提是generate_ssh_key=yes,使用此参数生成ssh私钥的路径和名称,对应公钥会在同路径下生成,后缀名".pub"
ssh_key_comment:前提是generate_ssh_key=yes,使用此参数定义公钥中的注释信息,若已存在同名的密钥,不会覆盖;不指定时默认注释信息为"ansible-generated on 远程主机的主机名"
ssh_key_passphrase:前提是generate_ssh_key=yes,使用此参数设置私钥的密码,若已存在同名的密钥,不会覆盖
ssh_key_type:前提是generate_ssh_key=yes,使用此参数设置密钥对的类型,默认为rsa,若已存在同名的密钥,不会覆盖
使用哈希算法加密密码
- 要获取sha512密码哈希(随机盐):
{{ 'passwordsaresecret' | password_hash('sha512') }}
- 要获取具有特定salt的sha256密码哈希,请执行以下操作:
{{ 'secretpassword' | password_hash('sha256', 'mysecretsalt') }}
- 每个系统生成唯一散列的幂等方法是使用两次运行之间一致的salt:
{{ 'secretpassword' | password_hash('sha512', 65534 | random(seed=inventory_hostname) | string) }}
以上是关于RHCE-B14. 基于Ansible密码库创建用户帐户的主要内容,如果未能解决你的问题,请参考以下文章
RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml
RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml