RHCE试题解析与踩雷分享

考前准备:
不需要破解密码,若要配置ip地址直接进入图形用户界面startx,配置之后点apply即可
配置yum仓库(两个虚拟机都要配置yum仓库,可以一个配置完之后复制给另一个就ok)

[root@system1 ~]# vim /etc/yum.repos.d/base.repo 
///etc/yum.repos.d目录中创建一个名为base的文件进入编辑,因为这个目录下存放着yum仓库的配置文件

[base]    //yum仓库唯一标识符,避免与其他仓库冲突
name=base   //yum仓库名,易于识别仓库用处
baseurl=http://server.group8.example.com/yum    //为了在内网中可以使用yum安装相关的软件,就要配置yum源,YUM源是一个保存了多个RPM包的服务器,可以通过http的方式来检索、下载并安装相关的RPM包
enable=1   //设置此源是否可用,1为可用,0为禁用
gpgcheck=0  //设置此源是否校验文件,1为校验,0为不校验

//复制给system2
[root@system1 ~]# scp /etc/yum.repos.d/base.repo  root@system2:/etc/yum.repos.d/
root@system2's password:
base.repo

可进行测试安装httpd

[root@system1 ~]# yum install httpd -y

....
Installed:
  httpd.x86_64 0:2.4.6-40.el7

Dependency Installed:
  apr.x86_64 0:1.4.8-3.el7              apr-util.x86_64 0:1.5.2-6.el7         httpd-tools.x86_64 0:2.4.6-40.el7
  mailcap.noarch 0:2.1.41-2.el7

Complete! //表示yum仓库配置没有问题

第一题:设定SELinux
在system1和system2要求SELinux的工作模式enforcing:
要求重启后依然生效
分别在system1和system2上完成

[root@system1 ~]# vim /etc/selinux/config  //修改配置文件

#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing //这里需要修改为enforcing,然后保存退出

[root@system1 ~]# setenforce 1  //修改当前模式
[root@system1 ~]# getenforce  //查看当前模式
Enforcing

system2同上做法

第二题:配置防火墙
按下列要求在system1和system2上配置防火墙系统:
允许group8.example.com域的用户对system1和system2进行ssh访问
禁止my133t.org域的用户对system1和system2进行ssh访问
注意:my133t.org是在172.13.8.0/24网段

[root@system1 ~]# systemctl enable firewalld   //开机自启动防火墙
[root@system1 ~]# firewall-cmd --permanent --add-service=ssh   //允许所有
success
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.13.8.0/24 service name=ssh reject'   //添加拒绝富规则
success
[root@system1 ~]# firewall-cmd --reload   //重新加载防火墙
success
[root@system1 ~]# firewall-cmd --list-all   //查看防火墙规则
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="172.13.8.0/24" service name="ssh" reject

system2上同样的做法

第三题:自定义用户环境
在system1和system2上创建自定义命令为qstat,要求:
此自定义命令将执行以下命令:/bin/ps -Ao pid,tt,user,fname,rsz
此命令对系统中的所有用户有效
分别在system1和system2上执行:

[root@system1 ~]# vim /etc/bashrc

....
# vim:ts=4:sw=4
alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz'

[root@system1 ~]# source /etc/bashrc  //让命令生效,引用这个文件
也可以如下验证:
[root@system1 ~]# bash
[root@system1 ~]# which qstat
alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz'
        /bin/ps
[root@system1 ~]# qstat

system2同上做法

.bashrc这个文件主要保存个人的一些个性化设置,如命令别名、路径等,此题就是将这个命令起个别名的作用

第四题:配置端口转发
在system1和system2配置端口转发,要求:
在172.24.8.0/24网段中的主机,访问system1的本地端口5423将被转发到80端口
此设置必须永久有效

//因为有端口号,所以要指定协议,因为没有强调是哪个协议为我们需要把tcp/udp两个都写上
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.24.8.0/24 forward-port port=5423 protocol=tcp to-port=80'
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.24.8.0/24 forward-port port=5423 protocol=udp to-port=80'
//然后重新加载防火墙
[root@system1 ~]# firewall-cmd --reload

system2同上

第五题:配置链路聚合
在system1和system2之间按以下要求配置一个聚合链路:
此链路使用接口eth1和eth2
此链路在一个接口失效时仍然能够工作
此链路在system1使用下面的地址172.16.3.40/255.255.255.0
此链路在system2使用下面的地址172.16.3.45/255.255.255.0
此链路在系统重启之后仍然保持正常状态

分别在system1和system2上执行:

链路聚合是一个将多个物理端口聚合在一起形成一个逻辑端口的过程,来实现流量进出在各成员端口的负荷分担 --可参考命令配置链路聚合理解此题

