第八届江苏技能状元大赛选拔赛信息通信网络运行管理项目模块D网络服务与系统运维-Linux样题解析

通用前置步骤(所有节点)

Matlab 复制代码
bash

# 设置主机名(以实际节点为准,例如 linux1)

hostnamectl set-hostname linuxX.skills.lan

# 配置静态 IP(以 linux1 为例,其他节点改地址即可)

nmcli con mod ens160 ipv4.method manual ipv4.addresses 10.4.1.101/24 ipv4.gateway 10.4.1.1 ipv4.dns "127.0.0.1"  autoconnect yes

nmcli con mod 'System eth0' ipv4.dns "10.4.1.101 10.4.1.102"   # linux3 的 DNS 自己指向 两个DNS服务器,按需修改

nmcli con up 'System eth0'  //使用本地网卡

注意:System eth0 是连接名称,请用 nmcli con show 查看实际名称替换。

# 关闭 SELinux(若需要,根据 txt 未特别要求,但建议按需)

Matlab 复制代码
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
systemctl start firewalld
systemctl enable firewalld

# 禁用防火墙或按服务放行(txt 中 firewalld 都是 enabled,但实际未阻断必要端口)

# 为简化,我们放行所有服务端口,或直接 disable firewalld(按测试环境)

systemctl disable --now firewalld # 或者根据服务配置 rich rule,这里为了快速实现配置,直接关掉

# 生成 SSH 密钥并分发(需手动输入 yes 和密码,或预先配置免密)

Matlab 复制代码
ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa

for i in 1 2 3; do

    ssh-copy-id 10.4.1.10$i

done
systemctl restart sshd

节点 linux1.skills.lan (10.4.1.101) --- DNS, CA, HTTP, Ansible

bash 复制代码
dnf install -y bind chrony httpd mod_ssl ansible-core

2. 配置 Chrony(允许其他节点访问)

bash 复制代码
dnf install chrony -y

Linux1
systemctl enable --now chronyd
vim /etc/chrony.conf

server 10.4.1.101 iburst
allow 10.4.1.0/24
local stratum 10
systemctl restart chronyd

其他:

systemctl enable --now chronyd
vim /etc/chrony.conf

pool 10.4.1.101 iburst



#复制一份客户端配置文件

cp -p /etc/chrony.conf /

测试

1: chronyc clients | grep skills

chronyc sources -v

systemctl restart chronyd

systemctl enable chronyd
  • 检查 NTP 服务端是否正常工作时,不仅要看进程状态,更要确认端口监听(使用 ss -uln 或 netstat -ulnp)。
  • 客户端同步失败但服务端 ping 通时,应使用 nc -vzu 测试 UDP 端口连通性,若收到 Connection refused 则说明服务端未监听。
  • 简单的重启服务(systemctl restart chronyd)往往能解决服务未正确初始化的问题。

3. 配置 DNS 服务 (BIND)

Matlab 复制代码
Linux1\linux2

dnf install -y bind bind-utils

bash

# 主配置文件 /etc/named.conf

Vim /etc/named.conf << 'EOF'

options {

    listen-on port 53 { any; };

    listen-on-v6 port 53 { none; };

    directory       "/var/named";

    dump-file       "/var/named/data/cache_dump.db";

    statistics-file "/var/named/data/named_stats.txt";

    memstatistics-file "/var/named/data/named_mem_stats.txt";

    allow-query     { any; };

    recursion       yes;

};



vi /etc/named.conf //末尾加

zone "skills.lan" IN {

    type master;

    file "named.skills";

    allow-update { none; };

};



zone "1.4.10.in-addr.arpa" IN {

    type master;

    file "named.10";

    allow-update { none; };

};



# 正向区域文件 /var/named/named.skills

cd /var/named

cp -p named.localhost named.skills

vim  /var/named/named.skills

$TTL 1D

@       IN SOA  @ rname.invalid. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS   linux1

        NS   linux2

linux1     A     10.4.1.101

linux2     A     10.4.1.102

linux3     A     10.4.1.103

web        A     10.4.1.101

www       A     10.4.1.101



~                              

# 反向区域文件 /var/named/named.10

cd /var/named

cp -p named.loopback named.10

vim  /var/named/named.10

$TTL 1D

