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

【RHCE】综合实战练习

目录

需求

环境拓扑结构

主机环境描述

需求具体描述

基本环境配置

servera主机

serverb主机

shell脚本编写-servera

配置防火墙

配置本地仓库

配置nginx服务

安装nginx服务

修改配置文件

测试nginx服务

配置selinux

配置dns服务

安装bind软件

配置dns主配置文件

配置dns正向解析区域文件

配置dns反向解析区域文件

启动dns服务并测试

配置网络仓库

配置ntp服务

安装chrony软件

配置防火墙

修改ntp配置文件

启动服务并测试

配置mariaDB

安装mariaDB

配置防火墙

启动服务并运行mariaDB

创建bbs数据库并给其他主机授权

配置nfs服务

安装nfs-utils软件

修改配置文件

创建共享目录并修改权限

修改防火墙配置

启动nfs服务并测试

shell脚本编写-serverb

配置网络仓库

配置nfs客户端

安装autofs软件

配置autofs自动挂载

测试挂载是否成功

配置论坛

安装http服务

安装论坛软件

解压论坛压缩包

修改部分目录权限

开启httpd服务并测试

安装论坛所需软件

配置selinux

启动httpd服务

配置ntp客户端

修改配置文件

启动ntp服务并测试

Shell文件运行测试

serverb方测试

dns客户端测试

ntp客户端测试

论坛测试


需求

环境拓扑结构

主机环境描述

主机名

主机地址需要提供的服务
content.exam.com
172.25.250.101
提供基于 httpd/nginx YUM 仓库服务
ntp.exam.com
172.25.250.102
提供基于 Chronyd NTP 服务
mysql.exam.com
172.25.250.103
提供基于 MySQL 的数据库服务
nfs.example.com
172.25.250.104
提供基于 NFS 的网络文件系统服务
dns.exam.com
172.25.250.105
提供基于 bind DNS 服务
bbs.exam.com
172.25.250.106
提供基于 Discuz 的论坛服务
172.25.250.101-172.25.250.105 5 IP 地址由 servera.exam.com 服务器进行提供。
172.25.250.106 serverb.exam.com 服务器进行提供。

需求具体描述

1. 172.25.250.101 主机上的 Web 服务要求提供 www.exam.com Web 站点,该站点在任何路由可达的主机上被访问,页面内容显示为 "Hello Welcome to www.exam.com !" ,并提供
content.exam.com/yum/AppStream content.exam.com/yum/BaseOS URL 作为网络仓库供所有主机使用。
2. 172.25.250.102 主机提供基于 Chronyd NTP 服务将本主机作为时间服务器,对外提供 NTP 服务,并设置本服务器为 3 层。
3. 172.25.250.103 主机提供的 MySQL 数据库服务,要求使用需求 1 中提供的仓库进行安装,并将数据库密码设定为 redhat 。创建名称为 bbs 的数据库提供给论坛服务使用。
4. 172.25.250.104 主机提供 NFS 服务,该服务将导出本地的 /bbs 目录作为论坛数据目录,该导出指定只能论坛所在主机使用,并且开机自动挂载。
5. 172.25.250.105 主机提供 DNS 服务,该服务需要提供对项目中所有主机名的正向和反向解析,并要求所有服务器的 DNS 配置为该 DNS 服务器。
6. 172.25.250.106 主机提供基于 Discuz 的论坛服务,该论坛服务使用 172.25.250.103 主机提供的数据库 bbs ,使用 172.25.250.104 主机提供的 NFS 作为论坛数据目录,并开机挂载。并使用
172.25.250.101 主机提供的网络仓库, 172.25.250.102 主机提供的 NTP 服务, 172.25.250.105 主机提供的 DNS 服务。
7. 所有服务器的防火墙服务和 SELinux 服务必须开启。
8. 所有服务器提供的网络服务必须在系统重启后仍然可以正常提供服务。
9. 根据所有服务的相关代码,编写一键部署 shell 脚本,最基础的功能为 通过执行该脚本实现所有上面所有需求,要求脚本必须在 servera.exam.com 主机上运行,并支持多次运行。

基本环境配置

servera主机