//在此目录下存放所有的帮助文件,此处用来一步步查找"runner":{"name": "activebackup"}
[root@system1 ~]# cd /usr/share/doc/
[root@system1 doc]# ll teamd-1.9/
total 32
-rw-r--r--. 1 root root 26530 Oct 31  2013 COPYING
drwxr-xr-x. 2 root root  4096 Jul 25  2016 example_configs
drwxr-xr-x. 5 root root    30 Jul 25  2016 example_ifcfgs
[root@system1 doc]# cd teamd-1.9/
[root@system1 teamd-1.9]# cd example_configs/
[root@system1 example_configs]# ll
total 60
-rw-r--r--. 1 root root 305 Oct 31  2013 activebackup_arp_ping_1.conf
-rw-r--r--. 1 root root 465 Oct 31  2013 activebackup_arp_ping_2.conf
...
[root@system1 example_configs]# vim activebackup_arp_ping_1.conf
//创建链路聚合team0,添加会话名team0,类型为team,接口名为team0,配置内容为"runner":{"name": "activebackup"}
[root@system1 example_configs]# nmcli connection add con-name team0 type team ifname team0 config '{"runner":       {"name": "activebackup"}}'
Connection 'team0' (ba24908a-b05d-4011-b6b2-0f020b75eabf) successfully added.

//配置地址,配置地址、开机自启动,模式为manual手动配置ip地址
[root@system1 example_configs]# nmcli connection modify team0 ipv4.addresses 172.16.3.40/24 connection.autoconnect yes ipv4.method manual

//添加接口1,聚合接口名为team0-slave1,网卡名eth1,类型team-slave,主聚合会话接口是team0
[root@system1 example_configs]# nmcli connection add con-name team0-slave1 ifname eth1 type team-slave master team0
Connection 'team0-slave1' (9a1b99b3-b614-42b0-81b5-e2e6a1c71d4b) successfully added.
//添加接口2
[root@system1 example_configs]# nmcli connection add con-name team0-slave2 ifname eth2 type team-slave master team0
Connection 'team0-slave2' (1d2cd00a-3e38-4a38-a157-68789f32a6ae) successfully added.

//启动接口
[root@system1 example_configs]# nmcli connection up team0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

//查看接口ip地址
[root@system1 example_configs]# ifconfig team0

system2同上,注意地址接口

第六题:配置IPv6地址
在考试系统上配置接口eth0使用下列IPv6地址:
system1上的地址为2003:ac18::305/64
system2上的地址为2003:ac18::30a/64
两个系统必须能与网络2003:ac18/64内的系统通信
地址必须在重启后依然生效
两个系统必须保持当前的IPv4地址并能进行通信

分别在system1和system2上执行:

//像配置ipv4地址一样配置ipv6地址,同时设置手动配置ip地址,开机自启
[root@system2 ~]# nmcli connection modify eth0 ipv6.addresses 2003:ac18::30a/64 ipv6.method manual connection.autoconnect yes

//重新加载配置
[root@system2 ~]# nmcli connection reload

//关闭重启此接口
[root@system2 ~]# nmcli connection down eth0 && nmcli connection up eth0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/10)

//用ipv6地址测试互通性
[root@system2 ~]# ping6 -c1 2003:ac18::305
PING 2003:ac18::305(2003:ac18::305) 56 data bytes
64 bytes from 2003:ac18::305: icmp_seq=1 ttl=64 time=0.545 ms

--- 2003:ac18::305 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.545/0.545/0.545/0.000 ms

第七题:配置本地邮件服务
在system1和system2上配置邮件服务,要求:
这些系统不接受外部发送来的邮件
在这些系统上本地发送的任何邮件都会自动路由到mail.group8.example.com
在这些系统上发送的邮件显示来自于server.group8.example.com

你可以通过发送邮件到本地用户dave来测试你的配置,系统server.group8.example.com已经配置把此用户的邮件转到URL http://server.group8.example.com/pub/received_mail/8

分别在system1和system2上执行:

//监听服务的ip地址,lookback-only表示仅接受本地邮件
[root@system1 ~]# postconf -e inet_interfaces=loopback-only

//将接收到的任何邮件都当做外部邮件,这样邮件才会转发到中心邮件服务器
[root@system1 ~]# postconf -e mydestination=

//禁止本地分发邮件到本地用户邮箱
[root@system1 ~]# postconf -e local_transport=error:err

//因为没有自己的固定ip和域名,所以必须指定ISP的SMTP服务器作
为邮件网关(智能主机)。可以用如下的参数指定,即就是设置中心服务器为题目要求
[root@system1 ~]# postconf -e relayhost=[mail.group8.example.com]

//发件人地址邮件域名,假设发信人为wuru,那么会将信件的发信人改为[email protected].com,相当于我们经常用到的wo@163.com,这里的myorigin指的就是163.com
[root@system1 ~]# postconf -e myorigin=server.group8.example.com

//设置开机自启动,重启postfix服务
[root@system1 ~]# systemctl enable postfix
[root@system1 ~]# systemctl restart postfix

