下午RHCE7 备考
• 下午RHCE考试环境说明
• 题量比较大,需要将题库练熟练!
• 每人一台物理机,内建两个虚拟机
• 下午考试不需要配置主机名和IP地址,可以直接看考题
• RHCE-Server1的IP地址是:172.24.8.11/24
• RHCE-Server2的IP地址是:172.24.8.12/24
• RHCE第一题:设定SELinux
在 system1 和 system2 上要求 SELinux 的工作模式为 enforcing :
要求系统重启后依然生效。
• 第一步:读题
• 两个虚拟机上都要配置SELinux
• 步骤与上午的考试一模一样
• 第二步:【在 system1 和 system2 上】修改SELinux主配置文件,使重启有效
• $ sed -ri 's/^(SELINUX=).*/\1enforcing/' /etc/selinux/config
• 第三步:【在 system1 和 system2 上】修改当前环境的SELinux工作模式,使当前有效
• $ setenforce 1
• 第四步:【在 system1 和 system2 上】查看SELinux状态,验证修改操作是否成功
Current mode
Mode from config file
• $ sestatus
• RHCE第二题:配置防火墙
请按下列要求在 system1 和 system2 上设定防火墙系统:
允许 group8.example.com 域的客户对 system1 和 system2 进行 ssh 访问。
禁止 my133t.org 域的客户对 system1 和 system2 进行 ssh 访问。
备注: my133t.org 是在 172.13.8.0/24 网络
• 第一步:读题
• 两个虚拟机上都要配置firewalld规则
• “允许”不等于“仅允许”
• 如果选择firewalld来实现配置,则必须屏蔽iptables的服务条目(禁止iptables开机启动)
• 防火墙规则设置:允许所有的域,然后拒绝指定的域
• 第二步:【在 system1 和 system2 上】禁止iptables开机启动,并且立即屏蔽当前的iptables服务条目
• $ systemctl mask iptables
• $ systemctl mask ip6tables
• $ iptables -F
• $ iptables -X
• $ iptables -Z
• 第三步:【在 system1 和 system2 上】设置firewalld为开机启动,并立即启动firewalld,查看firewalld是否已经存在服务条目(如果已经存在firewalld服务条目,清除它!)
• $ systemctl enable firewalld
• $ systemctl start firewalld
• $ firewall-cmd --list-all
• 第四步:【在 system1 和 system2 上】添加“允许所有域对本机进行ssh访问”的防火墙规则(service规则;相当于白名单)
• $ firewall-cmd --permanent --add-service ssh
• 第五步:【在 system1 和 system2 上】添加“拒绝 172.13.8.0/24 网段所有主机对本机进行ssh访问”的防火墙规则(rich规则;相当于黑名单)
• $ firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.13.8.0/24 service name=ssh reject'
• 第六步:【在 system1 和 system2 上】重新载入本机firewalld服务条目,使得新配置的防火墙规则立即生效
• $ firewall-cmd --reload
• 第七步:【在 system1 和 system2 上】查看新配置的防火墙规则是否已经生效
• $ firewall-cmd --list-all
• RHCE第三题:自定义用户环境
在系统system1和system2上创建自定义命令为qstat ,要求:
此自定义命令将执行以下命令:/bin/ps -Ao pid,tt,user,fname,rsz
此命令对系统中的所有用户有效
• 第一步:读题
• 可以使用命令别名实现
• 要使此命令别名对所有用户有效,则必须把命令别名的定义写入全局bashrc配置文件中
• 命令别名的定义建议放在bashrc文本内容的最后一行,千万不可以放在if条件判断语句中!
• 两个虚拟机上都要配置命令别名
• 第二步:【在 system1 和 system2 上】在 /etc/bashrc 全局配置文件的末尾追加一行命令别名定义
• $ cat >> /etc/bashrc << EOF
• alias qstat='/bin/ps -Ao pid,tt,user,fname,rsz'
• EOF
• 第三步:【在 system1 和 system2 上】使全局配置文件对当前Bash进程立即生效
• $ source /etc/bashrc
• 第四题:【在 system1 和 system2 上】查看新添加的命令别名配置是否生效
• $ qstat
• $ alias | grep qstat
• RHCE第四题:配置端口转发
在系统 system1 设定端口转发,要求:
在172.24.8.0/24网络中的系统,访问system1的本地端口 5423 将被转发到 80
此设置必须永久有效
• 第一步:读题
• 本题的所有操作必须在 system1 上配置
• “此设置必须永久有效”,必须写入配置文件
• 注意:“访问system1的本地端口 5423 将被转发到 80”,有可能是TCP通道、也有可能是UDP通道,必须考虑周全!
• 第二步:【在 system1 上】添加防火墙的rich规则,将TCP的5423和UDP的5423访问全部转发到80
• $ 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'
• $ 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'
• 第三步:【在 system1 上】重新加载防火墙服务条目
• $ firewall-cmd --reload
• 第四步:【在 system1 上】查看配置操作是否生效
• $ firewall-cmd --list-all
• 效果图
• RHCE第五题:配置链路聚合
在system1和system2之间按以下要求设定一个链路: 此链路使用接口eth1和eth2 此链路在一个接口失效时仍然能工作 此链路在system1使用下面的地址172.16.3.40/255.255.255.0 此链路在system2使用下面的地址172.16.3.45/255.255.255.0 此链路在系统重启之后依然保持正常状态
• 第一步:读题
• 两块网卡在物理层必须处于同一网络【实验中两个网卡在物理层均为“仅主机模式”】
• 第二步:【在 system1 和 system2 上】创建网卡绑定
• $ nmcli connection add type team con-name team0 ifname team0 config '{"runner":{"name":"activebackup"}}'
• 第三步:【在 system1 上】指定IPv4地址
• $ nmcli connection modify team0 ipv4.addresses 172.16.3.40/24 ipv4.method manual connection.autoconnect yes
• 第四步:【在 system2 上】指定IPv4地址
• $ nmcli connection modify team0 ipv4.addresses 172.16.3.45/24 ipv4.method manual connection.autoconnect yes
• 第五步:【在 system1 和 system2 上】将两块网卡加入到网卡绑定
• $ nmcli connection add type team-slave con-name team0-port1 ifname eth1 master team0
• $ nmcli connection add type team-slave con-name team0-port2 ifname eth2 master team0
• 第六步:【在 system1 和 system2 上】先启动两个网络接口,然后再启动网卡绑定
• $ { nmcli connection up team0-port1; nmcli connection up team0-port2; nmcli connection up team0; }
• 第七步:【在 system1 和 system2 上】验证网卡绑定的状态是否启用
• $ { teamdctl team0 state; ifconfig team0; }
• 第八步:【在 system1 上】测试本机的网卡绑定能否连通另外一台虚拟机的网卡绑定
• $ ping 172.16.3.45
• 第九步:【在 system2 上】测试本机的网卡绑定能否连通另外一台虚拟机的网卡绑定
• $ ping 172.16.3.40
• RHCE第六题:配置IPv6地址
在考试系统上设定接口eth0使用下列IPV6地址:
system1上的地址应该是2003:ac18::305/64
system2上的地址应该是2003:ac18::30a/64
两个系统必须能与网络2003:ac18/64内的系统通信
地址必须在重启后依然生效
两个系统必须保持当前的IPV4地址并能通信
• 第一步:读题
• 考试的时候要看清楚是对哪一个网卡做IPv6设置!
• 注意两台虚拟机的IPv6地址要对应,不要弄错!
• 第二步:【在 system1 上】使用命令行方式配置eth0的IPv6地址
• $ nmcli connection modify eth0 ipv6.addresses 2003:ac18::305/64 ipv6.method manual connection.autoconnect yes
• 第三步:【在 system2 上】使用命令行方式配置eth0的IPv6地址
• $ nmcli connection modify eth0 ipv6.addresses 2003:ac18::30a/64 ipv6.method manual connection.autoconnect yes
• 第四步:【在 system1 和 system2 上】重启eth0网卡
• $ { nmcli connection down eth0; nmcli connection up eth0; }
• 第五步:【在 system1 上】查看IPv6地址设置是否生效,然后ping 另外一台主机的IPv6地址,测试是否可以连通
• $ ifconfig eth0
• $ ping6 2003:ac18::30a
• 第六步:【在 system2 上】查看IPv6地址设置是否生效,然后ping 另外一台主机的IPv6地址,测试是否可以连通
• $ ifconfig eth0
• $ ping6 2003:ac18::305
• RHCE第七题:配置本地邮件服务
在系统 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
• 第一步:读题
• 系统默认已经安装了Postfix邮件服务器(如果没有装,手动装上即可)
• 立即启动邮件服务并使邮件服务在下一次系统重启后仍然生效
• 设置邮件服务监听在本地的25端口上,(只接收来自本地发来的邮件,不接收外部发来的邮件)
• 重写本地邮件显示的来源域,使得从本地两个虚拟机系统上发送的邮件都显示为“来自于 server.group8.example.com”
• 设置邮件中继服务器,使得从本地两个虚拟机系统上发送的任何邮件都会自动路由到 mail.group8.example.com
• 在两个虚拟机上都要做配置
• 第二步:【在 system1 和 system2 上】安装Postfix邮件服务器,立即启动邮件服务并使邮件服务在下一次系统重启后仍然生效
• $ rpm -qa postfix
• $ systemctl enable postfix
• $ systemctl start postfix
• 第三步:【在 system1 和 system2 上】设置邮件服务监听在本地的25端口上,(只接收来自本地发来的邮件,不接收外部发来的邮件)
• $ postconf -e "inet_interfaces=loopback-only"
# 注意:此处是 - 横杠连接符,不是 _ 下划线!
• $ postconf -e "mydestination="
• 第四步:【在 system1 和 system2 上】重写本地邮件显示的来源域,使得从本地两个虚拟机系统上发送的邮件都显示为“来自于 server.group8.example.com”
• $ postconf -e "myorigin=server.group8.example.com"
• $ postconf -e "mydomain=server.group8.example.com"
• 第五步:【在 system1 和 system2 上】设置邮件中继服务器,使得从本地两个虚拟机系统上发送的任何邮件都会自动路由到 mail.group8.example.com
• $ postconf -e "relayhost=mail.group8.example.com"
• 第六步:【在 system1 和 system2 上】立即重启邮件服务,使得上面的配置立即生效
• $ systemctl restart postfix
• 第七步:【在 system1 和 system2 上】发送测试邮件到本地 dave 用户
• $ mail -s "Test Mail" dave << EOF
• This is a test mail from `hostname`
• EOF
• 第八步:【在 system1 和 system2 上】通过查看测试邮件来判断本地的邮件服务配置是否成功
• curl http://server.group8.example.com/pub/received_mail/8
• 备注:多试几次该命令,知道可以看到邮件为止
• RHCE第八题:通过SMB共享目录
在 system1 上配置SMB服务 ,要求:
您的 SMB 服务器必须是 STAFF 工作组的一个成员
共享 /common 目录,共享名必须为 common
只有 group8.example.com 域内的客户端可以访问common共享
common 必须是可以浏览的
用户 andy 必须能够读取共享中的内容,如果需要的话,验证密码是redhat
• 第一步:读题
• 隐藏条件:需要自行设置yum仓库配置文件!
• 立即启动SMB服务并使SMB服务在下一次系统重启后仍然生效
• “group8.example.com域”的网段地址是 172.24.8.0/24
在防火墙和服务自身的访问控制的条目配置时,一定要写IP地址!
• 只允许 172.24.8.0/24 网段内的主机访问 common 共享
• 本题的所有设置操作必须在 system1 上配置!
(除了配置yum仓库的操作)
• 第二步:【在 system1 和 system2 上】创建yum仓库配置文件
• $ cat > /etc/yum.repos.d/base.repo << EOF
• [base]
• name=redhat
• baseurl=http://server.group8.example.com/yum/
• gpgcheck=0
• EOF
• 第三步:【在 system1 和 system2 上】清理yum缓存并重新获取新的metadata
• $ { yum clean all; yum repolist; }
• 第四步:【在 system1 上】安装Samba服务端和Samba客户端,立即启动SMB服务并使SMB服务在下一次系统重启后仍然生效
• $ yum install -y samba samba-client
• $ systemctl enable smb nmb
• $ systemctl start smb nmb
• 第五步:【在 system1 上】创建一个空目录 /common ,并把目录的传统权限设为 777 ,方便作为 Samba 服务的共享目录使用
具体的用户读写权限控制由Samba服务配置文件来设定
• $ mkdir /common
• $ chmod 777 /common/
• 第六步:【在 system1 上】编辑SMB服务的主配置文件,将Samba服务器的所属组更改为 STAFF 工作组
• $ grep workgroup /etc/samba/smb.conf
• $ sed -ri 's/(workgroup = )MYGROUP/\1STAFF/' /etc/samba/smb.conf
• $ grep workgroup /etc/samba/smb.conf
• 第七步:【在 system1 上】编辑SMB服务的主配置文件,添加一段共享名为 common 的配置项
注意:只允许 172.24.8.0/24 网段内的主机访问 common 共享
172.24.8.0/24 网段 在此处写作 172.24.8.
• $ cat >> /etc/samba/smb.conf << EOF
• [common]
# 共享名
• comment = hello rhce exam
# 描述
• path = /common/
# 共享目录路径
• writable = no
# 共享目录设置为不可写(只读)
• hosts allow = 172.24.8.
# 允许 group8.example.com 域内的机器访问,强烈建议写成IP地址
# 网段:172.24.8.0/24
# 注意:IP网段比较奇特!
• browseable = yes
# 共享目录设置为可浏览
• EOF
• 第八步:【在 system1 上】重启SMB服务
• $ systemctl restart smb nmb
• 第九步:【在 system1 上】在firewalld防火墙服务添加“允许Samba服务通过防火墙”的规则,并重读firewalld服务条目
• $ firewall-cmd --permanent --add-service samba
• $ firewall-cmd --reload
• $ firewall-cmd --list-all
• 第十步:【在 system1 上】设置共享目录的context值
• $ semanage fcontext -a -t "samba_share_t" '/common(/.*)?'
# 更改共享目录的SELinux默认值,方便使用restore还原context值
# 建议使用这种比较保险的方法!
• $ restorecon -Rv /common/
# 还原context值
• $ ls -Zd /common/
# 验证context值是否已经设置
• 第十一步:【在 system1 上】创建用于访问共享的用户,并且设置共享访问密码
• $ smbpasswd -a andy
# 注意:此处的密码必须手动键入,无法通过重定向导入!
• redhat
• redhat
• 第十二步:【在 system2 上】安装共享服务客户端工具,以方便测试用
• $ yum install -y samba-client
• 第十三步:【在 system2 上】以匿名方式列出共享目录的描述信息
• $ smbclient -L //172.24.8.11
# 遇到要输入root访问密码时直接回车,即可以匿名用户访问共享
• [Enter]
• 第十四步:【在 system2 上】以 andy 身份访问共享目录
• $ smbclient //172.24.8.11/common/ -U andy
# 遇到要输入andy访问密码,请手动键入redhat
• redhat
• ls
• quit
# 按 Ctrl+d 等效
• 第十五步:【在 system1 上】验证samba共享服务是否已经配置成功
• $ systemctl is-active smb nmb
• $ systemctl is-enabled smb nmb
• RHCE第九题:配置多用户SMB挂载【有坑!】
在 system1 通过 SMB 共享目录 /devops ,并满足下列要求:
共享名为 devops
共享目录 devops 只能 group8.example.com 域中的客户端使用
共享目录 devops 必须可以被浏览
用户 silene 必须能以读的方式访问此共享,访问密码是redhat
用户 akira 必须能以读写的方式访问此共享,访问密码是redhat
此共享永久挂载在 system2.group8.example.com 上的 /mnt/dev 目录,并使用用户 silene 作为认证任何用户,可以通过用户 akira 来临时获取写的权限
• 第一步:读题
• 由系统开机自动挂载共享目录
• 不同用户访问共享目录会有不同的权限
• 第二步:【在 system1 上】创建共享目录,并且为 akira 用户设置可读写的ACL权限
• $ mkdir /devops
• $ setfacl -m u:akira:rwx /devops/
• 第三步:【在 system1 上】设置共享目录的SELinux context值
• $ semanage fcontext -a -t "samba_share_t" '/devops(/.*)?'
# 更改共享目录的SELinux默认值,方便使用restore还原context值
# 建议使用这种比较保险的方法!
• $ restorecon -Rv /devops/
# 还原context值
• $ ls -Zd /devops/
# 验证context值是否已经设置
• 第四步:【在 system1 上】编辑SMB服务的主配置文件,添加一段共享名为 devops 的配置项
• $ cat >> /etc/samba/smb.conf << EOF
• [devops]
• comment = Magedu devops
# 描述
• path = /devops/
# 共享目录
• public = yes
# 设置为公开
• hosts allow = 172.24.8.
# 仅允许 172.24.8.0/24 网段内的主机访问
• writable = no
# 拒绝所有用户的写入操作
• write list = akira
# 仅允许 akira 用户的写入操作
• browseable = yes
# 设置为可浏览
• EOF
• 第五步:【在 system1 上】添加两个共享访问用户,并设置密码
• $ smbpasswd -a silene
• redhat
# 输入两遍密码
• redhat
• $ smbpasswd -a akira
• redhat
# 输入两遍密码
• redhat
• 第六步:【在 system1 上】重启smb共享服务
• $ systemctl restart smb nmb
• 第七步:【在 system2 上】以 akira 身份访问共享目录,测试目录是否可读写
• $ smbclient //172.24.8.11/devops/ -U akira
# 遇到要输入andy访问密码,请手动键入redhat
• redhat
• put anaconda-ks.cfg
• ls
• quit
• 第八步:【在 system2 上】安装微软CIFS协议程序包,使 system2 支持CIFS挂载
• $ yum install -y cifs-utils
• 第九步:【在 system2 上】创建用于挂载的目录
• $ mkdir /mnt/dev/
• 第十步:【在 system2 上】在“文件系统开机自动挂载”配置文件追加一个新项
使用只读用户做自动挂载
ntlmssp 全称: NT LAN Manager (NTLM) Security Support Provider
• $ cat >> /etc/fstab << EOF
• //172.24.8.11/devops/ /mnt/dev/ cifs defaults,multiuser,username=silene,password=redhat,sec=ntlmssp 0 0
• EOF
• 第十一步:【在 system2 上】使“文件系统开机自动挂载”配置文件中所有的挂载关系立即生效
• $ mount -a
• 第十二步:【在 system2 上】测试 silene 用户对挂载的共享目录是否仅有只读权限
• $ su - silene
• $ cd /mnt/dev/
• $ cifscreds add 172.24.8.11
# 必须先通过服务器的授权验证
# 注意:IP地址不要写错!
• redhat
# 手动输入验证密码
• $ ls -l
• $ touch silenefile
# 没有写权限则配置成功
• $ exit
• 第十三步:【在 system2 上】测试 akira 用户对挂载的共享目录是否具有可读可写权限
• $ su - akira
• $ cd /mnt/dev/
• $ cifscreds add 172.24.8.11
# 必须先通过服务器的授权验证
# 注意:IP地址不要写错!
• redhat
# 手动输入验证密码
• $ ls -l
• $ echo hello > akirafile
# 可以写入文件则配置成功
• $ cat akirafile
• $ exit
• RHCE第十题:配置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
• 第一步:读题
• group8.example.com 域的IP地址:172.24.8.0/24
• Kerberos安全加密:krb5p
• 所有操作都在system1上完整
• 默认都已经安装 nfs-utils 的啦,上来不管三七二十一,直接改配置文件!!
• 第二步:【在 system1 上】编辑NFS主配置文件
• $ grep RPCNFSDARGS /etc/sysconfig/nfs
• $ sed -ri 's/(RPCNFSDARGS=).*/\1"-V 4.2"/' /etc/sysconfig/nfs
# 注意:版本的 V 前面带有一个横杠!!!
# 是 -V 4.2
• 第三步:【在 system1 上】添加防火墙规则,允许NFS服务的访问
• $ firewall-cmd --permanent --add-service nfs
• $ firewall-cmd --permanent --add-service rpc-bind
• $ firewall-cmd --permanent --add-service mountd
# 注意:服务名mount的守护进程,只带一个d,不带e!
• $ firewall-cmd --reload
• $ firewall-cmd --list-all
• 第四步:【在 system1 上】创建共享目录,并修改目录的SELinux context值
• $ mkdir -pv /public /protected/project
• $ chown andres /protected/project/
# 必须更改 /protecte/project 的属主为 andres ,否则 andres 用户无法在此目录下创建文件
• $ semanage fcontext -a -t "public_content_t" '/public(/.*)?'
• $ semanage fcontext -a -t "public_content_t" '/protected(/.*)?'
• $ semanage fcontext -a -t "public_content_t" '/protected/project(/.*)?'
• $ restorecon -Rv /public/ /protected/ /protected/project/
• $ ls -Zd /public/ /protected/ /protected/project/
• 第五步:【在 system1 上】下载证书
• $ wget -O /etc/krb5.keytab http://server.group8.example.com/pub/keytabs/system1.keytab
-O 指明下载到哪里
• $ ls -l /etc/krb5.keytab
• 第六步:【在 system1 上】编辑NFS服务的配置文件
• $ cat >> /etc/exports << EOF
• /public/ *.group8.example.com(ro,sec=sys,sync)
• /protected/ *.group8.example.com(rw,sec=krb5p,sync)
• EOF
• 第七步:【在 system1 上】启动NFS服务,并设置开机自启动
• $ systemctl enable nfs-server nfs-secure-server
•
• 第八步:【在 system1 上】刷新共享目录信息
• $ exportfs -ra
• $ exportfs
• 第九步:【在 system1 上】手动同步时间两次!
• $ ntpdate server.group8.example.com
• $ ntpdate server.group8.example.com
• RHCE第十一题:挂载一个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 上创建文件
这些文件系统在系统启动时自动挂载
• 第一步:读题
• 第二步:【在 system2 上】手动同步时间两次!
• $ ntpdate server.group8.example.com
• $ ntpdate server.group8.example.com
• 第三步:【在 system2 上】
• $ mkdir -pv /mnt/nfs{mount,secure}
• 第四步:【在 system2 上】下载证书
• $ wget -O /etc/krb5.keytab http://server.group8.example.com/pub/keytabs/system2.keytab
• $ ls -l /etc/krb5.keytab
• 第五步:【在 system2 上】
• $ cat >> /etc/fstab << EOF
• 172.24.8.11:/public/ /mnt/nfsmount/ nfs defaults 0 0
• 172.24.8.11:/protected/ /mnt/nfssecure/ nfs defaults,sec=krb5p,v4.2 0 0
• EOF
• 第六步:【在 system2 上】
• $ systemctl enable nfs-secure
• $ systemctl start nfs-secure
• 第七步:【在 system2 上】
• $ mount -a
• $ df -h
• 第八步:【在 system2 上】验证写入操作,看andres用户能否写入文件
• $ su - andres
• $ kinit
# 获取票
• redhat
# 输入验证密码
• $ klist
# 查看获取到的票
• $ cd /mnt/nfssecure/project/
• $ touch hello
• $ ls -l
• $ exit
• RHCE第十二题:实现一个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服务
• 第一步:读题
• 第二步:【在 system1 上】
• $ yum install -y httpd
• $ systemctl enable httpd
• $ systemctl start httpd
• 第三步:【在 system1 上】
• $ cat >> /etc/httpd/conf.d/httpd-vhosts.conf << EOF
• <VirtualHost *:80>
• DocumentRoot "/var/www/html/"
• ServerName system1.group8.example.com
• <Directory "/var/www/html/">
• <RequireAll>
• Require all granted
• Require not host .my133.org
# 注意:此行的 not host 与 .my133.org 之间至少有一个空格
• RequireAll>
• Directory>
• VirtualHost>
• EOF
• 第四步:【在 system1 上】
• $ wget -O /var/www/html/index.html http://server.group8.example.com/pub/system1.html
• $ ls -Z /var/www/html/index.html
# 查看SELinux的context值是否为 httpd_sys_content_t
• 第五步:【在 system1 上】重启服务
• $ systemctl restart httpd
• $ ss -ntlp | grep :80
• 第六步:【在 system1 上】添加防火墙规则,允许http服务访问
• $ firewall-cmd --permanent --add-service http
• $ firewall-cmd --reload
• $ firewall-cmd --list-all
• 第七步:【在 system2 上】测试网页访问
• $ curl system1.group8.example.com
• RHCE第十三题:配置安全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 获取
• 第一步:读题
• 第二步:【在 system1 上】
• $ yum install -y mod_ssl
• 第三步:【在 system1 上】
• $ cat >> /etc/httpd/conf.d/httpd-vhosts.conf << EOF
• <VirtualHost *:443>
• DocumentRoot "/var/www/html"
• ServerName system1.group8.example.com
• <Directory "/var/www/html/">
• <RequireAll>
• Require all granted
• Require not host .my133.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>
• EOF
• 第四步:【在 system1 上】下载证书
• $ wget -O /etc/pki/tls/certs/system1.crt http://server.group8.example.com/pub/tls/certs/system1.crt
• $ wget -O /etc/pki/tls/private/system1.key http://server.group8.example.com/pub/tls/private/system1.key
• $ wget -O /etc/pki/tls/certs/ssl-ca.crt http://server.group8.example.com/pub/tls/certs/ssl-ca.crt
• $ ls -l /etc/pki/tls/certs/ssl-ca.crt /etc/pki/tls/private/system1.key /etc/pki/tls/certs/ssl-ca.crt
• 第五题:【在 system1 上】添加防火墙规则,允许https访问
• $ firewall-cmd --permanent --add-service https
• $ firewall-cmd --reload
• $ firewall-cmd --list-all
• 第六步:【在 system1 上】重启Apache服务
• $ systemctl restart httpd
• 第七步:【在 system2 上】测试https网页访问
• $ curl -k https://system1.group8.example.com
• RHCE第十四题:配置虚拟主机
在 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 的域名解析
• 第一步:读题
• 第二步:【在 system1 上】
• $ mkdir /var/www/virtual
• $ cd /var/www/virtual/
• $ wget -O /var/www/virtual/index.html http://server.group8.example.com/pub/www8.html
• $ ls -Z
• 第三步:【在 system1 上】
• $ setfacl -m u:andy:rwx /var/www/virtual/
• 第四步:【在 system1 上】
• $ cd /etc/httpd/conf.d/
• $ cat >> httpd-vhosts.conf << EOF
• <VirtualHost *:80>
• DocumentRoot "/var/www/virtual"
• ServerName www8.group8.example.com
• <Directory "/var/www/virtual/">
• <RequireAll>
• Require all granted
• RequireAll>
• Directory>
• VirtualHost>
• EOF
• 第五步:【在 system1 上】
• $ systemctl restart httpd
• 第六步:【在 system2 上】测试网站是否可被访问,必须保证前面两个网站依然能被正常访问!
• $ curl system1.group8.example.com
• $ curl -k https://system1.group8.example.com
• $ curl www8.group8.example.com
• RHCE第十五题:配置Web内容的访问
在您的 system1 上的 web 服务器的 DocumentRoot 目录下,创建一个名为 private 的目录,要求如下:
从 http://server.group8.example.com/pub/private.html 下载一个文件副本到这个目录,并且重命名为 index.html
不要对这个文件的内容做任何修改
从 system1 上,任何人都可以浏览 private 的内容,但是从其它系统不能访问这个目录的内容。
• 第一步:读题
• 第二步:【在 system1 上】
• $ mkdir /var/www/{html,virtual}/private
• $ wget -O /var/www/html/private/index.html http://server.group8.example.com/pub/private.html
• $ wget -O /var/www/virtual/private/index.html http://server.group8.example.com/pub/private.html
• $ ls -Z /var/www/{html,virtual}/private/index.html
• 第三步:【在 system1 上】
• $ cd /etc/httpd/conf.d/
• $ cat > httpd-vhosts.conf << EOF
• <VirtualHost *:80>
• DocumentRoot "/var/www/html"
• ServerName system1.group8.example.com
• <Directory "/var/www/html">
• <RequireAll>
• Require all granted
• Require not host .my133t.org
• RequireAll>
• Directory>
• <Directory "/var/www/html/private">
• <RequireAll>
• Require local
• RequireAll>
• Directory>
• VirtualHost>
• <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>
• <Directory "/var/www/virtual/private">
• <RequireAll>
• Require local
• RequireAll>
• Directory>
• VirtualHost>
• EOF
• 第四步:【在 system1 上】重启Apache服务
• $ systemctl restart httpd
• 第五步:【在 system1 上】在本地访问测试
• $ curl http://system1.group8.example.com/private/
• $ curl http://www8.group8.example.com/private/
• 第六步:【在 system2 上】在非本地访问测试
• $ curl http://system1.group8.example.com/private/
• $ curl http://www8.group8.example.com/private/
• RHCE第十六题:实现动态Web内容
在 system1 上配置提供动态web内容,要求:
动态内容由名为 wsgi.group8.example.com 的虚拟主机提供
虚拟主机侦听在端口 8909
从 http://server.group8.example.com/pub/webinfo.wsgi 下载一个脚本,然后放在适当的位置,无论如何不要求修改此文件的内容
客户端访问 http://wsgi.group8.example.com:8909/ 时,应该接收到动态生成的web页面
此 http://wsgi.group8.example.com:8909/ 必须能被 group8.example.com 域内的所有系统访问
• 第一步:读题
• 第二步:【在 system1 上】
• $ cd /etc/httpd/conf.d/
• $ cat >> httpd-vhosts.conf << EOF
• Listen 8909
• <VirtualHost *:8909>
• ServerName wsgi.group8.example.com
• WSGIScriptAlias / /var/www/html/webinfo.wsgi
• VirtualHost>
• EOF
• 第三步:【在 system1 上】下载WSGI脚本文件到站点根目录下
• $ wget -O /var/www/html/webinfo.wsgi http://server.group8.example.com/pub/webinfo.wsgi
• 第四步:【在 system1 上】安装WSGI模块
• $ yum install -y mod_wsgi
• 第五步:【在 system1 上】添加防火墙规则,允许TCP 8909端口的访问
• $ firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 port port=8909 protocol=tcp accept'
• 第六步:【在 system1 上】在SELinux上允许TCP 8909端口的访问
• $ semanage port -a -t http_port_t -p tcp 8909
• 第七步:【在 system1 上】重启Apache服务
• $ systemctl restart httpd
• 第八步:【在 system2 上】测试WSGI脚本的访问
• $ curl http://wsgi.group8.example.com:8909
• RHCE第十七题:创建一个脚本
在system1上创建一个名为 /root/foo.sh 的脚本,让其提供下列特性:
当运行 /root/foo.sh redhat ,输出为 fedora
当运行 /root/foo.sh fedora ,输出为 redhat
当没有任何参数或者参数不是 redhat 或者 fedora 时,其错误输出产生以下的信息:
/root/foo.sh redhat | fedora
• 第一步:读题
• 第二步:【在 system1 上】
• $ cd
• $ vim /root/foo.sh
• #!/bin/bash
• case $1 in
• redhat)echo "fedora";;
• fedora)echo "redhat";;
• *)echo "/root/foo.sh redhat | fedora" 1>&2;;
• esac
• 第三步:【在 system1 上】
• $ chmod 755 /root/foo.sh
• 第四步:【在 system1 上】测试脚本是否符合题目要求
• $ /root/foo.sh > /dev/null
# 使用标准输出重定向无法将显示结果丢入垃圾桶
• $ /root/foo.sh 2> /dev/null
# 而使用错误输出重定向才能将显示结果丢入垃圾桶,则脚本书写正确
• $ /root/foo.sh redhat
# 参数是redat,显示fedora,则脚本书写正确
• $ /root/foo.sh fedora
# 参数是fedora,显示redhat,则脚本书写正确
• RHCE第十八题:创建一个添加用户的脚本
在 system1 上创建一个脚本,名为 /root/batchusers ,此脚本能实现为系统 system1 创建本地用户,并且这些用户的用户名来自一个包含用户名列表的文件,同时满足下列要求:
此脚本要求提供一个参数,此参数就是包含用户名列表的的文件
如果没有提供参数,此脚本应该给出下面的提示信息 Usage: /root/batchusers userfile 然后退出并返回相应的值
如果提供一个不存在的文件名,此脚本应该给出下面的提示信息 Input file not found 然后退出并返回相应的值
创建的用户登录shell为 /bin/false
此脚本不需要为用户设置密码
您可以从下面的URL获取用户名列表作为测试用 http://server.group8.example.com/pub/userlist
• 第一步:读题
• 第二步:【在 system1 上】
• $ cd
• $ wget http://server.group8.example.com/pub/userlist
• $ cat userlist
• 第三步:【在 system1 上】
• $ vim /root/batchusers
• #!/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" 1>&2
• exit 1
• fi
• else
• echo "Usage: /root/batchusers userfile" 1>&2
• exit 1
• fi
• 第四步:【在 system1 上】
• $ chmod 755 /root/batchusers
• 第五步:【在 system1 上】
• $ /root/batchusers
# 没有带参数,执行会显示:Usage: /root/batchusers userfile
• $ /root/batchusers notExsitFile
# 参数带了一个不存在的文件,执行会显示:Input file not found
• $ /root/batchusers /root/userlist
• $ getent passwd | tail
# 检查新用户是否成功被创建
• RHCE第十九题:配置iSCSI服务端
配置 system1 提供一个 ISCSI 服务 磁盘名为 iqn.2014-08.com.example.group8:system1 ,并符合下列要求:
服务端口为 3260
使用 iscsi_store 作其后端逻辑卷名称,其大小为 3G
此服务只能被 system2.group8.example.com 访问
• 第一步:读题
• 第二步:【在 system1 上】
• $ yum install -y targetcli
• $ systemctl enable target
• $ systemctl start target
• 第三步:【在 system1 上】
• $ firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.24.8.12/32 port port=3260 protocol=tcp accept'
• $ firewall-cmd --reload
• $ firewall-cmd --list-all
• 第四步:【在 system1 上】
• $ fdisk /dev/sda
• n
# 新建一个分区
• p
# 使用主分区
• [Enter]
# 默认是第3(个主分区)
• [Enter]
# 使用默认的起始扇区数
• +3G
# 指定分区大小为3G
• t
# 更改一个分区的标签
• [Enter]
# 默认是最后一个(刚创建的第3个)分区
• 8e
# 更改为 Linux LVM
• w
# 存盘退出
• $ partprobe
# 立即强制同步分区信息
• 第五步:【在 system1 上】
• $ pvcreate /dev/sda3
• $ vgcreate iscsi_vg /dev/sda3
• $ lvcreate -n iscsi_store -l 100%FREE iscsi_vg
• 第六步:【在 system1 上】
• $ targetcli
• backstores/block create name=iscsi_store dev=/dev/iscsi_vg/iscsi_store
• cd iscsi/
• create iqn.2014-08.com.example.group8:system1
• cd iqn.2014-08.com.example.group8:system1/tpg1/
• luns/ create /backstores/block/iscsi_store
• acls/ create iqn.2014-08.com.example.group8:system2
• portals/ create 172.24.8.11 3260
# 此处的IP与端口号之间,不能添加冒号!!!
• set attribute authentication=0
• set attribute generate_node_acls=0
• cd /
• saveconfig
• exit
• RHCE第二十题:配置iSCSI客户端
配置 system2 使其能连接在 system1 上提供的 iqn.2014-08.com.example.group8:system1,并符合以下要求:
iSCISI 设备在系统启动的期间自动加载
块设备 iSCISI 上包含一个大小为 2100 MiB 的分区,并格式化为 ext4
此分区挂载在 /mnt/data 上,同时在系统启动的期间自动挂载
• 第一步:读题
• 第二步:【在 system2 上】
• $ yum install -y iscsi-initiator-utils
• 第三步:【在 system2 上】
• $ cat > /etc/iscsi/initiatorname.iscsi << EOF
• InitiatorName=iqn.2014-08.com.example.group8:system2
• EOF
• 第四步:【在 system2 上】
• $ systemctl enable iscsi iscsid
• $ systemctl start iscsi iscsid
• 第五步:【在 system2 上】发现
• $ iscsiadm -m discovery -t st -p 172.24.8.11
• 第六步:【在 system2 上】
• $ iscsiadm -m node -l
• $ lsblk
# 查看分区情况,会发现多了一个3GB的sdb磁盘
• 第七步:【在 system2 上】在iSCSI块设备上创建一个2100MB大小的分区
• $ fdisk /dev/sdb
• n
• [Enter]
• [Enter]
• [Enter]
• +2100M
• w
• $ partprobe
• 第八步:【在 system2 上】将新创建的分区格式化为ext4格式
• $ mkfs.ext4 /dev/sdb1
• 第九步:【在 system2 上】设置开机自动挂载
• $ cat >> /etc/fstab << EOF
• `blkid /dev/sdb1 | awk '{print $2}'` /mnt/data/ ext4 defaults,_netdev 0 0
• EOF
• $ mkdir /mnt/data
• $ mount -a
• $ df
• RHCE第二十一题:配置一个数据库
在 system1上创建一个 MariaDB 数据库,名为 Contacts,要求: 数据库应该包含来自数据库复制的内容,复制文件的URL为 http://server.group8.example.com/pub/users.mdb ,数据库只能被 localhost 访问 除了 root 用户,此数据库只能被用户 Mary 查询,此用户密码为 redhat,root 用户的数据库密码为 redhat ,同时不允许空密码登录
• 第一步:读题
• 第二步:【在 system1 上】安装MariaDB,立即启动并且设置其在下一次系统重启后仍然保持开启状态
• $ yum install -y mariadb-server
• $ systemctl enable mariadb
• $ systemctl start mariadb
• 第三步:【在 system1 上】进行MaiaDB数据库的初始化设置
• $ mysql_secure_installation
• [Enter]
# 当前root用户密码为空,按回车输入当前的“空密码”
• y
# 确认要设置root密码
• redhat
# 输入两遍root密码
• redhat
# 输入两遍root密码
• y
# 删除匿名用户
• [Enter]
# 令其默认不允许root远程登录
• [Enter]
# 删除测试数据库 test
• [Enter]
# 刷新用户权限表(Reload privilege tables now)
• 第四步:【在 system1 上】下载考试给定的库备份
• $ cd
• $ wget http://server.group8.example.com/pub/users.mdb
# 注意:此处直接下载即可,(改名会导致下载过程出错!)
• 第五步:【在 system1 上】创建一个Contacts库,并且导入库备份
• $ mysql -u root -predhat
• > create database Contacts;
• > use Contacts;
• > source /root/users.mdb;
• > show tables;
• > quit;
• 第六步:【在 system1 上】授权Mary用户只能访问Contacts库中的所有表
• $ mysql -u root -predhat
• > grant select on Contacts.* to Mary@localhost identified by 'redhat';
• > quit;
• RHCE第二十二题:数据库查询
在 system1 上使用数据库 Contacts ,并使用相应的 SQL 查询以回答下列问题:
密码是fadora 的人的名字是什么?
有多少人的姓名是 John ,同时居住在 Santa Clara ?
• 第一步:读题
• 多表连接需要在from语句中写明多张表的表名
• 多表连接条件是第一张表的主键与第二张表的主键相关联
• SQL语句中的 '字符串内容' 必须用单引号包含起来
• 第二步:【在 system1 上】查看Contacts库中包含哪些表,以及这些表的结构
• $ mysql -u root -predhat
• > use Contacts;
• > show tables;
• > desc u_name;
• > desc u_passwd;
• > desc u_loc;
• > quit;
• 第三步:【在 system1 上】连接 u_name 和 u_passwd 两张表,查询符合“密码是fadora 的人的名字”条件的所有记录
• $ mysql -u root -predhat
• > use Contacts;
• > select u_name.firstname,u_name.lastname from u_name,u_passwd where u_name.userid=u_passwd.uid and u_passwd.password='fadora';
• > quit;
• 第四步:【在 system1 上】连接 u_name 和 u_loc 两张表,查询符合“姓名是 John 并且居住在 Santa Clara ”条件的记录总数
• $ mysql -u root -predhat
• > use 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';
• > quit;
• 第五步:将第三步和第四步的查询结果提交到考试网页上的文本框中。