[root@localhost ~]# nmcli connection modify ens160 ipv4.addresses 172.25.250.101/24 ipv4.gateway 172.25.250.2 ipv4.dns 172.25.250.105 ipv4.method manual connection.autoconnect yes
[root@localhost ~]# nmcli connection modify ens160 +ipv4.addresses 172.25.250.102/24
[root@localhost ~]# nmcli connection modify ens160 +ipv4.addresses 172.25.250.103/24
[root@localhost ~]# nmcli connection modify ens160 +ipv4.addresses 172.25.250.104/24
[root@localhost ~]# nmcli connection modify ens160 +ipv4.addresses 172.25.250.105/24
[root@localhost ~]# nmcli connection up ens160

[root@localhost ~]# hostnamectl hostname servera.exam.com

serverb主机

[root@localhost ~]# nmcli connection modify ens160 ipv4.addresses 172.25.250.106/24 ipv4.gateway 172.25.250.2 ipv4.dns 172.25.250.105 ipv4.method manual connection.autoconnect yes

shell脚本编写-servera

配置防火墙

systemctl enable --now firewalld

firewall-cmd --permanent --add-service=http --add-service=dns &> /dev/null

firewall-cmd --reload &> /dev/null

 

配置本地仓库

rm -rf /etc/yum.repos.d/* &> /dev/null
cat << EOF > /etc/yum.repos.d/bendi.repo
[base]
name=base
baseurl=/mnt/BaseOS
gpgcheck=0
[app]
name=app
baseurl=/mnt/AppStream
gpgcheck=0
EOF

 挂载并测试是否成功

mount /dev/sr0 /mnt &> /dev/null

# 判断挂载是否成功
ls /mnt/GPL &> /dev/null
if [ $? -eq 0 ]
then
        echo "mount ok"
else
        echo "mount not ok"
fi

 

配置nginx服务

安装nginx服务

dnf install -y nginx &> /dev/null
if [ $? -eq 0 ]
then
        rpm -qa | grep nginx &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "nginx install ok"
        else
                echo "nginx install not ok"
        fi
else
        echo "nginx install not ok"
fi

修改配置文件

mkdir -p /var/www/exam &> /dev/null
echo Hello, Welcome to www.exam.com! > /var/www/exam/index.html
mkdir /var/log/nginx/exam &> /dev/null

cat << EOF > /etc/nginx/conf.d/exam.conf
server {
        server_name www.exam.com;
        root /var/www/exam/;
        access_log /var/log/nginx/exam/access.log;
        error_log /var/log/nginx/exam/error.log;
}
EOF
cat << EOF > /etc/nginx/conf.d/content.conf
server {
        server_name content.exam.com;
        root /var/www/exam/;
        access_log /var/log/nginx/exam/access.log;
        error_log /var/log/nginx/exam/error.log;
}
EOF

测试nginx服务

systemctl enable --now nginx &> /etc/null
if [ $? -eq 0 ]
then
        active=$(systemctl is-active nginx)
        if [ "$active"=="active" ]
        then
                echo "nginx start ok"
        else
                echo "nginx start not ok"
        fi
else
        echo "nginx start not ok"
fi

配置selinux

给nginx目录设置selinux上下文标签,若无特别要求也可将selinux修改为宽容模式

#设置httpd_d域为permissive(宽容)模式
#semanage permissive -a httpd_t
#添加上下文标签
chcon -t httpd_sys_content_t /var/www -R &> /etc/null

 

配置dns服务

安装bind软件

dnf install -y bind &> /dev/null
if [ $? -eq 0 ]
then
        rpm -qa | grep bind &> /dev/null
        if [ $? -eq 0 ]
        then
                echo "bind install ok"
        else
                echo "bind install not ok"
        fi
else
        echo "bind install not ok"
fi

配置dns主配置文件

cat << EOF > /etc/named.conf
options {
        listen-on port 53 { 172.25.250.105; };
        directory       "/var/named";
};
zone "exam.com" IN {
        type master;
        file "named.exam";
};
zone "250.25.172.in-addr.arpa" IN {
        type master;
        file "named.fanxiangexam";
};
EOF

配置dns正向解析区域文件

cat << EOF > /var/named/named.exam
\$TTL   1D
@       IN      SOA     @       admin.exam.com. (
                                                0
                                                1
                                                1
                                                1
                                                1)
        IN      NS      ns.exam.com.
ns      IN      A       172.25.250.101
www     IN      A       172.25.250.101
content IN      A       172.25.250.101
ntp     IN      A       172.25.250.102
mysql   IN      A       172.25.250.103
nfs     IN      A       172.25.250.104
dns     IN      A       172.25.250.105
bbs     IN      A       172.25.250.106
EOF

配置dns反向解析区域文件

cat << EOF > /var/named/named.fanxiangexam
\$TTL   1D
@       IN      SOA     @       admin.exam.com. (
                                                0
                                                1
                                                1
                                                1
                                                1)
        IN      NS      ns.exam.com.
101     IN      PTR     ns.exam.com.
101     IN      PTR     www.exam.com.
101     IN      PTR     content.exam.com.
102     IN      PTR     ntp.exam.com.
103     IN      PTR     mysql.exam.com.
104     IN      PTR     nfs.exam.com.
105     IN      PTR     dns.exam.com.
106     IN      PTR     bbs.exam.com.
EOF

启动dns服务并测试

systemctl enable --now named &> /etc/null
if [ $? -eq 0 ]
then
        echo "named start ok"
else
        echo "named start not ok"
fi

 

配置网络仓库

把/dev/sr0挂载到nginx下的目录中,使其他服务器可以将http://content.exam.com/yum/此作为网络仓库的地址

umount /dev/sr0
mkdir /var/www/exam/yum &> /etc/null
mount /dev/sr0 /var/www/exam/yum &> /etc/null

cat << EOF > /etc/yum.repos.d/bendi.repo
[base]
name=base
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[app]
name=app
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF

 

配置ntp服务

安装chrony软件

dnf install -y chrony &> /etc/null

if [ $? -eq 0 ]
then
        echo "chrony install ok"
else
        echo "chrony install not ok"
fi

配置防火墙

firewall-cmd --permanent --add-service=ntp &> /dev/null
firewall-cmd --reload &> /dev/null

修改ntp配置文件

sed -i 's/^pool.*/server time.windows.com iburst/g' /etc/chrony.conf
sed -i 's/#allow.*/allow 172.25.250.0\/24/g' /etc/chrony.conf
sed -i 's/#local stratum.*/local stratum 3/g' /etc/chrony.conf
sed -i 's/#log measurements statistics tracking/log measurements statistics tracking/g' /etc/chrony.conf