//测试发邮件,查看配置是否符合题目要求
[root@system1 ~]# echo "hello" | mail -s testmail dave
[root@system1 ~]# curl http://server.group8.example.com/pub/received_mail/8

第八题:配置SMB共享目录
在system1上配置SMB服务,要求:
你的SMB服务器必须是STAFF工作组的一个成员
共享/common目录,共享名必须为 common
只有 group8.example.com 域内的用户端可以访问 common 共享
common 必须是可以浏览的
用户 andy 必须能够读取共享中的内容,如果需要的话,验证密码是 redhat

在system1上执行:

//安装samba客户端
[root@system1 ~]# yum install samba samba-client -y

//配置开机自启动
[root@system1 ~]# systemctl enable smb nmb

//添加防火墙,重新加载防火墙
[root@system1 ~]# firewall-cmd --permanent --add-service=samba
[root@system1 ~]# firewall-cmd --reload

//编辑服务配置文件
[root@system1 ~]# vim /etc/samba/smb.conf
workgroup = STAFF
[common]
        path = /common
        hosts allow = 172.24.8.
        browseable = yes

//创建共享目录
[root@system1 ~]# mkdir /common

//配置目录selinux安全上下文
[root@system1 ~]# chcon -t samba_share_t /common/

//添加用户
[root@system1 ~]# smbpasswd -a andy
New SMB password:
Retype new SMB password:
Added user andy.

//重启服务
[root@system1 ~]# systemctl restart smb nmb

第九题:配置多用户SMB挂载
在system1通过SMB共享目录 /devops ,并满足下列要求:
共享名为 devops
共享目录 devops 只能 group8.example.com 域中的客户端使用
共享目录 devops 必须可以被浏览
用户 silene 必须能以读的方式访问此共享,访问密码是 redhat
用户 akira 必须能以读写的方式访问此共享,访问密码是 redhat
此共享永久挂载在 system2.group8.example.com 上的 /mnt/dev 目录,并使用用户 silene 作为认证用户,可以通过用户 akira 来临时获取写的权限

//编辑配置文件,增加devops内容
[root@system1 ~]# vim /etc/samba/smb.conf
[devops]
        path = /devops
        hosts allow = 172.24.8.
        browseable = yes  //可以被浏览
        writable = no   //不能被写
        write list = akira  //只有akira可以写

//创建目录,配置安全上下文,并按题目要求设置该目录的权限,添加samba用户
[root@system1 ~]# mkdir /devops
[root@system1 ~]# chcon -t samba_share_t /devops/
[root@system1 ~]# setfacl -m u:akira:rwx /devops/
[root@system1 ~]# smbpasswd -a silene
[root@system1 ~]# smbpasswd -a akira

//重启服务
[root@system1 ~]# systemctl restart smb nmb

遇到问题:(考试不会遇到)
[root@system1 ~]# setfacl -m u:akira:rwx /devops/
setfacl: Option -m: Invalid argument near character 3
分析原因:
The reason you get this error is because the akira user does not exist. Setfacl will give the same error for groups that do not exist as well.该用户不存在,这时我id akira查看系统并不存在此用户,useradd akira添加该用户,再正常添加samba用户之后修改权限即可
解决问题:
[root@system1 ~]# id akira
id: akira: no such user
[root@system1 ~]# useradd akira
[root@system1 ~]# useradd silene
[root@system1 ~]# smbpasswd -a silene
New SMB password:
Retype new SMB password:
Added user silene.
[root@system1 ~]# smbpasswd -a akira
New SMB password:
Retype new SMB password:
Added user akira.
[root@system1 ~]# setfacl -m u:akira:rwx /devops/

//创建挂载目录,安装临时挂载点工具,安装客户端,挂载
[root@system2 ~]# mkdir /mnt/dev
[root@system2 ~]# yum install cifs-utils -y
[root@system2 ~]# yum install samba-client -y
[root@system2 ~]# vim /etc/fstab

//172.24.8.11/devops  /mnt/dev  cifs defaults,multiuser,username=silene,password=redhat,sec=ntlmssp 0 0
                             通用互联文件系统    多用户                                    验证方式 
//检测挂载是否成功
[root@system2 ~]# mount -a

//验证
[root@system2 ~]# su - silene //切换到该用户下
-bash-4.2$ cd /mnt/dev  //切换目录
-bash-4.2$ cifscreds add 172.24.8.11 //登录
Password:
-bash-4.2$ touch testfile  //测试创建文件
touch: cannot touch ‘testfile’: Permission denied//题目要求该用户不能写入文件,被拒
-bash-4.2$ ll
total 0
-bash-4.2$ exit
logout
[root@system2 ~]# su - akira
mkdir: cannot create directory '/home/ldap': Permission denied
-bash-4.2$ cd /mnt/dev
-bash-4.2$ cifscreds add 172.24.8.11 
Password:
-bash-4.2$ ls
-bash-4.2$ touch testfile//此用户可以写入文件
-bash-4.2$ ls
testfile
-bash-4.2$ exit
logout

