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

RHCE-B11. 利用playbook创建 Web 内容目录并能够访问

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

RH294任务概览

  • 考试时间4个小时,6台虚拟机,15道题
  • 原来通过脚本或者集群做的题现在都需要使用playbook实现
  • 考试时大概有6台虚拟服务器,都已经做好了互相的免密
  • 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
  • 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
  • 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
  1. 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
  2. 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分

11. 利用playbook创建 Web 内容目录

  • 按照下方所述,创建一个名为 /home/student/ansible/webcontent.yml 的 playbook:
  • 该 playbook 在 dev 主机组中的受管节点上运行

任务要求

  1. 创建符合下列要求的目录 /webdev: 所有者为 devops 组具有常规权限:
    owner=read+write+execute,group=read+write+execute, other=read+execute
  2. 具有特殊权限: set group ID
  3. 用符号链接将 /var/www/html/webdev 链接到 /webdev
  4. 创建文件 /webdev/index.html,其中包含如下所示的单行文本:Development
  5. 在 dev 主机组中主机上浏览此目录(例如 http://servera.lab.example.com/webdev/ )将生成以下输出:Development
    注意:

准备个工作

  • 考试期间不需要做
ansible-doc file ## 查看file模块

完成步骤

  1. 先安装httpd服务呀,因为可能没装
  2. 再将httpd服务设置为开机启动呀,因为可能没设
  3. 还需要配置防火墙才能访问呀,因为可能没启用
  4. 这才正式开始创建体重要求的目录,记得用setype设定httpd_sys_content_t
  5. 然后创建题中要求的软链接呀
  6. 最后创建题中要求的访问内容文件,记得用setype设定httpd_sys_content_t
[student@workstation ansible]$ vim webcontent.yml
---
- hosts: dev 
  tasks:
  ## 由于不确定dev上面是否已经开启了httpd服务,所以先装一下httpd
    - name: 
      yum:
        name: httpd 
        state: present
    - name: 
      service:
        name: httpd 
        state: started 
        enabled: yes
    ## 防火墙如果测试没问题也可以不用设置
    - name: 
      firewalld:
        service: http 
        permanent: yes 
        state: enabled 
        immediate: yes
    - name: create dir
      file:
        path: /webdev 
        group: devops 
        state: directory 
        mode: 2775
        setype: httpd_sys_content_t
    - name: createlink
      file:
        src: /webdev
        dest: /var/www/html/webdev 
        state: link
    - name: create a file 
      copy:
        content: "Development\n" 
        dest: /webdev/index.html 
        setype: httpd_sys_content_t
[student@workstation ansible]$ ansible-playbook webcontent.yml
  • 验证还是要做的
    curl http://servera.lab.example.com/webdev/

  • 这道题非常容易坑,有可能会做不出来结果
    在selinux中如果content值不对,可能访问不到,
    在生成目录的时候,通过setype直接把文件夹的值给改掉
    在生成页面文件的时候也要同时改掉setype就完事了
    注意:使用ll -Z查看文件和文件夹的content值,如果不知道应该是什么,拖回去上层html目录创建一个文件看一下值
    通过指定se的type值来使文件得以访问正常

cd /var/www/html
touch a.log
ll -Z a.log

考察的知识点

ansible file模块

  • 功能:设置文件属性,创建软链接等
    ansible-doc file
  • file模块常用的参数
path       被管理文件的路径
state
    ## 状态常用参数:
    absent           删除目标文件
    touch            如果目标文件不存在,则创建文件;如果存在,则更改目标文件的时间戳
    directory        创建目录
    hard             给目标文件创建硬链接(与src一起使用)
    link             给目标文件创建软链接(与src一起使用)
setype      设置目标文件安全上下文属性
owner       设备目标文件的所属主
group       设置目标文件的所属组
mode        设置文件的权限
    mode常用的格式:文件:0644    目录:0755   
    或者用引号:文件:'0644'    目录:'0755'
    也开始指定符号模式:mode: u+rwx    或者  mode: u=r,g=w,o=x   或者:mode: u+r,g+w,o+x
src      指定链接文件的路径
dest     指定所索取的文件所要保存的目录
#创建空文件
ansible all -m file -a 'path=/data/test.txt state=touch'
ansible all -m file -a 'path=/data/test.txt state=absent'
ansible all -m file -a "path=/root/test.sh owner=wang mode=755"
#创建目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
#创建软链接
ansible all -m file -a 'src=/data/testfile path|dest|name=/data/testfile-link state=link'
#创建目录
ansible all -m file -a 'path=/data/testdir state=directory'
#递归修改目录属性,但不递归至子目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
#递归修改目录及子目录的属性
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"

修改默认安全上下文。

  • 在selinux开启的情况下,目录和文件的安全上下文需要设置为httpd_sys_content_t,apahce的httpd才能访问呢
[root@localhost ~]# mkdir /www
#新建/www/目录,打算用这个目录作为apache的网页主目录,而不再使用/var/www/html/目录
[root@localhost ~]# ls -Zd /www/
drwxr-xr-x.root root unconfined_u:object_r:default_t:s0 /www/
#而这个目录的安全上下文类型是default_t,那么apache进程当然就不能访问和使用/www/目录了
  • 这个目录是手工建立的,并不是系统默认目录,所以并没有默认安全上下文,需要我们手工设定
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t "/www(/.*)?"
#这条命令会给/www/目录及目录下的所有内容设定默认安全上下文类型是httpd_sys_content_t
[root@localhost ~# semanage fcontext -l | grep "/www"
#…省略部分输出…
/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
#/www/目录的默认安全上下文出现了
  • 恢复目录本身安全上下文到重设后的默认值
[root@localhost ~]# ls -Zd /www/
drwxr-xr-x.root root unconfined_u:object_r:default_t:s0 /www/
#但是查询发现/www/目录的安全上下文并没有进行修改,那是因为我们只修改了默认安全上下文,而没有修改目录的当前安全上下文
[root@localhost ~]# restorecon -Rv /www/
restorecon reset /www context
unconfined_u:object_r:default_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
#恢复一下/www/目录的默认安全上下文,发现类型已经被修改为httpd_sys_content_t

相关文章:

  • RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告
  • RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml
  • RHCE-B14. 基于Ansible密码库创建用户帐户
  • 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国内源
  • php的引用
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android系统模拟器绘制实现概述
  • java取消线程实例
  • MobX
  • passportjs 源码分析
  • Python - 闭包Closure
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月16日 DApp数据排行榜
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 阿里云购买磁盘后挂载
  • - 概述 - 《设计模式(极简c++版)》
  • 来,膜拜下android roadmap,强大的执行力
  • 两列自适应布局方案整理
  • 小试R空间处理新库sf
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 在weex里面使用chart图表
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 数据库巡检项
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (31)对象的克隆
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (6)添加vue-cookie
  • (二)windows配置JDK环境
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (一)WLAN定义和基本架构转
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 未来三学期想要修的课 (日記)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .CSS-hover 的解释
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net专家(张羿专栏)
  • // an array of int
  • /etc/sudoers (root权限管理)
  • [ C++ ] STL---string类的模拟实现
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [《百万宝贝》观后]To be or not to be?