启动服务并测试

systemctl enable chronyd
systemctl restart chronyd

if [ $? -eq 0 ]
then
        echo "chronyd start ok"
else
        echo "chronyd start not ok"
fi

 

配置mariaDB

安装mariaDB

dnf install -y mariadb* &> /etc/null
if [ $? -eq 0 ]
then
        echo "mariadb install ok"
else
        echo "mariadb install not ok"
fi

配置防火墙

#配置防火墙
firewall-cmd --permanent --add-service=mysql &> /etc/null
firewall-cmd --reload &> /etc/null

启动服务并运行mariaDB

systemctl enable --now mariadb &> /etc/null

mysqladmin -u root password "redhat"

创建bbs数据库并给其他主机授权

mysql -u root -predhat -e "USE bbs" &> /etc/null
#没有bbs数据库执行会报错

if [ $? -eq 0 ]
then
        echo "database bbs exists"
        mysql -u root -predhat << EOF
grant all privileges on *.* to 'root'@'%' identified by 'redhat';
flush privileges;
EOF
else
        # 给所有访问的主机授权,允许所有操作,并确定用户root且密码为redhat
        mysql -u root -predhat << EOF
create database bbs;
grant all privileges on *.* to 'root'@'%' identified by 'redhat';
flush privileges;
EOF
fi

if [ $? -eq 0 ]
then
        echo "数据库bbs创建完毕,授权成功"
else
        echo "因未知原因,mysql配置失败"
fi

配置nfs服务

安装nfs-utils软件

dnf install -y nfs-utils &> /etc/null
if [ $? -eq 0 ]
then
        echo "nfs-utils install ok"
else
        echo "nfs-utils install not ok"
fi

systemctl enable --now nfs-server &> /etc/null

修改配置文件

echo "/bbs 172.25.250.106(rw)" > /etc/exports

创建共享目录并修改权限

mkdir -p /bbs
chmod 777 /bbs/ -R

修改防火墙配置

firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind &> /etc/null
firewall-cmd --reload &> /etc/null

启动nfs服务并测试

systemctl restart nfs-server &> /etc/null

if [ $? -eq 0 ]
then
        echo "nfs-server start ok"
else
        echo "nfs-server start not ok"
fi

 

shell脚本编写-serverb

在servera中要向把命令运行在serverb中,可以使用ssh

ssh root@172.25.250.106 << ALLEOF
...
ALLEOF

配置网络仓库