第十题:配置NFS服务
在 system1 配置NFS服务,要求如下:
以只读的方式共享目录 /public ,同时只能被 group8.example.com 域中的系统访问
以读写的方式共享目录 /protected ,同时只能被 group8.example.com 域中的系统访问
访问 /protected 需要通过Kerberos安全加密,您可以使用下面URL提供的密钥
http://server.group8.example.com/pub/keytabs/system1.keytab
目录 /protected 应该包含名为 project 拥有人为 andres 的子目录
用户 andres 能以读写方式访问 /protected/project

//设置开机自启动
[root@system1 ~]# systemctl enable nfs-server nfs-secure-server
//设置防火墙
[root@system1 ~]# firewall-cmd --permanent --add-service=nfs
success
[root@system1 ~]# firewall-cmd --permanent --add-service=rpc-bind
success   
[root@system1 ~]# firewall-cmd --permanent --add-service=mountd
success   
[root@system1 ~]# firewall-cmd --reload

rpc-bind:
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,即客户端可以连接到正常端口上去。

//创建题目要求两个目录
[root@system1 ~]# mkdir -p /public /protected/project

//修改所有者,完成目录 /protected 应该包含名为 project 拥有人为 andres 的子目录这个要求
[root@system1 ~]# chown andres /protected/project

//配置安全上下文,注意权限一个是只读,一个是读写,-R表示将该目录下的子目录权限内容也一并修改了
[root@system1 ~]# chcon -t public-content-t /public/
[root@system1 ~]# chcon -t public_content_rw_t /protected/ -R

//下载钥匙另存在/etc/krb5.keytab目录下
[root@system1 ~]# wget -O /etc/krb5.keytab http://server.group8.example.com/pub/keytabs/system1.keytab

//编辑该配置文件
[root@system1 ~]# vim /etc/exports
/public *.group8.example.com(ro,sync)  //只读权限,无验证,同步写入内存与硬盘中
/protected *.group8.example.com(rw,sec=krb5p,sync)  //读写权限,验证,同步写入

//编辑版本,题目无要求可以不写
[root@system1 ~]# vim /etc/sysconfig/nfs
RPCNFSDARGS="-V 4.2"

//重启服务
[root@system1 ~]# systemctl restart nfs-server nfs-secure-server

//验证
[root@system1 ~]# exportfs 
/public       	*.group8.example.com
/protected    	*.group8.example.com

第十一题:挂载一个NFS共享
在 system2 上挂载一个来自 system1.group8.example.com 的NFS共享,并符合下列要求:
/public 挂载在下面的目录上 /mnt/nfsmount
/protected挂载在下面的目录上 /mnt/nfssecure 并使用安全的方式,密钥下载URL如下:
http://server.group8.example.com/pub/keytabs/system2.keytab
用户 andres 能够在 /mnt/nfssecure/project 上创建文件
这些文件系统在系统启动时自动挂载

//创建挂载点目录
[root@system2 ~]# mkdir /mnt/nfsmount /mnt/nfssecure

//下载钥匙
[root@system2 ~]# wget -O /etc/krb5.keytab http://server.group8.example.com/pub/keytabs/system2.keytab

//挂载
[root@system2 ~]# vim /etc/fstab
system1:/public  /mnt/nfsmount nfs defaults 0 0
system1:/protected  /mnt/nfssecure nfs defaults,sec=krb5p,v4.2 0 0