@       IN SOA  @ rname.invalid. (

                                        0       ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS   linux1.skills.lan.

        NS   linux2.skills.lan.

linux1     A     10.4.1.101

linux2     A     10.4.1.102

101     PTR  linux1.skills.lan.

101     PTR  web.skills.lan.

101     PTR  www.skills.lan.

102     PTR  linux2.skills.lan.

103     PTR  linux3.skills.lan.

~               

Linux2

vi /etc/named.conf

listen-on port 53 { any; };

allow-query     { any; };

最后末尾加

zone "skills.lan" IN {

    type slave;

    file "named.skills";

    masters { 10.4.1.101; };

};

zone "1.4.10.in-addr.arpa" IN {

    type slave;

    file "named.10";

    masters { 10.4.1.101; };

};
   

#启动 named

systemctl restart named

systemctl enable --now named

4. 配置自签名 CA 和证书

方法1:

Matlab 复制代码
vim /etc/pki/tls/openssl.cnf     //修改以下参数

[ CA_default ]

default_days = 3650

policy = policy_anything

[ usr_cert ]

subjectAltName=DNS:skills.lan,DNS:*.skills.lan



mkdir /etc/pki/CA
cd /etc/pki/CA
mkdir private newcerts
touch index.txt
echo 01 > serial
openssl genrsa -out /etc/pki/CA/private/cakey.pem
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 -subj "/CN=linux1.skills.lan"
cd /etc/pki/tls
openssl genrsa -out skills.key
openssl req -new -key /etc/pki/tls/skills.key -out /etc/pki/tls/skills.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=skills/OU=system/CN=skills.lan"
openssl ca -in /etc/pki/tls/skills.csr -out /etc/pki/tls/skills.crt -days 1825

浏览器访问https网站时,不出现证书警告信息。

cp /etc/pki/CA/cacert.pem  /etc/pki/ca-trust/source/anchors/

update-ca-trust



bash

# 创建 CA 目录

mkdir -p /etc/pki/CA

cd /etc/pki/CA

mkdir -p private

chmod 700 private



# 生成 CA 私钥和自签证书 (有效期 10 年)

openssl genrsa -out private/cakey.pem 2048

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 \

  -subj "/C=CN/ST=Beijing/L=Beijing/O=skills/OU=system/CN=linux1.skills.lan"



# 为 skills.lan 生成证书请求和私钥

cd /etc/pki/tls

openssl genrsa -out skills.key 2048

openssl req -new -key skills.key -out skills.csr \

  -subj "/C=CN/ST=Beijing/O=skills/OU=system/CN=skills.lan"\

-addext "subjectAltName=DNS:skills.lan,DNS:*.skills.lan"



# 用 CA 签署证书 (有效期 5 年,txt 中显示 2031 年)

openssl x509 -req -in skills.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem \

  -CAcreateserial -out skills.crt -days 1825 -extfile <(printf "subjectAltName=DNS:*.skills.lan,DNS:skills.lan")



# 生成 apache 使用的证书(自签,便于测试)

openssl req -new -x509 -nodes -out apache.crt -keyout apache.key -days 365 \

  -subj "/CN=localhost"

备用方法

Matlab 复制代码
【#创建根私钥

openssl genrsa -out /etc/pki/CA/private/cakey.pem

cd /etc/pki/CA/

#创建根证书

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 #天数

CN Beijing Beijing Skills System *.skills.lan

#在CA文件夹下创建 数据库索引文件 和 当前证书序列号

touch index.txt

echo 01 > serial

#导出安装用证书ca.pfx

mkdir -p certs

openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem -out  certs/ca.pfx

#证书

openssl genrsa -out  skills.key

openssl req -new -key skills.key -out skills.csr

CN=*.skills.lan,OU=System,O=Skills,L=Beijing,S=Beijing,C=CN

openssl ca -in skills.csr -out  skills.crt  -days 1825

openssl pkcs12 -export -inkey skills.key -in skills.crt -out  skills.pfx】

请采用 ansible ,实现自动化运维。

Matlab 复制代码
yum install ansible*

vim /etc/ansible/hosts

[all]

10.4.1.102

10.4.1.103

ansible all -m ping  \\查看受控情况

节点 linux3.skills.lan (10.4.1.103) --- Samba, Podman

1. 安装软件包

Matlab 复制代码
 配置 Samba

yum -y install samba samba-client

#创建20个用户

[root@linux3 srv]# vi /222.sh

#!/bin/bash

for i in {00..20}

do

        useradd user$i

done

bash /222.sh

#创建组

groupadd manager

groupadd dev

#修改用户的所属组

usermod user01 -g manager

usermod user00 -g manager

usermod user02 -g dev

usermod user03 -g dev

pdbedit -a user00

pdbedit -a user01

pdbedit -a user02

pdbedit -a user03

#创建目录

mkdir -p /srv/sharesmb

firewall-cmd --zone=public --add-service=samba

#编辑samba的配置文件

vim /etc/samba/smb.conf

[sharesmb]

       path = /srv/sharesmb

       valid users =@dev,@manager

       write list = @ manager

       writeable = yes

       create mask = 6775

       directory mask = 6755

      

 #保存并退出:wq





 systemctl enable --now smb

 #加权限

chown -R root:dev /srv/sharesmb

chmod -R 775 /srv/sharesmb

chmod -R a+s /srv/sharesmb

setfacl -m g:dev:rx /srv/sharesmb/

setfacl -m g:manager:rwx /srv/sharesmb/

firewall-cmd --add-port={139,445}/tcp --per

setsebool -P samba_export_all_rw on

 # smbclient 命令测试

 yum -y install samba-client

 smbclient //10.60.40.103/sharesmb/ -U user00

Password:

Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]