rm -rf /etc/yum.repos.d/*

cat << EOF > /etc/yum.repos.d/wangluo.repo
[base]
name=base
baseurl=http://content.exam.com/yum/BaseOS
gpgcheck=0
[app]
name=app
baseurl=http://content.exam.com/yum/AppStream
gpgcheck=0
EOF

 

配置nfs客户端

安装autofs软件

dnf install -y autofs &> /etc/null

配置autofs自动挂载

echo "html 172.25.250.104:/bbs" > /etc/auto.client
echo "/var/www/ /etc/auto.client" >> /etc/auto.master

测试挂载是否成功

systemctl enable autofs
systemctl restart autofs

if [ $? -eq 0 ]
then
        echo "serverb's nfs mount ok"
else
        echo "serverb's nfs mount not ok"
fi

配置论坛

安装http服务

dnf install -y httpd &> /etc/null
if [ $? -eq 0 ]
then
        echo "serverb's httpd install ok"
else    
        echo "serverb's httpd install not ok"
fi

修改防火墙配置

systemctl enable --now firewalld &> /etc/null

firewall-cmd --permanent --add-service=http &> /etc/null

安装论坛软件

在servera运行shell文件前先将论坛安装包放在root用户目录下

解压论坛压缩包
cp -u Discuz_X3.5_SC_UTF8_20230520.zip /var/www/html

cd /var/www/html

unzip -o Discuz_X3.5_SC_UTF8_20230520.zip &> /etc/null
修改部分目录权限
chmod 777 upload/uc_server/ upload/uc_client/ upload/data/ upload/config/ -R &> /dev/null
开启httpd服务并测试
systemctl start httpd &> /etc/null
if [ $? -eq 0 ]
then
        echo "serverb's httpd start ok"
else
        echo "serverb's httpd start not ok"
fi
安装论坛所需软件
dnf install -y php* &> /etc/null
if [ $? -eq 0 ]
then
        echo "serverb's php* install ok"
else
        echo "serverb's php* install not ok"
fi
配置selinux
setsebool -P httpd_use_nfs 1 &> /etc/null
setsebool -P httpd_can_network_connect_db on &> /etc/null
#semanage permissive -a httpd_t
启动httpd服务
systemctl restart httpd
systemctl enable httpd &> /etc/null

配置ntp客户端

修改配置文件

sed -i 's/^pool.*/server 172.25.250.102 iburst/g' /etc/chrony.conf
sed -i 's/#log measurements statistics tracking/log measurements statistics tracking/g' /etc/chrony.conf

启动ntp服务并测试

systemctl restart chronyd
if [ $? -eq 0 ]
then
        echo "serverb's ntp start ok"
else
        echo "serverb's ntp start ok"
fi

Shell文件运行测试

servera服务器无明显报错

serverb方测试

dns客户端测试

ntp客户端测试

论坛测试

 填写数据库地址和先前授权的用户和密码

 

实验圆满结束:)

相关文章:

  • Unity 实现一个简易可拓展性的对话系统
  • deepseek搭建本地私有知识库dify安装介绍docker compose图文教程
  • Spring漏洞再现
  • 卷积神经网络 - 关于LeNet-5的若干问题的解释
  • 【机器学习/大模型/八股文 面经 (一)】
  • 深度学习技术与应用的未来展望:从基础理论到实际实现
  • Spark Driver生成过程详解
  • Pyecharts功能详解与实战示例
  • CCF编程能力等级认证GESP—C++4级—20250322
  • 传统复古怀旧标签标识Logo设计PSAI无衬线英文字体安装包 Myfonts – Hebden Recut Font Family
  • 「DP」专题训练(持续更新中)
  • 基于linuxC结合epoll + TCP 服务器客户端 + 数据库实现一个注册登录功能
  • 在IDEA中快速注释所有console.log
  • 四种跨模态行人重识别可视化方法
  • Ubuntu22.04搭建freeradius操作说明
  • 实时图像处理:让你的应用更智能
  • 【Bug记录】node-sass安装失败解决方案
  • Thinkphp(TP)框架漏洞攻略
  • Docker 可视化工具 Portainer
  • 【2025】基于springboot+spark的电影推荐系统(源码、万字文档、图文修改、调试答疑)
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应
  • 马上评|从一个细节看今年五一档电影
  • 上海模速空间“北斗七星”与“群星”生态布局,正在做些什么?
  • 发表“男性患子宫肌瘤”论文的杂志一年发文三千余篇,中介称可提供代写
  • 贵州省委省政府迅速组织开展黔西市游船倾覆事故救援工作
  • 2025五一档电影票房破6亿