//设置开机自启动,重启服务,检测挂载,查看挂载
[root@system2 ~]# systemctl enable nfs-secure
[root@system2 ~]# systemctl start nfs-secure
[root@system2 ~]# mount -a
[root@system2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.8G  3.1G  6.8G  31% /
devtmpfs              765M     0  765M   0% /dev
tmpfs                 773M     0  773M   0% /dev/shm
tmpfs                 773M  8.8M  765M   2% /run
tmpfs                 773M     0  773M   0% /sys/fs/cgroup
//172.24.8.11/devops  9.8G  3.1G  6.7G  32% /mnt/dev
system1:/public       9.8G  3.1G  6.7G  32% /mnt/nfsmount
system1:/protected    9.8G  3.1G  6.7G  32% /mnt/nfssecure
//登录测试
[root@system2 ~]# su - andres
Last login: Tue Jul 26 06:41:00 CST 2016 on pts/1
su: warning: cannot change directory to /home/ldap/andres: No such file or directory
mkdir: cannot create directory '/home/ldap': Permission denied
-bash-4.2$ kinit
Password for [email protected].COM:
-bash-4.2$ cd /mnt/nfssecure/project/
-bash-4.2$ touch teatfile
-bash-4.2$ ls
teatfile
-bash-4.2$ exit
logout

第十二题:实现一个 web 服务器
在 system1 上配置一个站点 http://system1.group8.example.com/,然后执行下述步骤:
从 http://server.group8.example.com/pub/system1.html 下载文件,并且将文件重名为 index.html 不要修改此文件的内容
将文件 index.html 拷贝到您的 web 服务器的 DocumentRoot 目录下
来自于 group8.example.com 域的客户端可以访问此web服务
来自于 my133t.org 域的客户端拒绝访问此web服务

//安装软件包
[root@system1 ~]# yum install httpd -y
//修改配置文件
[root@system1 ~]# vim /etc/httpd/conf.d/httpd-vhosts.conf 
<VirtualHost *:80>
	DocumentRoot "/var/www/html"
	ServerName system1.group8.example.com  //指定配置站点
	<Directory "/var/www/html">
		<RequireAll>
			Require all granted    //匹配所有访问请求,并授权访问
			Require not host .my133t.org  //不匹配.my133t.org访问请求,并拒绝访问
		</RequireAll>
	</Directory>
</VirtualHost> 

//下载文件,并重命名为index.html 
[root@system1 ~]# wget -O /var/www/html/index.html http://server.group8.example.com/pub/system1.html
//开机自启动,重启
[root@system1 ~]# systemctl enable httpd
[root@system1 ~]# systemctl start httpd

//添加防火墙,重启防火墙
[root@system1 ~]# firewall-cmd --permanent --add-service=http
[root@system1 ~]# firewall-cmd --reload

//在system2上检测
[root@system2 ~]# curl system1.group8.example.com
Site:system1.group8.example.com

第十三题:配置安全web服务
为站点 http://system1.group8.example.com 配置TLS加密:
一个已签名证书从 http://server.group8.example.com/pub/tls/certs/system1.crt 获取
此证书的密钥从 http://server.group8.example.com/pub/tls/private/system1.key 获取
此证书的签名授权信息从 http://server.group8.example.com/pub/tls/certs/ssl-ca.crt 获取

//安装软件包
[root@system1 ~]# yum install mod_ssl -y
//编辑配置文件
[root@system1 ~]# vim /etc/httpd/conf.d/httpd-vhosts.conf
<VirtualHost *:443>
	DocumentRoot "/var/www/html"
	ServerName system1.group8.example.com
	<Directory "/var/www/html">
		<RequireAll>
			Require all granted
			Require not host .my133t.org
		</RequireAll>
	</Directory>
	SSLEngine on
	SSLProtocol all -SSLv2 -SSLv3
	SSLCertificateFile /etc/pki/tls/certs/system1.crt
	SSLCertificateKeyFile /etc/pki/tls/private/system1.key
	SSLCACertificateFile /etc/pki/tls/certs/ssl-ca.crt
</VirtualHost>
[root@system1 ~]# wget -O /etc/pki/tls/certs/system1.crt http://server.group8.example.com/pub/tls/certs/system1.crt
[root@system1 ~]# wget -O /etc/pki/tls/private/system1.key http://server.group8.example.com/pub/tls/private/system1.key
[root@system1 ~]# wget -O /etc/pki/tls/certs/ssl-ca.crt http://server.group8.example.com/pub/tls/certs/ssl-ca.crt
[root@system1 ~]# firewall-cmd --permanent --add-service=https
success
[root@system1 ~]# firewall-cmd --reload
success
[root@system1 ~]# systemctl restart httpd


[root@system2 ~]# curl -k https://system1.group8.example.com
Site:system1.group8.example.com

第十四题:配置虚拟主机
在 system1 上扩展您的web服务器,为站点 http://www8.group8.example.com 创建一个虚拟主机,然后执行下述步骤:
设置 DocumentRoot 为 /var/www/virtual
从 http://server.group8.example.com/pub/www8.html 下载文件重命名为 index.html ,不要对文件 index.html 的内容做任何修改
将文件 index.html 放到虚拟主机的 DocumentRoot 目录下
确保 andy 用户能够在 /var/www/virtual 目录下创建文件
注意:原站点 http://system1.group8.example.com 必须仍然能够访问,名称服务器 server.group8.example.com 已经提供对主机名 www8.group8.example.com 的域名解析

[root@system1 ~]# mkdir /var/www/virtual
[root@system1 ~]# wget -O /var/www/virtual/index.html http://server.group8.example.com/pub/www8.html
[root@system1 ~]# setfacl -m u:andy:rwx /var/www/virtual/
[root@system1 ~]# semanage fcontext -a -t "httpd_sys_content_t" '/var/www/virtual(/.*)?'
[root@system1 ~]# restorecon -Rv /var/www/virtual/
[root@system1 ~]# vim /etc/httpd/conf.d/httpd-vhosts.conf
[root@system1 ~]# cat /etc/httpd/conf.d/httpd-vhosts.conf 
<VirtualHost *:443>
	DocumentRoot "/var/www/html"
	ServerName system1.group8.example.com
	<Directory "/var/www/html">
		<RequireAll>
			Require all granted
			Require not host .my133t.org
		</RequireAll>
	</Directory>
	SSLEngine on
	SSLProtocol all -SSLv2 -SSLv3
	SSLCertificateFile /etc/pki/tls/certs/system1.crt
	SSLCertificateKeyFile /etc/pki/tls/private/system1.key
	SSLCACertificateFile /etc/pki/tls/certs/ssl-ca.crt
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/var/www/virtual"
	ServerName www8.group8.example.com
	<Directory "/var/www/virtual">
		<RequireAll>
			Require all granted
		</RequireAll>
	</Directory>
</VirtualHost>
[root@system1 ~]# systemctl restart httpd

第十五题:配置 web 内容的访问
在您的 system1 上的 web 服务器的 DocumentRoot 目录下,创建一个名为 private 的目录,要求如下:
从 http://server.group8.example.com/pub/private.html 下载一个文件副本到这个目录,并且重命名为 index.html
不要对这个文件的内容做任何修改
从 system1 上,任何人都可以浏览 private 的内容,但是从其它系统不能访问这个目录的内容。

//创建目录,下载文件副本
[root@system1 ~]# mkdir /var/www/html/private
[root@system1 ~]# mkdir /var/www/virtual/private
[root@system1 ~]# wget -O /var/www/html/private/index.html http://server.group8.example.com/pub/private.html

[root@system1 ~]# wget -O /var/www/virtual/private/index.html http://server.group8.example.com/pub/private.html
//编辑配置文件,在原有配置文件中添加内容 
[root@system1 ~]# vim /etc/httpd/conf.d/httpd-vhosts.conf

//在DocumentRoot "/var/www/virtual"中添加以下内容
<Directory "/var/www/virtual/private">
		Require all denied
		Require local
	</Directory>
//在DocumentRoot "/var/www/html"中添加以下内容
<Directory "/var/www/html/private">
		Require all denied
		Require local
	</Directory>
//重启服务
[root@system1 ~]# systemctl restart httpd

//测试
[root@system1 ~]# curl http://system1.group8.example.com/private/
This a private file,only for local access!
[root@system2 ~]# curl http://system1.group8.example.com/private/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /private/
on this server.</p>
</body></html>

第十六题:实现动态WEB内容
在 system1 上配置提供动态web内容,要求:
-动态内容由名为 wsgi.group8.exampl.com 的虚拟主机提供
-虚拟主机侦听在端口 8909
-从 http://server.group8.example.com/pub/webinfo.wsgi 下载一个脚本,然后放在适当的位置,无论如何不要修改此文件的内容
-客户端访问 http://wsi.group8.example.com :8909/ 时,应该接受到动态生成的web页面
-此 http:// wsgi.group8.example.com:8909/ 必须能被group8.example.com 域内的所有系统访问

//安装模块包
[root@system1 ~]# yum install mod_wsgi -y

//添加防火墙,重启防火墙,设定selinux,注册端口
[root@system1 ~]# firewall-cmd --permanent --add-port=8909/tcp
[root@system1 ~]# firewall-cmd --reload
[root@system1 ~]# semanage port -a -t http_port_t -p tcp 8909
//编辑配置文件
[root@system1 ~]# vim /etc/httpd/conf.d/httpd-vhosts.conf
Listen 8909  //监听端口
<VirtualHost *:8909>
	ServerName wsgi.group8.example.com
	WSGIScriptAlias / /var/www/html/webinfo.wsgi //把跟下内容映射到此文件中
</VirtualHost>

//重启测试
[root@system1 ~]# systemctl restart httpd
[root@system1 ~]# curl http://wsgi.group8.example.com:8909
This Dynamic WSGI Page Was Generated at: 
Mon Jun 1 15:27:21 2020

第十七题:创建一个脚本
在system1上创建一个名为 /root/foo.sh 的脚本,让其提供下列特性:
当运行 /root/foo.sh redhat ,输出为 fedora
当运行 /root/foo.sh fedora ,输出为 redhat
当没有任何参数或者参数不是 redhat 或者 fedora 时,其错误输出产生以下的信息:
/root/foo.sh redhat | fedora

//编辑文件,一定要.sh结束
[root@system1 ~]# vim /root/foo.sh
#!/bin/bash
case $1 in
	redhat)
	echo "fedora"
	;;
	fedora)
	echo "redhat"
	;;
	*)
	echo "/root/foo.sh redhat | fedora"
	;;
