RHCE的考试相对RHCSA来说要难很多,主要考网络配置,各种文件系统的挂载,web的配置,防火墙策略,数据库查找,脚本编写等等。一共20道题左右。rhce考试一般在下午,时长3.5个小时,考试环境是一台装有redhat7操作系统的物理机,上面虚拟了两台主机,一台当做服务器主机配置各种服务,另一台虚拟机当做客户端对服务器的各种配置进行验证。考试开始时你会以普通用户登录物理主机,同样物理主机的桌面上有一个控制台,用来控制两个虚拟机。rhce考试两台虚拟机的root密码是已经提供好的,网络环境也是配置好的。
RHCE考试参考试题及答案(上):
1、配置SeLinux
在server0和desktop0上要求SeLinux的状态为enforcing。要求系统重启后依然生效。
注意:(一定要将上午考试用到的机器关机 init 5 切换到图形化界面)
回答:
server0 :
vim /etc/sysconfig/selinux
setenforce 1
getenforce
desktop0:
vim /etc/sysconfig/selinux
setenforce 1
getenforce
2、配置防火墙对SSH的限制
在server0和desktop0上设置防火墙,对SSH实现访问限制:
允许example.com (172.25.0.0/16)域的客户对server0和desktop0进行ssh访问。
禁止my133t.org (172.17.10.0/24 )域的客户对server0和desktop0进行ssh访问。
备注:my133t.org是在172.17.10.0/24网络。(根据考试实际提供的网段配置)
回答:
firewall-config
注意:在防火墙规则设置完成后,一定要点击"reload firewalled", 使设置生效。
3、配置IPv6地址
在你的考试系统上配置接口eth0使用以下IPv6地址:
server0 上的地址应该是
fddb:fe2a:ab1e::c0a8:1/64 (根据考试实际提供的地址配置)
desktop0 上的地址应该是
fddb:fe2a:ab1e::c0a8:2/64
两个系统必须能够与网络fddb:fe2a:ab1e/64内的系统通信。地址必须在重启后依旧生效。两个系统必须保持当前的IPv4地址并能通信
回答:
nmcli connection show
nmcli connection modify eth0 +ipv6.addresses "fddb:fe2a:ab1e::c0a8:1/64" ipv6.method manual
nmcli connnection reload
nmcli connection up eth0
ping6 fddb:fe2a:ab1e::c0a8: ## 使用此命令去查看网卡eth0 的ipv6 的地址配置是否正确, 也可用下面两个命令来实现同样的功能
####ip6 fddb:fe2a:ab1e::c0a8:1%eth0
###ip -6 route
desktop0:
nmcli connection modify eth0 +ipv6.addresses "fddb:fe2a:ab1e::c0a8:2/64" ipv6.method manual
nmcli connection reload
nmcli connection up eth0
ping6 fddb:fe2a:ab1e::c0a8:
####ip6 fddb:fe2a:ab1e::c0a8:1%eth0
####ip -6 route
4、配置链路聚合
在server0和desktop0之间按一下要求配置:此链路使用接口eth1和eth2
此链路在一个接口失效时仍然能工作
此链路在server0使用下面的地址 192.168.0.101/255.255.255.0
此链路在desktop0使用下面的地址 192.168.0.102/255.255.255.0
此链路在系统重启之后依然保持正常状态
回答:
server0:
nmcli device ###查看当前有几个网卡
创建team1 网卡,同时指定模式:
nmcli connection add con-name team1 ifname team1 type team autoconnect yes config ‘{“runner”:{“name”:“activebackup”}}’
nmcli connection show ## 查看team1 是否配置正确
为team1 配置IP:
nmcli connection modify team1 ipv4.address 192.168.0.101/
nmcli connection modify team1 ipv4.method manual
将eth1 和 eth2 加入到 team1 网卡组中:
nmcli connection add con-name team1-eth1 ifname eth1 type team-slave master team1 autoconnect yes
nmcli connection add con-name team1-eth2 ifname eth2 type team-slave master team1 autoconnect yes
nmcli connection up team1
nmcli connection show
ip addr ( 检验配置是否正确 )
desktop0 和 server0 的配置方式一样
5、自定义用户环境
在系统server0和desktop0上创建自定义命令为qstat ,此自定义命令将执行以下命令:
/bin/ps Ao pid,tt,user,fname,rsz
此命令对系统中的所有用户有效
回答:
ps Ao pid,tt,user,fname,rsz (先运行一下,看命令是否正确)
vim /etc/profile ###添加以下内容到/etc/profile
alias qstat='ps Ao pid,tt,user,fname,rsz'
vim /etc/bashrc ###添加以下内容到/etc/bashrcalias qstat='ps Ao pid,tt,user,fname,rsz'
验证:
source /etc/profile
qstat
source /etc/bashrc
qstat
6、配置本地邮件服务
在系统server0和desktop0上配置邮件服务,满足以下要求:
这些系统不接收外部发送来的邮件。这些系统上本地发送的任何邮件都会自动路由到classroom.example.com。从这些系统上发送的邮件都显示来自example.com。
你可以通过发送邮件到本地用户student来测试你的配置,classroom.example.com已经配置好。把此用户的邮件转到下列URL:http://classroom.example.com/cgi-bin/recevied_mail(注意:这个实验不需要开启防火墙, 因为我只是发送邮件, 没有接收别人的邮件。
form root@example.com to student@classroom.example.com)
回答:
[root@localhost services]# yum -y install postfix
[root@localhost services]# systemctl enable postfix
[root@localhost services]# vim /etc/postfix/main.cf
mail_owner = postfix # 服务账号
myhostname = server0.example.com
mydomain = example.com
myorigin = example.com # 邮件的后缀
inet_interfaces = loopback-only # 仅本地可用
inet_protocols = all
mydestination = #不接收任何邮件
local_transport = error: denied transport #本地发送 ,报错
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
mynetworks = 127.0.0.0/8 # 可信网络,不做认证
relayhost = [classroom.example.com] #中继服务器地址。因为classroom.example.cpm 可以连接外网, 所以设置中继服务器去发邮件给外网的邮箱, 如:qq , 163 邮箱。。
alias_maps = hash:/etc/aliases # 邮件地址别名
[root@localhost services]# systemctl start postfix
[root@localhost services]# systemctl status postfix
测试发送邮件:
[root@localhost services]# echo "hello" | mail -s test student@classroom.example.com
验证:
firefox http://classroom.example.com/cgi-bin/recevied_mail
7、配置端口转发
在server0上配置端口转发,要求如下:
在172.25.0.0/24网络中的系统,访问server0的本地端口5423将被转发到端口80
此设置必须永久有效。
回答:
firewall-config
(配完富规则后别忘记reload)
8、通过SMB共享目录
在server0上配置SMB服务。
您的SMB服务器必须是STAFF工作组的一个成员,共享/common目录,共享名必须为common,只有example.com域内的客户端可以访问common共享 (配置文件里面要填 网段而不是域名) ,Common必须是可以浏览的,
用户rob,samba密码为redhat , 只读权限访问common共享。 r-x
用户brian,samba密码为redhat ,读写权限访问common共享。 rwx
备注:考试的时候,用户和密码请根据题目实际情况进行设定,有的时候,
题目简单一些,测试用户早已建立,有的时候,题目较难一些,用户和密码都必须自己设定。
回答:
server0:
[root@server0 /]# yum -y install samba samba-client cifs-utils
[root@server0 /]# systemctl enable smb #SAMB服务
[root@server0 /]# systemctl enable nmb
[root@server0 /]# firewall-cmd --add-service=samba --permanent
success
[root@server0 /]# firewall-cmd --reload
[root@server0 /]# mkdir /common
[root@server0 /]# semanage fcontext -a -t samba_share_t '/common(/.*)?'
[root@server0 /]# restorecon -Rvv /common
[root@server0 /]# ll-Zd /common
[root@server0 /]# useradd rob
[root@server0 /]# useradd brian
[root@server0 /]# setfacl -m u:rob:r-x /common
[root@server0 /]# setfacl -m u:brian:rwx /common
[root@server0 /]# smbpasswd -a rob ###密码为redhat , -a 表示添加一个samba 用户
New SMB password:
Retype new SMB password:
Added user andy.
[root@server0 /]# smbpasswd -a brian
New SMB password:
Retype new SMB password:
Added user mary.
[root@server0 /]# vim /etc/samba/smb.conf
[global]
workgroup = STAFF #工作组
server string = Windows Server R2
interfaces = lo eth0 172.25.0.11 #监听 (172.25.0.11 是本地网卡地址)
[common] #共享名
path=/common #共享目录
writable=yes
browseable=yes #可浏览
hosts allow=172.25.0.0/ #白名单 172.25.0.0/24 是example 域的网段地址
[root@server0 /]#
[root@server0 /]# systemctl enable smb #SAMB服务
[root@server0 /]# systemctl enable nmb
[root@server0 /]# systemctl restart smb
[root@server0 /]# systemctl restart nmb # netbios服务
[root@server0 /]# firewall-cmd --add-service=samba --permanent
success
[root@server0 /]# firewall-cmd --reload
9、配置多用户SMB挂载
在desktop0上完成以下要求的配置:
desktop0把server0的common共享通过多用户的方式挂载到本地的/mnt/multiuser (实际的共享和挂载点请根据考试题目设定) ,
用户rob,samba密码为redhat , 只读权限访问common共享。 rx
用户brian,samba密码为redhat ,读写权限访问common共享。 rwx
该共享要求在系统启动时自动挂载。
回答:
desktop0:
[root@desktop0 ~]# yum -y install samba-client cifs-utils
[root@desktop0 ~]# smbclient -L //172.25.0.11 ## 查看 172.25.0.11的smaba 共享
Enter root's password: #密码为空
[root@desktop0 ~]cd /mnt
[root@desktop0 ~]mkdir multiuser
[root@desktop0 ~]# vim /etc/fstab
//172.25.0.11/common /mnt/multiuser cifs defaults,_netdev,username=brain,password=redhat,sec=ntlmssp,multiuser 0 0
mount -a
或是:
[root@desktop0 ~]# touch smbuser.txt
[root@desktop0 ~]# vim smbuser.txt
[root@desktop0 ~]# cat smbuser.txt
username=brian
password=redhat
[root@desktop0 ~]# vim /etc/fstab
//172.25.0.11/common /mnt/multiuser cifs defaults,_netdev,credenticals=/root/smbuser.txt,sec=ntlmssp,multiuser 0 0
[root@desktop0 ~]# mount -a
10、配置NFS服务
在server0配置NFS服务,要求如下:
以只读的形式共享目录/public同时只能被example.com域中的系统访问。
以读写的形式共享目录/protected同时只能被example.com域中的系统访问。访问/protected需要通过Kerberos安全加密,您可以使用下面提供的密钥:http://classroom.example.com/pub/keytabs/server0.keytab。目录/protected应该包含名为project 拥有人为ldapuser0的子目录,用户ldapuser0能以读写形式访问/protected/project。
回答:
server0:
yum -y install nfs-utils
systemctl enable nfs-server
systemctl enable nfs-secure-server
mkdir /public
ll -Zd /public
semanage fcontext -a -t public_content_t '/public(/.*)?'
restore -Rvv /public
mkdir /protected
semanage fcontext -a -t public_content_t '/protected(/.*)?'
restore -Rvv /protected
wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/server0.keytab
vim /etc/exports ###将以下两行内容添加到/etc/exports文件
/public 172.25.0.0/(ro,sync)
/protected 172.25.0.0/(rw,sync,sec=krb5p)
systemctl start nfs-server ### 先启动
systemctl start nfs-secure-server ###再启动
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
cd /protected
mkdir project
chown ldapuser0 /protected/project
chmod u+rwx /protected/project
11、挂载一个NFS共享
在desktop0上挂载一个来自server0上的NFS共享,并符合下列要求:
/pulbic共享挂载到本地的/mnt/nfsmount。
/protected挂载到本地的/mnt/nfssecure,并使用安全的方式,
密钥下载地址:
http://classroom.example.com/pub/keytabs/desktop0.keytab
用户ldapuser0能够在/mnt/nfssecure/project上创建文件。
这些文件系统在系统启动时自动挂载。
回答:
desktop0:
yum -y install nfs-utils
wget -O /etc/krb5.keytab http://classroom.example.com/pub/keytabs/desktop0.keytab
systemcetl enable nfs-secure
systemctl start nfs-secure ### 起不来可能是秘钥文件不对
mkdir /mnt/nfsmount
mkdir /mnt/nfssecure
vim /etc/fstab ###将以下两行内容添加到/etc/fstab
172.25.0.11:/pulbic /mnt/nfsmount nfs defaults,_netdev
172.25.0.11:protected /mnt/nfssecure nfs defaults,sec=krb5p,_netdev
mount -a
使用 df -hT 查看挂载情况
12、实现一个web服务器
在server0上配置一个站点http://server0.example.com,然后执行以下步骤:
从http://classroom.example.com/materials/station.html下载文件,
并且将文件重命名为index.html,绝对不能修改此文件的内容。将index.html拷贝到你的web服务器的DocumentRoot目录下。来自example.com域的客户端可以访问此web站点。来自my133t.org域的客户端拒绝访问此web站点。备注:网站的DocumentRoot如果题目没有指定,那么随意。
(server name 是 server0.example.com ,也就是网站的url)
回答:
server0:
yum -y install httpd httpd-manual
systemctl enable httpd
rpm -qd httpd | grep vhost 或是 rpm -ql httpd 查看配置web 服务器相关的官方参考文档
网页打开/usr/share/httpd/manual/.......里面有很多guide
配置域名的虚拟主机参考这个文档:/usr/share/httpd/manual/vhost/...
cd /var/www/html
wget -O index.html http://classroom.example.com/materials/station.hcd /etc/httpd/conf.d
touch server0.conf
vim server0.conf
[root@server0 conf.d]# cat server0.conf ###配置文件server0.conf的内容如下:
<VirtualHost *:>
# This first-listed virtual host is also the default for *:80
ServerName server0.example.com
DocumentRoot /var/www/html
<directory "/var/www/html">
<RequireAll>
Require all granted
Require not host .my133t.org ##### host 和 my133t.org之间有空格
</RequireAll>
</directory>
</VirtualHost>
systemctl start httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
测试:
desktop0:
curl http://server0.example.com
13、配置安全web服务
站点http://server0.example.com配置TLS加密。
一个已经签名证书从
http://classroom.example.com/pub/tls/certs/server0.crt获取
此证书的密钥从
http://classroom.example.com/pub/tls/private/server0.key获取
此证书的授权信息从
http://classroom.example.com/pub/example-ca.crt获取
回答:
server0:
yum -y install mod_ssl
cd /etc/pki/tls ####一定要放到此目录下面*******
wget http://classroom.example.com/pub/tls/certs/server0.crt
wget http://classroom.example.com/pub/tls/private/server0.key
wget http://classroom.example.com/pub/example-ca.crt
cd /etc/httpd/conf.d
vim ssl.conf
root@server0 conf.d]# cat ssl.conf (一下部分是我们要在ssl.conf 里面配置的内容)
<VirtualHost _default_:>
SSLCertificateFile /etc/pki/tls/server0.crt
SSLCertificateKeyFile /etc/pki/tls/server0.key
SSLCACertificateFile /etc/pki/tls/example-ca.crt
ServerName server0.example.com
DocumentRoot /var/www/html
<directory "/var/www/html">
<RequireAll>
Require all granted
Require not host .my133t.org
</RequireAll>
</directory>
</VirtualHost>
[root@server0 conf.d]#
systemctl restart httpd
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
测试:
desktop0:
curl https://server0.example.com
14、配置虚拟主机
在server0上扩展你的web服务器,为站点http://www0.example.com创建一个虚拟主机,然后执行以下步骤:
设置DocumentRoot为/var/www/virtual,从http://classroom.example.com/materials/www.html下载文件并重命名为index.html,不要对文件index.html内容做任何修改。将index.htm文件放到虚拟主机的DocumentRoot目录下,确保floyd用户能够在/var/www/virtual目录下创建文件 。
注意:原始站点http://server0.example.com必须仍然能够访问。站点的所用的域名网络中已有DNS服务器解析。
回答:
cd /var/www
mkdir virtual
cd /var/www/virtual
wget -O index.html http://classroom.example.com/materials/www.html
cd /etc/httpd/conf.d
cp server0.conf www0.conf
[root@server0 conf.d]# vim www0.conf
[root@server0 conf.d]# cat www0.conf
<VirtualHost *:>
# This first-listed virtual host is also the default for *:80
ServerName www0.example.com ### 网址名字, 网站url 为 http://www0.example.com
DocumentRoot /var/www/virtual
<directory "/var/www/virtual">
<RequireAll>
Require all granted
</RequireAll>
</directory>
</VirtualHost>
[root@server0 conf.d]#
systemctl restart httpd
id floyd
useradd floyd
setfacl -m u:floyd:rwx /var/www/virtual
测试:
[root@desktop0 etc]# curl http://www0.example.com
<h1 style="color:blue"> Mr Lee , QQ:</h1>
[root@desktop0 etc]#
15、配置web内容的访问
在你的server0上的web服务器的DocumentRoot目录下创建一个名为private的目录,
要求如下:
从http://classroom.example.com/materials/private.html下载一个文件副本到这个目录,并且重命名为index.html。不要对这个文件的内容作任何修改。从system1上,任何人都可以浏览private的内容,但是从其他系统就不能访问这个目录的内容。(注意题目要求谁可以访问,灵活变化)
备注:此题目是接着上一题,所以这里的DocumentRoot指的就是上面的
/var/www/virtual/。
配置:
cd /var/www/virtual
mkdir private
cd /var/www/virtual/private
wget -O index.html http://classroom.example.com/materials/private.html
cd /etc/httpd/conf.d
[root@server0 conf.d]# vim www0.conf
[root@server0 conf.d]# cat www0.conf
<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
ServerName www0.example.com
DocumentRoot /var/www/virtual
<directory "/var/www/virtual">
<RequireAll>
Require all granted
</RequireAll>
</directory>
<directory "/var/www/virtual/private">
require local
</directory>
</VirtualHost>
[root@server0 conf.d]#
[root@server0 conf.d]# systemctl restart httpd
测试:
[root@desktop0 Desktop]# curl http://www0.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>
[root@desktop0 Desktop]#
16、实现动态Web内容
在server0上配置提供动态web内容,要求如下:
动态内容由名为webapp0.example.com的虚拟主机提供,虚拟主机监听在端口8908。
从http://classroom.example.com/materials/webinfo.wsgi下载一个脚本,然后放在适当的位置,无论如何不要修改此文件的内容。客户端访问http://webapp0.example.com:8908/时应该接收到动态生成的web页面。此站点http://webapp0.example.com:8908/。必须能够被example.com域内的所有系统访问。
回答:
注意: 可以参考系统提供的参考文档:
[root@server0 www0]# rpm -ql mod_wsgi
/etc/httpd/conf.modules.d/-wsgi.conf
/usr/lib64/httpd/modules/mod_wsgi.so
/usr/share/doc/mod_wsgi-3.4
/usr/share/doc/mod_wsgi-3.4/LICENCE
/usr/share/doc/mod_wsgi-3.4/README
[root@server0 www0]#
[root@server0 www]#yum -y install mod_wsgi
[root@server0 www]#mkdir app
[root@server0 www]#ls
app cgi-bin html virtual
[root@server0 conf.d]# cd /var/www/app/
[root@server0 app]# wget http://classroom.example.com/materials/webinfo.wsgi
[root@server0 app]# ls
webinfo.wsgi
[root@server0 app]# pwd
/var/www/app
[root@server0 app]#
[root@server0 conf.d]# vim app0.conf
[root@server0 conf.d]# cat app0.conf
listen
<VirtualHost *:>
ServerName webapp0.example.com
DocumentRoot /var/www/app
<directory "/var/www/app">
<RequireAll>
Require all granted
</RequireAll>
</directory>
WSGIScriptAlias / /var/www/app/webinfo.wsgi
</VirtualHost>
[root@server0 conf.d]# semanage port -a -t http_port_t -p tcp 8908
Full path required for exclude: net:[].
Full path required for exclude: net:[].
[root@server0 conf.d]# semanage port -l |grep http
http_cache_port_t tcp , , , 10001-10010
http_cache_port_t udp
http_port_t tcp , , , , , , , ,
pegasus_http_port_t tcp
pegasus_https_port_t tcp
[root@server0 conf.d]#
[root@server0 conf.d]# systemctl restart httpd
[root@server0 conf.d]# netstat -natp |grep :8908
tcp6 ::: :::* LISTEN /httpd
[root@server0 conf.d]# firewall-cmd --add-port=8908/tcp --permanent
success
[root@server0 conf.d]# firewall-cmd --reload
success
[root@server0 conf.d]#
测试:
desktop0:
http://webapp0.example.com:
因为RHCE考试题目较多所以我分了两篇来写。剩下的题目及答案请参见下篇 【红帽认证系列笔记之RHCE】RHCE 认证考试题库(下)。