当前位置: 首页 > news >正文

RHCE-B14. 基于Ansible密码库创建用户帐户

红帽RHCE考试下午-RHCE(RH294)

RH294任务概览

  • 考试时间4个小时,6台虚拟机,15道题
  • 原来通过脚本或者集群做的题现在都需要使用playbook实现
  • 考试时大概有6台虚拟服务器,都已经做好了互相的免密
  • 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
  • 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
  • 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
  1. 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
  2. 注意:考试的判分方式通过普通用户远程执行指定目录下的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 的用户应当:
  1. 在 dev 和 test 主机组中的受管节点上创建
  2. 从 pw_developer 变量分配密码
  3. 是附加组 student 的成员
  4. 新增要求设置密码有效期为30天
  • 职位描述为 manager 的用户应当:
  1. 在 prod 主机组中的受管节点上创建
  2. 从 pw_manager 变量分配密码
  3. 是附加组 devops 的成员
  4. 新增要求设置密码有效期为30天
  • 密码应采用 SHA512 哈希格式。
  • 您的 playbook 应能够在本次考试中使用在其他位置创建的库密码文件/home/student/ansible/secret.txt 正常运行

注意:

准备个工作

  • 考试期间不需要做
设置密码有效期30天的参数跟ansible版本呢有关系
使用shell模块运行chage -M 30来修改用户密码的有效期吧
如果是设定用户的有效期,使用参数expires:指定用户的的过期时间,看清楚题中的要求

完成步骤

  1. 下载并查看文件
  • 先从服务器上下载并查看用户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
  1. 分两个任务创建组
    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-B15.更新 Ansible 库的密钥
  • RHCE-B16.编写playbook创建cron计划任务
  • ubuntu和centos创建用户的区别
  • 常见编程语言都是什么类型的?不同类型的语言有什么区别?
  • False等价布尔值bool(value)
  • 写shell脚本的一种开头方式,给你的脚本加个保险
  • 离线安装pyenv的shell脚本
  • Python语言的特点
  • Python中标识符的命名规则
  • Python 仅有33个系统关键字
  • [TroubleShooting]CentOS8使用pyenv部署多版本python时报 python: command not found
  • Linux设置pip国内源
  • CentOS8部署多版本共存Python开发环境
  • Win10部署python多版本开发环境
  • Linux常用Shell脚本测试命令
  • android图片蒙层
  • C# 免费离线人脸识别 2.0 Demo
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Material Design
  • Node + FFmpeg 实现Canvas动画导出视频
  • 爱情 北京女病人
  • 安卓应用性能调试和优化经验分享
  • 从tcpdump抓包看TCP/IP协议
  • 关于Flux,Vuex,Redux的思考
  • 欢迎参加第二届中国游戏开发者大会
  • 面试遇到的一些题
  • 配置 PM2 实现代码自动发布
  • 实战|智能家居行业移动应用性能分析
  • 使用API自动生成工具优化前端工作流
  • 使用权重正则化较少模型过拟合
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 微服务入门【系列视频课程】
  • 原生 js 实现移动端 Touch 滑动反弹
  • 智能合约Solidity教程-事件和日志(一)
  • 阿里云服务器如何修改远程端口?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 透过事物看本质的能力怎么培养?
  • #pragma预处理命令
  • #QT项目实战(天气预报)
  • #宝哥教你#查看jquery绑定的事件函数
  • $.ajax()方法详解
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (floyd+补集) poj 3275
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default