esac
//给权限,777也可以
[root@system1 ~]# chmod 755 /root/foo.sh
//测试
[root@system1 ~]# /root/foo.sh redhat
fedora
[root@system1 ~]# /root/foo.sh fedora
redhat
[root@system1 ~]# /root/foo.sh fed
/root/foo.sh redhat | fedora

第十八题:创建一个添加用户的脚本
在 system1 上创建一个脚本,名为 /root/batchusers, 此脚本能实现为系统 system1 创建本地用户,并且这些用户的用户名来自一个包含用户名列表的文件,同时满足以下要求在:
此脚本要求提供一个参数,此参数就是包含用户名列表的文件
如果没有提供参数,此脚本应该给出下面的提示信息 Usage: /root/batchusera userfile 然后退出并返回相应的值
创建的用户登录shell为 /bin/false
此脚本不需要为用户设置密码
您可以从下面的URL获取用户名列表作为测试用
http://server.group8.example.com/pub/userlist

[root@system1 ~]# vim  /root/batchusers.sh
#!/bin/bash
if [ $# -eq 1 ];then
	if [ -f "$1" ];then
		while read username;do
			useradd -s /bin/false $username &>/dev/null
		done < $1
	else
		echo "Input file not found"
		exit 1
	fi
else
	echo "Usage:/root/batchusers userfile"
	exit2
fi
[root@system1 ~]# chmod 755 /root/batchusers

//下载测试文件,进行测试
[root@system1 ~]# wget -O /root/userlist http://server.group8.example.com/pub/userlist
[root@system1 ~]# /root/batchusers userlist
[root@system1 ~]# cat /etc/passwd

有类似于这样的用户生成就说明操作正常
RHCE试题解析与踩雷分享_第1张图片第十九题:配置 ISCSI 服务端
配置 system1 提供一个ISCSI 服务 磁盘名为 iqn.2014-08.com.example.group8:system1,并符合下列要求:
服务端口号为 3260
iscsi_store 作其后端逻辑卷名称,其大小为3G
此服务只能被 system2.group8.example.com 访问

//安装软件并启动服务
[root@system1 ~]# yum install targetcli -y
[root@system1 ~]# systemctl enable target
[root@system1 ~]# systemctl start target
//添加防火墙
root@system1 ~]# firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.24.8.12/32" port port=3260 protocol=tcp accept'
success
[root@system1 ~]# firewall-cmd --reload

