作者–XXT 说明:因电脑内存问题所以只用了三台来做演示
题目:
(二)Linux 云服务配置
1. 创建虚拟机
| 主机名称 | 镜像 | IPv4 地址 |
|---|---|---|
| linux1 | Rocky 9.0 | 10.0.220.101/24 |
| linux2 | Rocky 9.0 | 10.0.220.102/24 |
| linux3 | Rocky 9.0 | 10.0.220.103/24 |
| linux4 | Rocky 9.0 | 10.0.220.104/24 |
| linux5 | Rocky 9.0 | 10.0.220.105/24 |
| linux6 | Rocky 9.0 | 10.0.220.106/24 |
| linux7 | Rocky 9.0 | 10.0.220.107/24 |
| linux8 | Rocky 9.0 | 10.0.220.108/24 |
| linux9 | Rocky 9.0 | 10.0.220.109/24 |
2. DNS 服务
(1)利用 bind,配置 linux1 为主 DNS 服务器,linux2 为备用 DNS 服务器,为所有 linux 主机提供冗余 DNS 正反向解析服务。正向区域文件均为 /var/named/named.skills,反向区域文件均为 /var/named/named.10。
3. NTP 服务
(1)利用 chrony,配置 linux1 为其他 linux 主机提供 NTP 服务。
4. Ansible 服务
(1)所有 linux 主机之间(包含本主机)root 用户实现密钥 ssh 认证。
(2)在 linux1 上安装系统自带的 ansible-core,作为 ansible 控制节点。linux2-linux9 作为 ansible 的受控节点。
5. CA 服务
(1)配置 linux1 为 CA 服务器,为 linux 主机颁发证书。证书颁发机构有效期=10 年,公用名 =linux1.skills.lan。申请并颁发一张证书,证书信息:有效期=10 年,公用名=skills.lan,国家=CN,省=Beijing,城市=Beijing,组织=skills,组织单位=system,使用者可选名称=*.skills.lan 和 skills.lan。将证书 skills.crt 和私钥 skills.key 复制到需要证书的 linux 服务器 /etc/pki/tls 目录。浏览器访问 https 网站时,不出现证书警告信息。
6. Apache2 服务
(1)配置 linux1 为 Apache2 服务器,使用 skills.lan 或 any.skills.lan(any 代表任意网址前缀,用 linux1.skills.lan 和 web.skills.lan 测试)访问时,自动跳转到 www.skills.lan。禁止使用 IP 地址访问,默认首页文档 /var/www/html/index.html 的内容为“HelloApache”。
(2)把 /etc/pki/tls/skills.crt 证书文件和 /etc/pki/tls/skills.key 私钥文件转换成含有证书和私钥的 /etc/pki/tls/skills.pfx 文件;然后把 /etc/pki/tls/skills.pfx 转换为含有证书和私钥的 /etc/pki/tls/skills.pem 文件,再从 /etc/pki/tls/skills.pem 文件中提取证书和私钥分别到 /etc/pki/tls/apache.crt 和 /etc/pki/tls/apache.key。
(3)客户端访问 Apache 服务时,必需有 SSL 证书。
7. Samba 服务
(1)在 linux4 上创建 user00-user19 等 20 个用户;user00 和 user01 添加到 manager 组,user02 和 user03 添加到 dev 组。把用户 user00-user03 添加到 samba 用户。
(2)配置 linux4 为 samba 服务器,建立共享目录 /srv/sharesmb,共享名与目录名相同。manager 组用户对 sharesmb 共享有读写权限,dev 组对 sharesmb 共享有只读权限;用户对自己新建的文件有完全权限,对其他用户的文件只有读权限,且不能删除别人的文件。在本机用 smbclient 命令测试。
8. NFS 服务
(1)在 linux5 上,创建用户,用户名为 xiao,uid=2222,gid=2222,家目录为 /home/xiaodir。
(2)配置 linux5 为 nfs 服务器,目录 /srv/sharenfs 的共享要求为:linux 服务器所在网络用户有读写权限,所有用户映射为 xiao。
9. MySQL 服务
(1)配置 linux7 为 mysql 服务器,创建数据库用户 xiao,在任意机器上对所有数据库有完全权限。
(2)创建数据库 userdb;在库中创建表 userinfo,表结构如下:
| 字段名 | 数据类型 | 主键 | 自增 |
|---|---|---|---|
| id | int | 是 | 是 |
| name | varchar(10) | 否 | 否 |
| height | float | 否 | 否 |
| birthday | datetime | 否 | 否 |
| sex | varchar(5) | 否 | 否 |
| password | varchar(200) | 否 | 否 |
(3)在表中插入 2 条记录,分别为(1, user1, 1.61, 2000-07-01, M),(2, user2, 1.62, 2000-07-02, F),
password 字段与 name 字段相同,password 字段用 md5 函数加密。
(4)新建 /var/mysql/userinfo.txt 文件,文件内容如下,然后将文件内容导入到 userinfo 表中,password 字段用 md5 函数加密。
3,user3,1.63,2000-07-03,F,user3
4,user4,1.64,2000-07-04,M,user4
5,user5,1.65,2000-07-05,M,user5
6,user6,1.66,2000-07-06,F,user6
7,user7,1.67,2000-07-07,F,user7
8,user8,1.68,2000-07-08,M,user8
9,user9,1.69,2000-07-09,F,user9
(5)将表 userinfo 中的记录导出,并存放到 /var/mysql/userinfo.sql,字段之间用 ‘ 分隔。
(6)为 root 用户创建计划任务(day 用数字表示),每周五凌晨 1:00 备份数据库 userdb(含创建数据库命令)到 /var/mysql/userdb.sql。(便于测试,手动备份一次。)
10. Podman 服务
(1)在 linux9 上安装 podman,导入 rockylinux-9.tar 镜像。
(2)创建名称为 skills 的容器,映射本机的 8000 端口到容器的 80 端口,在容器内安装 httpd,默认网页内容为“HelloPodman”。
SSH:
先实现ssh连接个个搭建的靶机:
sudo vim /etc/ssh/sshd_config
将第40行修改成:

可使用本地连接:
ssh root@IP

我这里使用的是Xshell:
注意用户名一类的不能出现错误

经过我的验证上面这些步骤是可以省略的但是需要添加一块网卡,且这块网卡要和要连接的设备在一个网段


然后连接上xshell之后接着我进行了对防火墙的关闭
永久关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
挂载本地源:
这个步骤可以在比赛中完成工具连接之后就开始进行
开始配置:
1.
进入vm勾选配置

2.
配置样源repo的文件
cd /etc/yum.repos.d/
编辑:
vim /etc/yum.repos.d/rocky.repo
完全使用本地ISO源(不依赖网络)
确保rocky.repo只使用本地路径
[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=1
enabled=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-Rocky-9
[appstream]
name=Rocky Linux $releasever – AppStream baseurl=file:///mnt/cdrom/AppStream gpgcheck=1 enabled=1 gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-Rocky-9 # 禁用所有其他仓库(包括 extras)
[extras]
enabled=0
3.挂载光盘并安装
# 创建挂载点
mkdir -p /mnt/cdrom
# 挂载光盘
mount /dev/sr0 /mnt/cdrom
接下来安装就可以了
DNS:
前提:

分别检查均能相互ping通
1.安装BIND软件
安装bind 和 bind-utils
yum install bind bind-utils -y
主dns和从dns都要安装
设置系统使用本机作为DNS解析服务器。
查看网络连接名称:
nmcli connection show

nmcli connection modify ens160 ipv4.dns "127.0.0.1"
nmcli connection modify ens160 ipv6.dns "::1"
nmcli connection down ens160 && nmcli connection up ens160
核心DNS服务器的/etc/resolv.conf缺失配置,主要影响自身的域名解析能力,不直接影响它为其他主机提供服务的功能
1.主DNS服务器(linux1)配置
1.2 编辑DNS主配置文件
编辑DNS主配置文件 => linux1
vim /etc/named.conf

1.3 创建DNS正反向区域
创建dns正反向区域
vim /etc/named.rfc1912.zones

编辑文件,添加正向区域(解析域名 => IP)和反向区域(解析IP => 域名)的定义
1.4 编辑DNS正反向区域解析文件
编辑dns正反向区域解析文件
cd /var/named/
cp -p named.localhost named.skills
cp -p named.loopback named.10 //-p只复制内容
vim named.skills //编辑正向区域解析文件,添加主机记录

vim named.10 #编辑反向区域解析文件,添加指针记录

1.5重启DNS服务
重启dns服务
systemctl restart named
systemctl enable named

配置防火墙允许DNS流量(DNS用UDP/TCP 53端口)
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
或者关闭防火墙
解析测试:
正向解析测试:通过解析域名得出IP

反向解析测试:通过解析IP得出域名

如果你要通过域名,去访问IP地址所对应的主机,那么你要确保你的dns服务是正常的
2.备用DNS服务器(linux2)配置
2.1 配置备用DNS正反向区域配置
vim /etc/named.rfc1912.zones

zone "skills.com" IN {
type slave;
master {10.0.220.101;};
file "slaves/named.skills";
};
zone "0.in-addr.arpa" IN {
type master;
master {10.0.220.101;};
file "slaves/named.10";
};
然后这里正向的解析出了问题
nmcli connection show
nmcli connection modify ens160 ipv6.dns "::1"
nmcli connection modify ens160 ipv4.dns "10.0.220.101"
nmcli connection down ens160 && nmcli connection up ens160

3.启动服务并配置防火墙
systemctl enable --now named
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
或者关闭防火墙
验证:

3.客户端(linux3-linux9配置)
让这些主机使用linux1和linux2作为DNS服务器,以nmcli为例
nmcli connection modify ens160 ipv4.dns "10.0.220.101 10.0.220.102"
nmcli connection down ens160 && nmcli connection up ens160
验证效果:
在任意客户端(如linux3)执行解析测试:
正向解析
nslookup linux1.skills.com
反向解析:
nslookup 10.0.220.101

NTP:
要在linux1上利用chrony为其他linux主机提供NTP服务,可按照以下步骤操作
1.安装chrony:
sudo dnf install chrony -y
2.配置chrony服务端:
编辑chrony的主配置文件/etc/chrony.conf:
sudo vim /etc/chrony.conf
在配置文件中添加允许其他主机(10.0.220.0/24 网段)同步时间的配置,同时设置本地时间源(若没有外部 NTP 服务器,可依赖本地时间
# 允许 10.0.220.0/24 网段的主机同步时间
allow 10.0.220.0/24
# 设置本地时间源,stratum 设为 10(无外部源时使用)
local stratum 10

3.配置防火墙:
如果linux1启用了防火墙,需要开放NTP服务的UDP123端口:
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload
这里直接关闭防火墙就好
这里的话验证的话会出现错误,是由于如果linux1要作为其他主机的 NTP 服务器,同时自身也需要同步时间,应该配置上游 NTP 服务器;如果 linux1 仅作为本地时间源(无外部 NTP 服务器),需要配置 local 相关指令。
例如,若要配置上游 NTP 服务器(以阿里云 NTP 服务器为例),在 /etc/chrony.conf 中添加:
server ntp.aliyun.com iburst
客户端配置:
在其他Linux主机(linux2-linux9)上,同样安装chrony并配置同步linux1的时间:
1.安装chrony:
sudo dnf install chrony -y
由于这里我的设备是脱网状态使用的是u盘传送安装包
不做演示
2.编辑配置
编辑/etc/chrony.conf,添加Linux1作为NTP服务器:
sudo vim /etc/chrony.conf
在文件中添加:
server 10.0.220.101 iburst

3.重启服务
sudo systemctl restart chronyd
sudo systemctl enable chronyd
验证:
chronyc sources -v

linux3

ansible:
一.所有Linux主机之间root用户实现密钥SSH认证
步骤1:在linux1生成密钥对
以root用户登录linux1,执行命令生成RSA密钥对(一路回车,使用默认设置)
ssh-keygen -t rsa
生成的密钥对默认存于/root/.ssh/,id_rsa 为私钥,id_rsa.pub 为公钥。

步骤2:复制公钥到所有主机(包括linux1自身)
对每台主机(以linux2为例),执行:
ssh-copy-id root@linux2
依次对linux3到linux9执行上述命令,过程中输入目标主机root密码

步骤3:验证密钥认证
ssh root@linux2

能直接登录认证成功
二.在linux1安装ansible-core并配置受控节点
1.在linux1上安装ansible-core
在linux1用系统包管理器安装:
yum install -y ansible-core
2.配置受控节点清单(linux1)
Ansible 通过清单文件定义受控节点。编辑默认清单文件 /etc/ansible/hosts,添加 linux2 至 linux9 为受控节点:
vim /etc/ansible/hosts

3.验证
使用ansible命令,对所有受控节点执行 ping 测试
ansible all -m ping

这里需要先分别对其进行一次
ansible linux3 -m ping

command模块可在受控节点上执行指定命令,通过查看命令执行结果来判断连接是否正常。例如,在控制节点(如linux1)上执行以下命令,查看受控节点的主机名:
CA服务:
linux1:配置CA服务器
1.1安装openssl
yum install -y openssl
1.2创建CA目录结构
mkdir -p /etc/pki/CA/{certs,crl,newcerts,private}
chmod 700 /etc/pki/CA/private
touch /etc/pki/CA/index.txt
echo 1000 > /etc/pki/CA/serial
1.3生成CA私钥
openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096
chmod 600 /etc/pki/CA/private/cakey.pem
1.4生成CA根证书(有效期10年)
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem
-out /etc/pki/CA/cacert.pem -days 3650
-subj "/CN=linux1.skills.lan"
2.生成服务器证书请求(CSR)
2.1创建服务器私钥
openssl genrsa -out /etc/pki/tls/skills.key 4096
chmod 600 /etc/pki/tls/skills.key
2.2准备OpenSSL配置文件(用于SAN扩展)
mkdir -p /etc/pki/tls/
vi /etc/pki/tls/openssl-san.cnf
创建/etc/pki/tls/openssl-san.cnf:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = Beijing
localityName = Beijing
organizationName = skills
organizationalUnitName = system
commonName = skills.lan
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = *.skills.lan
DNS.2 = skills.lan
这个方法的编辑器比较难使用
使用 echo 命令创建(最简单)
cat > /etc/pki/tls/openssl-san.cnf << 'EOF'
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
encrypt_key = no
[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = Beijing
localityName = Beijing
organizationName = skills
organizationalUnitName = system
commonName = skills.lan
[ req_ext ]
subjectAltName = @alt_names
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
[ alt_names ]
DNS.1 = *.skills.lan
DNS.2 = skills.lan
EOF
2.3生成证书请求(CSR)
openssl req -new -key /etc/pki/tls/skills.key
-out /etc/pki/tls/skills.csr
-config /etc/pki/tls/openssl-san.cnf
3.签发服务器证书
3.1准备签发配置文件(CA端)
首先检查OpenSSL的CA配置文件:
ls -la /etc/pki/tls/openssl.cnf
3.2初始化CA数据库
# 确保序列号文件存在
echo 1000 > /etc/pki/CA/serial
# 确保索引文件存在
touch /etc/pki/CA/index.txt
# 检查文件状态
ls -la /etc/pki/CA/
3.3签发服务器证书:
使用宽松策略
使用 policy_anything 策略来避免严格匹配:
openssl ca -in /etc/pki/tls/skills.csr
-out /etc/pki/tls/skills.crt
-days 3650
-extensions req_ext
-extfile /etc/pki/tls/openssl-san.cnf
-cert /etc/pki/CA/cacert.pem
-keyfile /etc/pki/CA/private/cakey.pem
-policy policy_anything
-batch
-in /etc/pki/tls/skills.csr:输入的证书请求文件
-out /etc/pki/tls/skills.crt:输出的已签发证书文件
-days 3650:证书有效期10年(3650天)
-extensions req_ext:使用配置文件中定义的扩展段
-extfile /etc/pki/tls/openssl-san.cnf:指定包含SAN的配置文件
-cert /etc/pki/CA/cacert.pem:CA证书路径
-keyfile /etc/pki/CA/private/cakey.pem:CA私钥路径
-batch:批处理模式,不交互提示
4.验证生成的证书:
4.1验证证书内容
openssl x509 -in /etc/pki/tls/skills.crt -text -noout
4.2 检查 SAN 字段
openssl x509 -in /etc/pki/tls/skills.crt -text -noout | grep -A 5 "Subject Alternative Name"
5.复制证书到其他服务器
# 复制到其他 Linux 服务器
scp /etc/pki/tls/skills.crt /etc/pki/tls/skills.key root@10.0.220.102:/etc/pki/tls/
# 在目标服务器上设置权限
chmod 600 /etc/pki/tls/skills.key
在Linux1上安装Niginx
0.检查光盘设备
lsblk
1.挂载光盘并安装
# 创建挂载点
mkdir -p /mnt/cdrom
# 挂载光盘
mount /dev/sr0 /mnt/cdrom
# 验证挂载
ls /mnt/cdrom/
2. 配置本地 yum 仓库
# 创建本地仓库文件
cat > /etc/yum.repos.d/local.repo << 'EOF'
[local-baseos]
name=Local BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0
[local-appstream]
name=Local AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=0 EOF # 清理缓存 yum clean all
3. 安装 Nginx
# 安装 Nginx
yum install -y nginx
# 验证安装
nginx -v
4. 配置 Nginx SSL
# 创建 SSL 配置
cat > /etc/nginx/conf.d/ssl.conf << 'EOF'
server {
listen 443 ssl;
server_name skills.lan;
ssl_certificate /etc/pki/tls/skills.crt;
ssl_certificate_key /etc/pki/tls/skills.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
EOF
5. 创建测试页面
# 创建测试页面
cat > /usr/share/nginx/html/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>skills.lan - HTTPS Test</title>
</head>
<body>
<h1>Welcome to skills.lan</h1>
<p>HTTPS certificate test successful!</p>
<p>No certificate warnings should appear in the browser.</p>
</body>
</html>
EOF
6. 启动 Nginx
# 检查配置文件语法
nginx -t
# 启动 Nginx
systemctl start nginx
systemctl enable nginx
# 检查状态
systemctl status nginx
7. 配置防火墙
# 开放 HTTPS 端口
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 验证
firewall-cmd --list-all
8. 验证服务
# 检查端口监听
ss -tlnp | grep :443
# 本地测试
curl -k https://localhost
在其他机器上检验:
1.配置hosts文件
# 编辑 hosts 文件
sudo vi /etc/hosts
# 在文件末尾添加( Web 服务器 IP 是 10.0.220.101)
10.0.220.101 skills.lan
# 保存并退出
2. 验证 hosts 配置
# 检查 hosts 文件内容
cat /etc/hosts | grep skills.lan
# 测试域名解析
ping -c 2 skills.lan
# 使用 nslookup 测试
nslookup skills.lan
从 linux1 复制证书文件到 linux2
# 在 linux2 上执行,从 linux1 复制证书文件
scp root@10.0.220.101:/etc/pki/tls/skills.crt /tmp/
scp root@10.0.220.101:/etc/pki/tls/skills.key /tmp/
# 验证文件
ls -la /tmp/skills.* /tmp/cacert.pem
步骤 4:测试 HTTPS 访问
# 现在应该可以访问了
curl --cacert /tmp/cacert.pem -I https://skills.lan
# 详细测试
curl --cacert /tmp/cacert.pem -v https://skills.lan
# 如果不指定 CA 证书(如果已添加到系统信任库)
curl -v https://skills.lan
apache2服务
1.挂载光盘并安装
# 创建挂载点
mkdir -p /mnt/cdrom
# 挂载光盘
mount /dev/sr0 /mnt/cdrom
# 验证挂载
ls /mnt/cdrom/
2.apache2服务配置(Linux 1)
2.1 安装Apache和ssl模块
yum install -y httpd mod_ssl
2.2 证书格式转换
# .crt + .key → .pfx
openssl pkcs12 -export -out /etc/pki/tls/skills.pfx
-inkey /etc/pki/tls/skills.key
-in /etc/pki/tls/skills.crt
-passout pass:
# .pfx → .pem
openssl pkcs12 -in /etc/pki/tls/skills.pfx
-out /etc/pki/tls/skills.pem
-nodes
-passin pass:
提取证书和私钥
# 复制证书文件
cp /etc/pki/tls/skills.crt /etc/pki/tls/apache.crt
# 复制私钥文件
cp /etc/pki/tls/skills.key /etc/pki/tls/apache.key
2.3 配置虚拟主机
创建 /etc/httpd/conf.d/skills.conf:
# 禁止 IP 直接访问
<VirtualHost *:80>
ServerName default
DocumentRoot /var/www/html
<Location />
Deny from all
</Location>
</VirtualHost>
# HTTP 到 HTTPS 重定向
<VirtualHost *:80>
ServerName skills.lan
ServerAlias *.skills.lan
Redirect permanent / https://www.skills.lan/
</VirtualHost>
# HTTPS 主站点
<VirtualHost *:443>
ServerName www.skills.lan
DocumentRoot /var/www/html
# SSL 配置
SSLEngine on
SSLCertificateFile /etc/pki/tls/apache.crt
SSLCertificateKeyFile /etc/pki/tls/apache.key
# 安全设置
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5
# 目录权限
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
DirectoryIndex index.html
</VirtualHost>
# 禁止其他 HTTPS 访问
<VirtualHost *:443>
ServerName default
SSLEngine on
SSLCertificateFile /etc/pki/tls/apache.crt
SSLCertificateKeyFile /etc/pki/tls/apache.key
<Location />
Deny from all
</Location>
</VirtualHost>
2.4 创建网站内容
mkdir -p /var/www/html
echo "HelloApache" > /var/www/html/index.html
chown -R apache:apache /var/www/html
2.5 启动服务
# 检查配置语法
httpd -t
# 启动并启用服务
systemctl start httpd
systemctl enable httpd
3.客户端测试配置(Linux2)
添加:
10.0.220.101 skills.lan
10.0.220.101 www.skills.lan
10.0.220.101 linux1.skills.lan
10.0.220.101 web.skills.lan
10.0.220.101 x.skills.lan
3.1 测试命令
# 测试 HTTP 重定向
curl -I http://skills.lan
# 测试 HTTPS 访问(忽略证书警告)
curl -k https://www.skills.lan
4. 故障排除指南
4.1 Apache 启动失败 – 端口被占用
bash
# 检查端口占用
netstat -tlnp | grep -E ':80|:443'
# 如果 Nginx 占用,停止它
systemctl stop nginx
systemctl disable nginx
# 杀死残留进程
pkill httpd
# 重新启动
systemctl start httpd
samba 服务
1.1 创建用户 user00-user19
for i in {00..19}; do
useradd user$i
echo "123456" | passwd --stdin user$i
done
说明:
- 使用循环创建 user00 到 user19 共 20 个用户
passwd --stdin用于非交互式设置密码- 所有用户密码设置为
123456
1.2 创建组 manager 和 dev
groupadd manager
groupadd dev
说明:创建两个用户组用于权限管理。
1.3 将用户加入对应组
usermod -aG manager user00
usermod -aG manager user01
usermod -aG dev user02
usermod -aG dev user03
说明:
-aG参数表示追加到附加组(不覆盖原有组)- user00 和 user01 加入 manager 组
- user02 和 user03 加入 dev 组
2. 安装 Samba 并添加 Samba 用户
yum install samba samba-client -y
2.1 添加用户到 Samba
for i in {00..03}; do
(echo "123456"; echo "123456") | smbpasswd -a user$i -s
done
说明:
smbpasswd -a添加 Samba 用户-s参数表示静默模式(不交互)- 需要输入两次密码确认
- 只有 user00-user03 需要添加到 Samba 用户
3. 创建共享目录并设置权限
3.1 创建共享目录
mkdir -p /srv/sharesmb
3.2 设置目录权限
chmod 2770 /srv/sharesmb
chown root:manager /srv/sharesmb
2770中的2表示设置 SGID(在该目录下创建的文件继承目录的组)770表示所有者(root)和组(manager)有读写执行权限- 设置组为 manager,这样 manager 组成员有写权限
4. 配置 Samba 共享
4.1 备份原配置文件
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
4.2 编辑配置文件
vi /etc/samba/smb.conf
在文件末尾添加以下内容:
[sharesmb]
path = /srv/sharesmb
valid users = @manager, @dev
write list = @manager
read list = @dev
create mask = 0664
force create mode = 0664
directory mask = 0775
force directory mode = 0775
配置说明:
valid users = @manager, @dev:只允许 manager 和 dev 组访问write list = @manager:manager 组有读写权限read list = @dev:dev 组有只读权限create mask = 0664:新建文件权限为 664(所有者读写,组读写,其他只读)force create mode = 0664:强制新建文件权限directory mask = 0775:新建目录权限为 775force directory mode = 0775:强制新建目录权限
6. 启动并测试 Samba 服务
systemctl start smb
systemctl enable smb
systemctl start nmb
systemctl enable nmb
使用lcd命令切换本地目录
# 切换到系统目录
smb: > lcd /etc
# 上传文件
smb: > put hosts
# 切换回根目录
smb: > lcd /
nfs服务:
1. 创建用户 xiao
# 创建组(gid=2222)
sudo groupadd -g 2222 xiao
# 创建用户,指定 uid、gid 和家目录
sudo useradd -u 2222 -g 2222 -d /home/xiaodir -m xiao
-u 2222:指定用户 ID 为 2222-g 2222:指定组 ID 为 2222-d /home/xiaodir:指定家目录路径-m:如果目录不存在则创建
2. 创建共享目录并设置权限
# 创建共享目录
sudo mkdir -p /srv/sharenfs
# 将目录所有者改为 xiao:xiao
sudo chown xiao:xiao /srv/sharenfs
# 设置目录权限(例如 755 或 775,根据需求)
sudo chmod 755 /srv/sharenfs
3. 安装并配置 NFS 服务器
# 对于 CentOS/RHEL/Rocky
sudo yum install nfs-utils
# 对于 Ubuntu/Debian
sudo apt install nfs-kernel-server
3.1 编辑 /etc/exports 文件
sudo vim /etc/exports
加入以下内容:
/srv/sharenfs 10.0.220.0/24(rw,sync,all_squash,anonuid=2222,anongid=2222)
10.0.220.0/24:允许访问的网段,请根据实际网络修改rw:读写权限sync:同步写入all_squash:将所有访问用户映射为匿名用户anonuid=2222、anongid=2222:将所有用户映射为 uid=2222(xiao)和 gid=2222
4. 启动并启用 NFS 服务
# 启动服务
sudo systemctl start nfs-server # 对于 CentOS/Rocky
# 设置开机自启
sudo systemctl enable nfs-server
sudo systemctl enable nfs-kernel-server
5. 使 NFS 配置生效
sudo exportfs -ra
6. 验证配置
# 查看当前导出的共享
showmount -e localhost
应输出类似:
Export list for localhost:
/srv/sharenfs 192.168.0.0/24
客户端挂载测试
在另一台 Linux 客户端上测试 ==> yum install nfs-utils
bash
sudo mount -t nfs 10.0.220.103:/srv/sharenfs /mnt
mysql服务
1. 安装 MySQL 服务器
yum install -y mariadb-server mariadb
systemctl start mariadb
systemctl enable mariadb
2. 运行安全初始化
mysql_secure_installation
按照提示设置 root 密码123456
二、创建数据库用户并授权
1. 登录 MySQL
mysql -u root -p
2. 创建用户 xiao 并授权
CREATE USER 'xiao'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'xiao'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
三、创建数据库和表结构
1. 创建数据库 userdb
CREATE DATABASE userdb;
USE userdb;
2. 创建表 userinfo
CREATE TABLE userinfo (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
height FLOAT,
birthday DATETIME,
sex VARCHAR(5),
password VARCHAR(200)
);
四、插入初始数据
插入两条记录,password 使用 MD5 加密:
INSERT INTO userinfo (id, name, height, birthday, sex, password)
VALUES
(1, 'user1', 1.61, '2000-07-01', 'M', MD5('user1')),
(2, 'user2', 1.62, '2000-07-02', 'F', MD5('user2'));
五、导入外部数据文件
1. 创建数据文件(在系统)
mkdir -p /var/mysql
cat > /var/mysql/userinfo.txt << EOF
3,user3,1.63,2000-07-03,F,user3
4,user4,1.64,2000-07-04,M,user4
5,user5,1.65,2000-07-05,M,user5
6,user6,1.66,2000-07-06,F,user6
7,user7,1.67,2000-07-07,F,user7
8,user8,1.68,2000-07-08,M,user8
9,user9,1.69,2000-07-09,F,user9
EOF
2. 设置文件权限
# 给 MySQL 用户访问权限
chmod 766 /var/mysql
chown mysql:mysql /var/mysql/userinfo.txt
2. 导入数据到 userinfo 表
-- 登录 MariaDB
mysql -u root -p
-- 选择数据库
USE userdb;
-- 第一步:导入数据
LOAD DATA LOCAL INFILE '/var/mysql/userinfo.txt'
INTO TABLE userinfo
FIELDS TERMINATED BY ','
LINES TERMINATED BY 'n'
(id, name, height, birthday, sex, @password)
SET password = MD5(@password);
这个是和上面命令重复的
LOAD DATA LOCAL INFILE '/var/mysql/userinfo.txt'
INTO TABLE userinfo
FIELDS TERMINATED BY ','
LINES TERMINATED BY 'n'
(id, name, height, birthday, sex, @password)
SET password = MD5(@password);
六、导出数据到文件
导出 userinfo 表数据到 /var/mysql/userinfo.sql,字段用 ; 分隔:
SELECT * INTO OUTFILE '/var/mysql/userinfo.sql'
FIELDS TERMINATED BY ';'
LINES TERMINATED BY 'n'
FROM userinfo;
七、设置定时备份任务
手动备份一次(含建库语句)
mysqldump -u root -p --databases userdb > /var/mysql/userdb.sql
2. 为 root 用户添加 crontab 计划任务
crontab -u root -e
添加以下行:
0 1 * * 5 mysqldump -u root -p你的密码(123456) --databases userdb > /var/mysql/userdb.sql
podman服务
1.安装podman
# 更新系统
dnf update -y
# 安装 Podman
dnf install -y podman
# 验证安装
podman --version
2.在当前系统直接完成实验要求
# 安装 httpd
dnf install -y httpd
# 创建网页内容
echo "HelloPodman" > /var/www/html/index.html
# 修改 httpd 监听端口为 8000
sed -i 's/Listen 80/Listen 8000/' /etc/httpd/conf/httpd.conf
# 启动服务
systemctl enable httpd
systemctl start httpd
# 测试访问
curl http://localhost:8000
2.1使用当前系统完成实验
安装和配置httpd
# 安装 httpd
dnf install -y httpd
# 创建网页内容
echo "HelloPodman" > /var/www/html/index.html
# 修改监听端口为 8000
sed -i 's/Listen 80/Listen 8000/' /etc/httpd/conf/httpd.conf
# 启动服务
systemctl enable httpd
systemctl start httpd
# 配置防火墙(如果需要)
firewall-cmd --add-port=8000/tcp --permanent
firewall-cmd --reload
2. 2测试访问
curl http://localhost:8000
使用当前系统创建基础容器
# 创建容器目录结构
CONTAINER_ROOT="/opt/basic-container"
mkdir -p $CONTAINER_ROOT/{bin,lib,lib64,etc,var/www/html}
# 复制必要的基础文件
cp /bin/bash $CONTAINER_ROOT/bin/
cp /bin/sh $CONTAINER_ROOT/bin/
cp /bin/sleep $CONTAINER_ROOT/bin/
# 复制依赖的库文件
ldd /bin/bash | grep -o '/[^ ]*' | xargs -I {} cp {} $CONTAINER_ROOT/lib/ 2>/dev/null
# 创建网页内容
echo "HelloPodman" > $CONTAINER_ROOT/var/www/html/index.html
# 从当前目录导入为镜像
tar -C $CONTAINER_ROOT -cf container-base.tar .
podman import container-base.tar basic-web
3、验证实验完成情况
echo "=== 实验要求验证 ==="
echo "1. 服务运行状态:"
systemctl status httpd 2>/dev/null || podman ps 2>/dev/null
echo "2. 端口监听:"
netstat -tlnp | grep 8000
echo "3. 网页内容:"
curl -s http://localhost:8000
echo "4. 外部访问测试:"
curl -s http://$(hostname -I | awk '{print $1}'):8000