smb: \>



#测试user00上传文件

smbclient -c "put 1.txt" //localhost/sharesmb -U user00%Key-1122

cd /srv/sharesmb/

#查看ls



[root@localhost /]# smbclient -c "put 1.txt" //localhost/sharesmb -U user02%123

NT_STATUS_ACCESS_DENIED opening remote file \1.txt



[root@localhost /]# smbclient -c "rm 1.txt" //localhost/sharesmb -U user02%123

备用

Matlab 复制代码
bash

# 创建共享目录

mkdir -p /srv/sharesmb

chmod 777 /srv/sharesmb

# 创建 user00 ~ user19,设置统一密码(示例密码为 123456)

for i in $(seq -f "%02g" 0 19); do

    useradd -m user$i

    echo "user$i:123456" | chpasswd

done

# 添加 user00,user01 到 manager 组

usermod -aG manager user00

usermod -aG manager user01



# 添加 user02,user03 到 dev 组

usermod -aG dev user02

usermod -aG dev user03



# 将 user00-user03 添加为 Samba 用户(密码设为 samba123)

for u in user00 user01 user02 user03; do

    echo -e "samba123\nsamba123" | smbpasswd -s -a $u

done

mkdir -p /srv/sharesmb

# 属组为 manager,权限 2770(setgid 保证新建文件继承组)

chown root:manager /srv/sharesmb

chmod 2770 /srv/sharesmb

# 添加粘滞位,防止用户删除他人文件

chmod +t /srv/sharesmb



# 配置 smb.conf

cat > /etc/samba/smb.conf << 'EOF'

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

cat > /etc/samba/smb.conf << 'EOF'

[global]

workgroup = SKILLS

server string = Samba Server %v

netbios name = linux3

security = user

map to guest = Bad User

passdb backend = tdbsam



[sharesmb]

path = /srv/sharesmb

valid users = @manager, @dev

write list = @manager

read only = no

create mask = 0660

directory mask = 0770

force create mode = 0660

force directory mode = 0770

inherit permissions = yes

inherit owner = yes

EOF



systemctl enable --now smb nmb

4. 配置 Podman 容器(HTTP + Registry)

Matlab 复制代码
bash

# 运行 httpd 容器(映射到 8000)

podman run -d --name httpd -p 8000:80 docker.io/library/httpd:latest



# 运行 registry 容器(带基本认证)

mkdir -p /opt/registry/auth

htpasswd -Bbn admin admin > /opt/registry/auth/htpasswd

podman run -d --name registry -p 5000:5000 \

  -v /opt/registry/auth:/auth:Z \

  -e "REGISTRY_AUTH=htpasswd" \

  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \

  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \

  docker.io/library/registry:2



# 测试:拉取镜像并推送到本地 registry(让 txt 中 curl 返回 {"repositories":["rockylinux"]})

podman pull rockylinux:9

podman tag rockylinux:9 linux3.skills.lan:5000/rockylinux

podman push --tls-verify=false linux3.skills.lan:5000/rockylinux
相关推荐
不会C语言的男孩1 小时前
Linux 系统编程 · 第 2 章:系统调用与库函数
linux·c语言
坤昱1 小时前
cfs调度类深入解刨——psi科普篇
linux·cfs·psi·cfs调度·eevdf·psi详细分析·linux系统资源监控
德迅云安全-小潘1 小时前
网站遭遇SQL注入攻击?应急处置、漏洞修复与长效防御完整方案
网络·sql·oracle
骑上单车去旅行2 小时前
openEuler 22.03 离线源码编译 Zabbix 7.0.27 完整最终整合手册
linux·运维·服务器·zabbix
电子元件小说家2 小时前
Coilcraft S5499-DL 国产替代选型分析:同于科技 Tonevee 同参数产品评估指南
网络·科技
VidDown2 小时前
VidDown 工具站:视频分辨率技术
javascript·网络·编辑器·音视频·视频编解码·视频
AC赳赳老秦2 小时前
OpenClaw + 云数据库运维:自动备份、扩容、迁移 RDS/MySQL 云数据库
运维·开发语言·数据库·人工智能·python·mysql·openclaw
向日葵.2 小时前
linux & qnx & git 命令 1
linux·运维·服务器
长和信泰光伏储能2 小时前
探索绿色能源:离网光伏系统安装指南
网络