//分区修改类型为LVM,给3G大小,注意这里只描述了需要敲键盘的命令行,提示信息没有摘录
[root@system1 ~]# fdisk /dev/sda

Command (m for help): n

Select (default p): p
Partition number (3,4, default 3):回车
First sector (26626048-41943039, default 26626048):回车
(26626048-41943039, default 41943039): +3G

Command (m for help): t
Partition number (1-3, default 3):回车
Hex code (type L to list all codes): 8e

Command (m for help): w
//同步,创建逻辑卷
[root@system1 ~]# partprobe
[root@system1 ~]# pvcreate /dev/sda3
[root@system1 ~]# vgcreate iscsi_vg /dev/sda3
[root@system1 ~]# lvcreate -n iscsi_store -l 100%VG iscsi_vg
//配置iSCSI
[root@system1 ~]# targetcli

/> cd backstores/block
/backstores/block> create name=iscsi_store dev=/dev/iscsi_vg/iscsi_store
Created block storage object iscsi_store using /dev/iscsi_vg/iscsi_store.
/backstores/block> cd /
/> cd iscsi
/iscsi> create iqn.2014-08.com.example.group8:system1

/iscsi> cd iqn.2014-08.com.example.group8:system1/tpg1/
/iscsi/iqn.20...:system1/tpg1> set attribute authentication=0
/iscsi/iqn.20...:system1/tpg1> set attribute generate_node_acls=0

//如果报错,就说明有些版本已经默认添加了端口,忽略报错内容
/iscsi/iqn.20...:system1/tpg1>  portals/ create 172.24.8.11 3260

/iscsi/iqn.20...:system1/tpg1> cd acls
/iscsi/iqn.20...em1/tpg1/acls> create iqn.2014-08.com.example.group8:system2

/iscsi/iqn.20...em1/tpg1/acls> cd ../luns
/iscsi/iqn.20...em1/tpg1/luns> create /backstores/block/iscsi_store

/iscsi/iqn.20...em1/tpg1/luns> cd /
/> saveconfig

/> exit

参考配置内容,可以ls查看对照
RHCE试题解析与踩雷分享_第2张图片
第二十题:配置iSCSISI 的客户端
配置 system2 使其能连接在 system1 上提供的 iqn.2014-08.example.group8:system1,并符合以下要求:
iSCISI 设备在系统启动期间自动加载
块设备 iSCISI 上包含一个大小为 2100 MiB 的分区,并格式化为 ext4
此分区挂载在 /mnt/data 上,同时在系统启动期间自动挂载

//安装客户端软件包
[root@system2 ~]# yum install iscsi-initiator-utils.i686 -y
//配置客户端名字
[root@system2 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2014-08.com.example.group8:system2
//服务设置开机自启动,再重启服务
[root@system2 ~]# systemctl enable iscsi iscsid
[root@system2 ~]# systemctl restart iscsi iscsid
//发现target并登录,这里注意一定要有成功提示的信息,未能发现一般是因为服务端的端口号监听,未能登录一般是因为服务端配置出现问题,可返回服务端检查
[root@system2 ~]# iscsiadm -m discovery -t st -p 172.24.8.11
172.24.8.11:3260,1 iqn.2014-08.com.example.group8:system1
[root@system2 ~]# iscsiadm -m discovery -t st -p 172.24.8.11 -l
172.24.8.11:3260,1 iqn.2014-08.com.example.group8:system1
Logging in to [iface: default, target: iqn.2014-08.com.example.group8:system1, portal: 172.24.8.11,3260] (multiple)
Login to [iface: default, target: iqn.2014-08.com.example.group8:system1, portal: 172.24.8.11,3260] successful.
//查看服务端新创建的分区名,这里是sdb
[root@system2 ~]# lsblk
//创建新的分区,挂载
[root@system2 ~]# fdisk /dev/sdb

RHCE试题解析与踩雷分享_第3张图片

//再去格式化为题目要求文件类型,创建挂载点目录,挂载,注意要田间_netdev参数
[root@system2 ~]# mkfs.ext4 /dev/sdb1
[root@system2 ~]# mkdir /mnt/data
[root@system2 ~]# blkid  //查看UUID
[root@system2 ~]# vim /etc/fstab
UUID=442250bf-36c4-4e78-a63c-a676fc4235f4  /mnt/data ext4  defaults,_netdev 0 0
//测试查看是否挂载成功
[root@system2 ~]# mount -a
[root@system2 ~]# df -h

第二十一题:配置一个数据库
在 system1上创建一个 Maria DB 数据库,名为 Contacts,要求:
数据库应该包含来自数据库复制的内容,复制文件的URL为 http://server.group8.example.com/pub/users.mdb ,数据库只能被 localhost 访问
除了 root 用户,此数据库只能被用户 Marry 查询,此用户密码为 redhat
root 用户的数据库密码为 redhat ,同时不允许空密码登录

//安装数据库,启服务
[root@system1 ~]# yum install mariadb* -y
[root@system1 ~]# systemctl enable mariadb
[root@system1 ~]# systemctl restart mariadb
//设置数据库密码,初始化数据库,密码哪里配置题目要求的密码,无要求就写上root登录密码,其他直接回车即可
[root@system1 ~]# mysql_secure_installation
//导入数据库
[root@system1 ~]# wget -O /root/users.mdb http://server.group8.example.com/pub/users.mdb
//root用户登录数据库
[root@system1 ~]# mysql -u root -predhat
//创建数据库名
MariaDB [(none)]> create database Contacts;
//请求修改数据库,使用该数据库
MariaDB [(none)]> use Contacts;
//在此目录中引出数据库
MariaDB [Contacts]> source /root/users.mdb
//修改权限,给用户Marry查询的权限
MariaDB [Contacts]> grant select on Contacts.* to Marry@localhost identified by 'redhat';
//这里先不需要退出,以备下一题的查询

第二十二题:数据库查询
在 system1 上使用数据库 Contacts , 并使用相应的 SQL 查询以回答下列问题:
1:密码是 fedora 的人的名字是什么?
2:有多少人的姓名是 John , 同时居住在 Santa Clara?

//先查看此数据库的表与表中的内容,记住行列名与表名
MariaDB [Contacts]>show tables;//列出数据库中的各表名
MariaDB [Contacts]>select * from u_name;//查看u_name表中的行列信息
MariaDB [Contacts]>select * from u_passwd;//查看u_passwd表中的行列信息
MariaDB [Contacts]>select * from u_loc;//查看u_loc表中的行列信息
MariaDB [Contacts]> select u_name.firstname from u_name,u_passwd where u_name.userid = u_passwd.uid and u_passwd.password = 'fedora';
+-----------+
| firstname |
+-----------+
| si        |
+-----------+
1 row in set (0.00 sec)

MariaDB [Contacts]> select count(*) from u_name,u_loc where u_name.userid = u_loc.uid and u_name.firstname = 'John' and u_loc.location = 'Santa Clara';
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (0.00 sec)
//这里查询结束之后再退出
MariaDB [Contacts]> quit
  • 到这儿题目就完成了,需要重启虚拟机,重新检查所有配置是否正确,重启时不建议reboot,先poweroff system2,再poweroff system1 ,之后开的时候先开system 1 再开system2,这样是最保险的做法,当然你也可以俩台虚拟机都reboot,可能会比较慢,请耐心等待,但愿不会死机~

敲黑板:注意smb,nfs, iscsi 这三个服务,踩雷经验告诉我你会经常在这三个题上出幺蛾子~

sum的安全上下文配置一定不要忘记,挂载时的sec=mtlmssp不要忘记

nfs系统自带的服务软件包,不需要安装,不需要安装,不需要安装!!!安全上下文的-R要牢记

iscsi防火墙的soure address /32记住,必须是/32,如果是/24就会被该网段的其他主机访问到,target配置里边的端口号如果没有一定要监听,ip后边跟上端口号: portals/ create 172.24.8.11 3260

不管你考不考试,感谢支持,也没什么礼物可送,那就祝你万事胜意

你可能感兴趣的:(Linux)