2022年中职网络搭建公开赛题答案

一、云平台网络连接

【任务描述】 请按照下述拓扑结构和信息表,使用六类非屏蔽双绞线连接网络并设置云平台,保证系统服务正常运行。

1.拓扑结构

2.网络信息表

网络名称 VlanID 子网名称 网络地址 网关 IPv4地址池
Network10 10 Subnet10 10.10.10.0/24 10.10.10.254 10.10.10.100- 10.10.10.200
Network20 20 Subnet20 10.10.20.0/24 10.10.20.254 10.10.20.100- 10.10.20.200

3.实例类型信息表

名称 ID VCPU 内存(MB) 磁盘(GB) 实例名称
Large 1 4 4096 40 windows1至windows7
Small 2 1 2048 40 linux1至linux7

4.实例信息表

实例名称 IPv4地址 完全合格域名
windows1 10.10.10.101 windows1.skills.com
windows2 10.10.10.102 windows2.skills.com
windows3 10.10.10.103 windows3.skills.com
windows4 10.10.10.104 windows4.skills.com
windows5 10.10.10.105 windows5.skills.com
windows6 10.10.10.106 windows6.cnskills.com
windows7 10.10.10.107 windows7.bj.cnskills.com
linux1 10.10.20.101 linux1.skills.com
linux2 10.10.20.102 linux2.skills.com
linux3 10.10.20.103 linux3.skills.com
linux4 10.10.20.104 linux4.skills.com
linux5 10.10.20.105 linux5.skills.com
linux6 10.10.20.106 linux6.skills.com
linux7 10.10.20.107 linux7.skills.com

二、windows 服务配置

(一)域服务

【任务描述】 为实现高效管理,请采用域控制器,提升企业网络安全程度,整合局域网内基于网络的资源。

所有机器重置SSIDsysprep

image-20220325201417014

Windows1 修改IP地址

#单网卡修改IP地址和主机名
#Windows-1
#更改主机名
Rename-Computer -NewName 'windows1'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.101 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows2修改IP地址

#单网卡修改IP地址和主机名
#Windows-2
#更改主机名
Rename-Computer -NewName 'windows2'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.102 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows3修改IP地址

#单网卡修改IP地址和主机名
#Windows-3
#更改主机名
Rename-Computer -NewName 'windows3'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.103 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows4修改IP地址

#单网卡修改IP地址和主机名
#Windows-4
#更改主机名
Rename-Computer -NewName 'windows4'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.104 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows5修改IP地址

#单网卡修改IP地址和主机名
#Windows-5
#更改主机名
Rename-Computer -NewName 'windows5'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.105 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows6修改IP地址

#单网卡修改IP地址和主机名
#Windows-6
#更改主机名
Rename-Computer -NewName 'windows6'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.106 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force

Windows7修改IP地址

#单网卡修改IP地址和主机名
#Windows-7
#更改主机名
Rename-Computer -NewName 'windows7'
#设置IP地址
netsh interface ip set address name = '以太网' static 10.10.10.107 255.255.255.0 10.10.10.254
#设置DNS1
netsh interface ip add dns name = '以太网' 10.10.10.101  index=1
#设置DNS2
netsh interface ip add dns name = '以太网' 10.10.10.102  index=2
#禁用IPv6
Disable-NetAdapterBinding -Name '以太网' -ComponentID ms_tcpip6
#强制重启 
Restart-Computer -Force
  1. 配置 windows2 为 skills.com 域服务和 DNS 服务,DNS 正反向区域在 Active Directory 中存储,为 skills.com 域中主机提供正反向解析。

    #安装域
    Install-WindowsFeature -name AD-Domain-Services -IncludeManagementTools
    #提升为主域控制
    # 用于 AD DS 部署的 Windows PowerShell 脚本
    #
    Import-Module ADDSDeployment
    Install-ADDSForest `
    -CreateDnsDelegation:$false `
    -DatabasePath "C:\Windows\NTDS" `
    -DomainMode "WinThreshold" `
    -DomainName "skills.com" `
    -DomainNetbiosName "SKILLS" `
    -ForestMode "WinThreshold" `
    -InstallDns:$true `
    -LogPath "C:\Windows\NTDS" `
    -NoRebootOnCompletion:$false `
    -SysvolPath "C:\Windows\SYSVOL" `
    -Force:$true
    
    

    image-20220325202207628

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gDDrlu3w-1691628635983)(https://lvcycy.oss-cn-beijing.aliyuncs.com/2022/Win/image-20220325204552186.png)]

    image-20220325210741958

  2. 把 skills.com 域服务迁移到 windows1;安装 DNS 服务,DNS 正反向区域在 Active Directory 中存储,为 skills.com 域中主机提供正向解析,为 skills.com 林中主机提供反向解析。

    #提升为辅助域控制器
    # 用于 AD DS 部署的 Windows PowerShell 脚本
    #
    Import-Module ADDSDeployment
    Install-ADDSDomainController `
    -NoGlobalCatalog:$false `
    -CreateDnsDelegation:$false `
    -CriticalReplicationOnly:$false `
    -DatabasePath "C:\Windows\NTDS" `
    -DomainName "skills.com" `
    -InstallDns:$true `
    -LogPath "C:\Windows\NTDS" `
    -NoRebootOnCompletion:$false `
    -ReplicationSourceDC "Windows2.skills.com" `
    -SiteName "Default-First-Site-Name" `
    -SysvolPath "C:\Windows\SYSVOL" `
    -Force:$true
    
    

    image-20220325211828349

    域迁移

    PS C:\Users\Administrator.SKILLS> ntdsutil
    C:\Windows\system32\ntdsutil.exe: Roles
    fsmo maintenance: Connections
    server connections: Connect to server windows1.skills.com
    绑定到 windows1.skills.com ...
    用本登录的用户的凭证连接 windows1.skills.com。
    server connections: q
    fsmo maintenance:Seize infrastructure master    #根据提示输入是
    fsmo maintenance:Seize naming master			#根据提示输入是
    fsmo maintenance:Seize PDC						#根据提示输入是
    fsmo maintenance:Seize RID master				#根据提示输入是
    fsmo maintenance:Seize schema master			#根据提示输入是
    
    
  3. 将 windows6 升级为 skills.com 林中的 cnskills.com 域控制器,安装 DNS,负责该域的正反向域名解析。升级域控制器后,用 skills\administrator 身份登陆。

    树域

    #提升为树域控制器
    # 用于 AD DS 部署的 Windows PowerShell 脚本
    #
    
    Import-Module ADDSDeployment
    Install-ADDSDomain `
    -NoGlobalCatalog:$false `
    -CreateDnsDelegation:$false `
    -DatabasePath "C:\Windows\NTDS" `
    -DomainMode "WinThreshold" `
    -DomainType "TreeDomain" `
    -InstallDns:$true `
    -LogPath "C:\Windows\NTDS" `
    -NewDomainName "cnskills.com" `
    -NewDomainNetbiosName "CNSKILLS" `
    -ParentDomainName "skills.com" `
    -NoRebootOnCompletion:$false `
    -SiteName "Default-First-Site-Name" `
    -SysvolPath "C:\Windows\SYSVOL" `
    -Force:$true
    
  4. 将 windows7 升级为 bj.cnskills.com 域控制器,安装 DNS,负责该域的正反向域名解析。升级域控制器后,用 skills\administrator 身份登陆。

    子域

    #在树域下提升为子域域控制器
    # 用于 AD DS 部署的 Windows PowerShell 脚本
    #
    
    Import-Module ADDSDeployment
    Install-ADDSDomain `
    -NoGlobalCatalog:$false `
    -CreateDnsDelegation:$true `
    -DatabasePath "C:\Windows\NTDS" `
    -DomainMode "WinThreshold" `
    -DomainType "ChildDomain" `
    -InstallDns:$true `
    -LogPath "C:\Windows\NTDS" `
    -NewDomainName "bj" `
    -NewDomainNetbiosName "CN" `
    -ParentDomainName "cnskills.com" `
    -NoRebootOnCompletion:$false `
    -SiteName "Default-First-Site-Name" `
    -SysvolPath "C:\Windows\SYSVOL" `
    -Force:$true
    
    

    右键属性→新建条件转发器

    image-20220517164934509

    image-20220517165008447

    image-20220517165042431

    开启至此林中的反向解析

    image-20220517165210746

  5. 把云平台其他 windows 主机加入到 skills.com 域。

    netdom join 10.10.10.101 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    netdom join 10.10.10.103 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    netdom join 10.10.10.104 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    netdom join 10.10.10.105 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    netdom join 10.10.10.106 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    netdom join 10.10.10.107 /d:skills.com  /ud:administrator /pd:Qwer1234  /uo:administrator /po:Qwer1234    /reboot
    
  6. 在 windows1 上安装证书服务,证书颁发机构有效期为 20 年,颁发证书有效期 10 年,

    证书信息:

    • 公用名=skills.com,
    • 国家=CN,
    • 省=Beijing,
    • 城市=Beijing,
    • 组织=Skills,
    • 组织单位=System。

    image-20220325213046883

    image-20220325213120513

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

  8. 在 windows2 上安装从属证书服务。

    image-20220328130537169

    image-20220328131033939

    image-20220328131135252

    image-20220328131203729

    image-20220328131510673

    image-20220328131540479

    image-20220328131922761

    image-20220328132011585

    image-20220328132051506

  9. 在 windows1 上新建名称为 manager、dev、sale 的 3 个组织单元;每个组织单元内新建与组织单元同名的全局安全组;每个组内新建 20 个用户:行政部 manager101-manager120、开发部 dev101-dev120、营销部 sale101-sale120,所有用户只能每天 8:00-18:00 可以登录,不能修改其口令,密码永不过期。

    创建用户组织单元

    #创建组织单元
    dsadd  ou ou=manager,dc=skills,dc=com;
    #在组织单元内创建组
    dsadd  group cn=manager,ou=manager,dc=skills,dc=com; 
     for ($i=101;$i -le 120;$i=$i+1)
    {
          
           
        #在组织单元内循环创建用户
        dsadd user cn=manager$i,ou=manager,dc=skills,dc=com -pwd Qwer1234 -upn manager$i -pwdneverexpires yes; 
    	#修改用户登陆时间
    	net user manager$i /time:M-SU,08:00-18:00;
        #把组织单元内用户加入组织单元内的组
        dsmod group cn=manager,ou=manager,dc=skills,dc=com -addmbr cn=manager$i,ou=manager,dc=skills,dc=com;
    }
    #创建组织单元
    dsadd  ou ou=sale,dc=skills,dc=com;
    #在组织单元内创建组
    dsadd  group cn=sale,ou=sale,dc=skills,dc=com; 
     for ($i=101;$i -le 120;$i=$i+1)
    {
          
           
        #在组织单元内循环创建用户
        dsadd user cn=sale$i,ou=sale,dc=skills,dc=com -pwd Qwer1234 -upn sale$i -pwdneverexpires yes; 
    	#修改用户登陆时间
    	net user sale$i /time:M-SU,08:00-18:00;
        #把组织单元内用户加入组织单元内的组
        dsmod group cn=sale,ou=sale,dc=skills,dc=com -addmbr cn=sale$i,ou=sale,dc=skills,dc=com;
    }
    #创建组织单元
    dsadd  ou ou=dev,dc=skills,dc=com;
    #在组织单元内创建组
    dsadd  group cn=dev,ou=dev,dc=skills,dc=com; 
     for ($i=101;$i -le 120;$i=$i+1)
    {
          
           
        #在组织单元内循环创建用户
        dsadd user cn=dev$i,ou=dev,dc=skills,dc=com -pwd Qwer1234 -upn dev$i -pwdneverexpires yes; 
    	#修改用户登陆时间
    	net user dev$i /time:M-SU,08:00-18:00;
        #把组织单元内用户加入组织单元内的组
        dsmod group cn=dev,ou=dev,dc=skills,dc=com -addmbr cn=dev$i,ou=dev,dc=skills,dc=com;
    }
    
    

    image-20220328173315066

    image-20220328173216206

(二)组策略

【任务描述】 为了帮助系统管理员对计算机或是特定用户来进行不同配置,请采用组策略,实现软件、计算机和用户的策略设置。

  1. 部署软件 powershell7.2.msi,让域中主机自动安装 powershell(从物理机复制 powershell7.2.msi 到 windows1 的 C:\soft)。

    创建文件夹;上传软件

    image-20220517101415764

    设置共享文件夹

    image-20220517101459444

    右键软件安装→属性

    image-20220517101736273

    image-20220517102142802

    选择要部署的软件

    image-20220517102219064

    配置完成结果截图

    image-20220517102500356

    更新组策略

    #更新组策略
    gpupdate
    #强制更新
    gpupdate /force 
    
  2. 域中主机(含域控制器)自动申请“计算机”模板证书,自动注册“工作站身份验证”模板证书,该模板可用作“服务器身份验证”。 windows3 和 windows4 之间通信采用 IPSec 安全连接,采用计算机证书验证。

    image-20220517170111220

    image-20220517170140825

    image-20220517170436479

    服务器身份验证

    image-20220517171428377

    image-20220517171505276

    image-20220517171527179

    image-20220517171552027

    image-20220517171615601

    image-20220517171633003

    更新windows1;windows3-windows4组策略

    image-20220517171722724

    验证测试windows3-windows4的联通性

    ping 10.10.10.104

    查看高级安全防火墙 主模式

    image-20220517172142069

    组策略信任证书颁发机构

  3. 拒绝 dev 组从网络访问域控制器,允许 manager 组本地登录域控制器。

    image-20220517173103505

    image-20220517173449551

  4. 登录时不显示用户名,不显示上次登录,无须按 Ctrl+Alt+Del。

    image-20220517173803876

    image-20220517173720928

    image-20220517173603877

  5. 登录计算机时,在桌面新建名称为 chinaskills 的快捷方式,目标为 https://www.chinaskills-jsw.org,快捷键为 Ctrl+Shift+F6

    image-20220517210414161

  6. 为正在登录此计算机的所有用户设置漫游配置文件路径为 windows1 的 C:\share,每个用户提供单独的配置文件文件夹。

    image-20220517174503753

    image-20220517174806358

    image-20220517174927688

  7. 用户的主文件夹为 windows1 的 C:\home,驱动器号为 X。

    image-20220517175332848

    image-20220517175131341

    image-20220517175427920

  8. 每个用户的“文档”文件夹重定向到windows1的C:\Document,为每一用户创建一个文件夹。

    image-20220517201311342

    image-20220517180104261

  9. 所有域用户使用漫游用户配置文件,配置文件存储在 windows1 的 C:\Profiles 文件夹,为每个用户提供单独的配置文件文件夹。

  10. 新建 C:\DocShare 共享文件夹,共享名称为 ShareDoc,管理员组有完全访问权限,其他用户有只读权限;在 AD DS 中发布该共享。

    image-20220517180845262

    image-20220517180928317

    image-20220517181052549

  11. 允许 manager1 用户远程登录到域控制器,manager1 登录系统时,对 windows1的C:\DocShare 共享文件夹映射驱动器 Z。D2

    image-20220519094933715

    image-20220517201939002

    image-20220517202357490

  12. 拒绝用户对任何可移动存储类的权限 D3

    image-20220517202555148

    image-20220517202622146

(三)DHCP 服务

【任务描述】 为了提高 IP 地址的使用率,减少 IT 技术人员的工作量,请采用 DHCP 服务器,实现 IP 地址及其他网络参数的动态分配。

  1. 配置 windows4 和 windows5 为 DHCP 服务器,DHCP IPv4 的作用域名称为 skills,地址范围为 10.10.10.10-10.10.10.19,租约期 3 小时,网关为 10.10.10.254,DNS 为 10.10.10.101 和 10.10.10.102,DNS 域名为 skills.com。

    image-20220512144851488

    image-20220512145022993

    image-20220512145111569

    image-20220512145131997

    image-20220512145156077

  2. 在 windows4 上安装 WDS,部署安装 Windows Server 2022 Datacenter Core。

    需要先添加一个ISO镜像并挂载

    image-20220512150016330

    image-20220512150103548

    image-20220512150133458

    image-20220512154109026

    image-20220512154119968

    image-20220512154253457

    image-20220512154349550

    image-20220512154402289

    image-20220512154430592

    image-20220512154509328

    image-20220512154524653

  3. 两台 DHCP 服务器实现故障转移,故障转移关系名称为 dhcp,最长客户端提前期为 2 小时,模式为“负载平衡”,负载平衡比例各为 50%,状态切换间隔 60 分钟,启用消息验证,共享机密为 Pass-1234。

    image-20220512145317361

    image-20220512145348289

    image-20220512145617570

(四)文件共享

【任务描述】为了使局域网中的特定用户,能够访问共享文件夹内的特定资源,请采用文件共享,实现共享资源的安全访问。

  1. 在 windows1 创建用户主目录共享文件夹:本地目录为D:\share\home,共享名为 home,允许所有域用户可读可写。在本目录下为所有用户添加一个以名称命名的文件夹,该文件夹将设置为所有域用户的 home 目录,用户登录计算机成功后,自动映射挂载到 H 卷。禁止用户在该共享文件中创建“*.exe, *.bat, *.sh”文件,文件组名和模板名为 my。

    压缩磁盘盘符为D

    image-20220518084544668

    image-20220518084706001

    image-20230808082241766

    image-20230808082347680

    image-20220512160720637

  2. 创建 manager 组共享文件夹:本地目录为 D:\share\manager,共享名为 manager,仅允许 manager 用户组成员拥有完全权限,该共享对其他组成员不可见。

    image-20220512161025837

    image-20220512161038127

    image-20220512161048960

  3. 创建 public 公共共享文件夹:本地目录为 D:\share\public,共享名为 public,仅允许 manager 用户组成员拥有更改权限,其他认证用户只读权限。

    image-20220512161258335

    image-20220512161308242

    image-20220512161317249

(五)DFS 服务

【任务描述】 为建立一个高效率的存储架构,请采用 DFS,实现集中管理共享文件。

  1. 在 windows3 至 windows5 的 C 分区划分 2GB 的空间,创建NTFS 分区,驱动器号为 D。

    image-20220512144556293

    image-20220512144618963

    image-20220512144658543

    image-20220512144726401

  2. 配置 windows3 为 DFS 服务器,命名空间为 DFSROOT,文件夹为 Pictures;实现 windows4 的 D:\Pics 和 windows5 的 D:\Images 同步。

    image-20220511193303381

    image-20220511193409477

    image-20220511193430199

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vzx2Ag3-1691628635997)(https://lvcycy.oss-cn-beijing.aliyuncs.com/2022/Win/image-20220511193448770.png)]

    image-20230808083201454

    image-20220511193526318

    image-20220511193548288

    在Windows4和Windows5分别在D盘上创建Pics和Images文件夹并设置共享

    image-20220511193633012

    image-20220511193741043

    image-20220511193755889

    image-20220511193809362

    image-20220511193818308

    image-20220511193828898

    image-20220511193841623

    image-20220511193852003

  3. 配置 windows3 的 DFS IPv4 使用 34567 端口;限制所有服务的IPv4 动态 RPC 端口从 8000 开始,共 1000 个端口号。

    # 开启DFS IPv4使用的34567端口
    Set-DfsrServiceConfiguration -RPCPort 34567
    # 限制所有服务的IPv4动态RPC端口从8000开始共1000个端口号。
    netsh int ipv4 set dynamicport tcp start = 8000 num = 1000
    netsh int ipv4 set dynamicport udp start = 8000 num = 1000
    

(六)Web 服务

【任务描述】 为客户获取公司产品信息和企业宣传的需要,创建安全动态网站,请采用 IIS 搭建 Web 服务。

  1. 把 windows3 配置为 ASP 网站,网站仅支持 dotnet CLR v4.0,站点名称为 asp。

    默认安装dotnetCLRv4.0

    image-20220520090702013

    image-20220520102958700

    image-20220520090844706

    image-20220520091328969

  2. http 和 https 绑定本机外部网络 IP 地址,仅允许使用域名访问,启用 HSTS,实现 http 访问自动跳转到 https。

    image-20230808092743726

  3. 网站目录为 C:\IIS\Contents,主页文档 index.aspx 的内容为"HelloAspx"。

    注意主页文件后缀

    image-20220520091228245

    image-20220520091758660

    image-20220520092018948

    image-20220520092228306

    image-20220520103402441

    image-20220520103635976

  4. 启用 windows 身份验证,只有通过身份验证的用户才能访问到该站点。

    image-20220520094248193

  5. 新建虚拟目录 dev,对应物理目录 C:\development,该虚拟目录启用 windows 身份验证,只有通过身份验证的用户才能访问。

    image-20220520092444415

    image-20220520092605531

    image-20220520094054504

    image-20220520094202662

  6. 由 linux1 提供证书服务,使用 windows5 和 linux5 测试。

    [root@linux1 ~]# openssl genrsa -out skills.key
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ..................................................................................................+++++
    .....+++++
    e is 65537 (0x010001)
    [root@linux1 ~]# openssl req -new -key skills.key -out skills.csr
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [XX]:CN    
    State or Province Name (full name) []:Beijing
    Locality Name (eg, city) [Default City]:Beijing
    Organization Name (eg, company) [Default Company Ltd]:Skills
    Organizational Unit Name (eg, section) []:System
    Common Name (eg, your name or your server's hostname) []:windows.skills.com     
    Email Address []:\
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    [root@linux1 ~]# vim ssl.conf
    subjectAltName = DNS.1:*.skills.com
    [root@linux1 windows-ca]# openssl ca -in skills.csr -extfile ssl.conf -out skills.crt -days 3650
    Using configuration from /etc/pki/tls/openssl.cnf
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 9 (0x9)
            Validity
                Not Before: May 11 20:33:22 2022 GMT
                Not After : May  8 20:33:22 2032 GMT
            Subject:
                countryName               = CN
                stateOrProvinceName       = Beijing
                organizationName          = Skills
                organizationalUnitName    = System
                commonName                = windows.skills.com
            X509v3 extensions:
                X509v3 Subject Alternative Name: 
                    DNS:*.skills.com
    Certificate is to be certified until May  8 20:33:22 2032 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    [root@linux1 ~]# openssl pkcs12 -export -clcerts -in skills.crt -inkey skills.key -out skills.pfx
    [root@linux1 windows-ca]# sz skills.pfx
    

    image-20220512145848132

    image-20220512145916960

  7. 客户端访问时,必需有 SSL 证书,证书模板为“管理员”,使用windows5测试。

    image-20230808092530288

    image-20230808092546578

(七)打印服务

【任务描述】为了提高打印服务效率,节省成本,请采用共享打印服务,实现共享打印的安全性。

  1. 在 windows4 上安装打印机,驱动程序为“MS Publisher Color Printer”,名称和共享名称均为“SkillsPrinter”;在域中发布共享;使用组策略部署在"Default Domain Policy"的计算机。

    image-20220524155357166

    image-20220524155433606

    image-20220524155453375

    image-20220524155537444

    image-20220524155550873

    image-20220524155605695

    在域中发布共享

    image-20220524155712267

    image-20220524155733774

    image-20220524155826719

    image-20220524155845184

    image-20220524160001807

  2. 通过浏览器访问打印机时,启用匿名身份认证,匿名用户为dev1。

    image-20220524160903202

    image-20220524161046395

  3. 客户端访问时,必需有 SSL 证书,证书模板为“管理员”,使用 windows5 测试。

    此处做法同web题最后一问

(八)FTP 服务

【任务描述】为了提高文件的共享性,对用户进行透明和可靠高效地数据传送,请采用 FTP 服务器,实现文件安全传输。

  1. 把 windows4 配置为 FTP 服务器,FTP 站点名称为 ftp,站点绑定本机 IP 地址,站点根目录为 C:\ftp\ftproot。

    安装

    image-20220525093850009

    image-20220525094043469

    配置

    image-20220525094629035

    image-20220525094427015

    image-20220525094710788

    image-20220525094856565

    题目要求与用户隔离后期在更改

    image-20220525095055156

  2. 站点通过 Active Directory隔离用户,使用 manager1和manager2 测试。

    image-20220525095215098

    image-20220525095342780

    image-20220525095429635

    到域控制器上配置ADSI编辑器

    【1】右键连接到

    image-20220525095800245

    【2】找到manager1和manager2用户如果没有执行创建

    创建隔离文件夹

    image-20220525100651992

    image-20220525100853914

    image-20220525101059138

    找到msIIS-FTPDir 和msIIS-FTPRoot

    image-20220525101402382

    image-20220525101624814

  3. 设置 FTP 最大客户端连接数为 100。设置无任何操作的超时时间为 5 分钟,设置数据连接的超时时间为 1 分钟。

    image-20220525101851844

(九)脚本

【任务描述】 为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作。

  1. 在 windows4 上编写 C:\CreateFile.ps1 的 powershell 脚本,创建20 个文件 C:\test\File00.txt 至 C:\test\File19.txt,如果文件存在,则首先删除后,再创建;每个文件的内容同主文件名,如 File00.txt 文件的内容为“File19”。

    $path="C:\test"
    if( -not (Test-Path $path)){
          
          
         		mkdir $path
    }
    for ($i=0;$i -lt 20;$i=$i+1)
    {
          
              
    		 $str=if($i -lt 10){
          
          "File0"+$i}else{
          
          "File"+$i}
         if(Test-Path $path\$str.txt){
          
          
            Remove-Item -Path $path\$str.txt -Recurse
         }
         echo $str > $path\$str.txt
    }   
    
  2. 在 windows5 上编写 C:\CreateDir.ps1 的 powershell 脚本,创建 20 个文件夹 C:\test\dir00 至 C:\test\dir19,如果文件夹存在,则首先删除 后,再创建。

    $path="C:\test"
    for ($i=0;$i -lt 20;$i=$i+1)
    {
          
          
    	$str=if($i -lt 10){
          
          "dir0"+$i}else{
          
          "dir"+$i}
    	if( -not (Test-Path $path\$str)){
          
          
    		mkdir $path\$str
    		continue
    	}
    	Remove-Item -Path $path\$str -Recurse
    	mkdir $path\$str
    }
    

(八)BitLocker

【任务描述】为了更好地保护计算机中的数据,请采用 BitLocker,加密Windows 操作系统卷上存储的数据。

  1. 将windows4的D盘启用 BitLocker,使用密码解锁驱动器,仅加密已用磁盘空间,使用 XTS-AES 加密模式,启用自动解锁。

    image-20220513211051379

    image-20220513211151189

    image-20220513211234439

    image-20220513211307706

    image-20220513211327998

    image-20220513211349125

    image-20220513211422674

三、Linux 服务

(一)DNS 服务

【任务描述】 创建 DNS 服务器,实现企业域名访问。

#激活网卡
nmcli connection up ens3
  1. 设置所有 linux 服务器的时区设为“上海”,本地时间调整为实际时间。

    在所有机器上执行

    [root@linux1 ~]# timedatectl set-timezone Asia/Shanghai
    
  2. 利用 chrony 配置 linux1 为其他 linux 主机提供 NTP 服务。

    编辑yaml脚本一件部署时间服务器

    /root/ansible/files/chrony_server.conf服务端配置文件

    #服务端配置文件  修改这两行  
    3 pool 127.0.0.1 iburst  #指定服务端
    23 allow 10.10.20.0/24	 #指定客户端允许网段
    

    /root/ansible/files/chrony_clent.conf客户端配置文件

    #客户端配置文件  修改第三行    
    3 pool linux1.skills.com iburst	#指向服务端 可以是域名或IP地址
    

    编辑playbook剧本一键部署chrony服务

    ---
    #chrony
    - hosts: all 
      tasks:
        - name: yum install
          yum:      		#使用yum模块安装chrony并启动
            name: chrony
            state: present
        - name: set chrony server
          copy:				#使用copy模块复制事先写好的chrony服务端配置文件
            force: true
            src: /root/ansible/files/chrony_server.conf
            dest: /etc/chrony.conf
            mode: '0644'	#文件权限
          when: ansible_hostname == "linux1" #when模块判定hostname是否等于linux1,如果是则复制
        - name: set chrony clent
          copy:				#使用copy模块复制事先写好的chrony客户端配置文件
            force: true
            src: /root/ansible/files/chrony_clent.conf
            dest: /etc/chrony.conf
            mode: '0644'
          when: ansible_hostname != "linux1" #when模块判定hostname是否等于linux1,如果不是则复制
        - name: run chrony
          service:			#使用服务模块 重启chronyd服务
            name: chronyd
            state: restarted
            enabled: yes 	#指定开机自启
    
  3. 利用 bind9 软件,配置 linux1 为主 DNS 服务器,采用 rndc 技术提供不间断的 DNS 服务;配置 linux2 为备用 DNS 服务器。为所有 linux 主机提供冗余 DNS 正反向解析服务。

    配置linux1为dns主服务器

    #配置DNS主配置文件
    [root@linux1 ~]# dnf install bind-utils bind -y
    [root@linux1 ~]# cd /var/named/
    [root@linux1 named]# vim /etc/named.conf 
    options {
          
          
            listen-on port 53 {
          
           any; };
            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";
            secroots-file   "/var/named/data/named.secroots";
            recursing-file  "/var/named/data/named.recursing";
            allow-query     {
          
           any; };
     #以下配置添加在最下面  用于配置rndc       
     key "rndc-key" {
          
          
            algorithm hmac-md5;
            secret "pi/ZKNKUjFXWTcg9b+DWbg==";
     };
     
     controls {
          
          
            inet 10.10.20.101 port 953
                    allow {
          
           10.10.20.0、24; } keys {
          
           "rndc-key"; };
     };
    #配置设定DNS区域文件
    [root@linux1 ~]# vim /etc/named.rfc1912.zones 
     zone "skills.com" IN {
          
          						#正向区域文件			
    	   type master;						    #设置为主DNS服务器
           file "skills.com.zone";				#指定正向区域文件名
           allow-update {
          
           10.10.20.102; };  	#指定从DNS服务器
      };  
     zone "20.10.10.in-addr.arpa" IN {
          
          			#反向区域文件
           type master;							#设置为主DNS服务器
           file "skills.com.arpa";				#指定正向区域文件名
           allow-update {
          
           10.10.20.102; };		#指向从DNS服务器
      };
    #配置DNS正向反向区域文件
    [root@linux1 ~]# cd /var/named/
    #配置DNS正向区域文件
    [root@linux1 named]# cp -a named.localhost skills.com.zone
    [root@linux1 named]# vim skills.com.zone 
    $TTL 1D
    @       IN SOA  @ rname.invalid. (
                                            0       ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      @   
            A       127.0.0.1
            AAAA    ::1 
    linux1  A       10.10.20.101
    linux2  A       10.10.20.102
    linux3  A       10.10.20.103
    linux4  A       10.10.20.104
    linux5  A       10.10.20.105
    linux6  A       10.10.20.106
    linux7  A       10.10.20.107
    #配置DNS反向区域文件
    [root@linux1 named]# cp -a named.localhost skills.com.arpa
    [root@linux1 named]# vim skills.com.arpa
    $TTL 1D
    @       IN SOA  @ rname.invalid. (
                                            0       ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
            NS      @   
            A       255.255.255.0
            PTR     skills.com.
    101     PTR     linux1.skills.com.
    102     PTR     linux2.skills.com.
    103     PTR     linux3.skills.com.
    104     PTR     linux4.skills.com.
    105     PTR     linux5.skills.com.
    106     PTR     linux6.skills.com.
    107     PTR     linux7.skills.com.
    
    #启动DNS服务
    systemctl restart named
    systemctl enable  named
    #防火墙
    firewall-cmd --permanent --add-service=dns
    firewall-cmd --reload
    firewall-cmd --list-all 
    

    配置Linux2为dns辅服务器

    #配置DNS主配置文件
    [root@linux1 ~]# dnf install bind-utils bind -y
    [root@linux1 ~]# cd /var/named/
    [root@linux1 named]# vim /etc/named.conf 
    options {
          
          
            listen-on port 53 {
          
           any; }; 
            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";
            secroots-file   "/var/named/data/named.secroots";
            recursing-file  "/var/named/data/named.recursing";
            allow-query     {
          
           any; };
    #配置设定DNS区域文件
    [root@linux2 ~]# vim /etc/named.rfc1912.zones 
     zone "skills.com" IN {
          
          					#正向区域文件
           type slave;						#设置为从DNS服务器
           file "slaves/skills.com.zone";	#设置从服务器区域文件存放位置
            masters {
          
           10.10.20.101; };		#指向主DNS服务器	
      };
     zone "20.10.10.in-addr.arpa" IN {
          
          		#反向区域文件
           type slave;						#设置为从DNS服务器
           file "slaves/skills.com.arpa";	#设置DBNS从服务器区域文件存放位置
            masters {
          
           10.10.20.101; };		#指向主DNS服务器
      };
    #启动DNS服务
    systemctl restart named
    systemctl enable  named
    #防火墙
    firewall-cmd --permanent --add-service=dns
    firewall-cmd --reload
    firewall-cmd --list-all 
    

    Rndc配置

    #生成rndc加密密钥
    [root@linux1 ~]# rndc-confgen -r /dev/urandom > /etc/rndc.conf
    vim /etc/rndc.conf
    # Start of rndc.conf   #用于rndc.conf配置rndc客户端
    key "rndc-key" {
          
          
            algorithm hmac-md5;
            secret "pi/ZKNKUjFXWTcg9b+DWbg==";
    };
    
    options {
          
          
            default-key "rndc-key";       #指定密钥名称
            default-server 127.0.0.1;			#指定服务端名称
            default-port 953;							#指定侦听端口
    };
    # End of rndc.conf  
    用于named.conf配置rndc服务端  把下面配置添加到
    # Use with the following in named.conf, adjusting the allow list as needed:
    # key "rndc-key" {
          
          
    #       algorithm hmac-md5;
    #       secret "pi/ZKNKUjFXWTcg9b+DWbg==";
    # };
    # 
    # controls {
          
          
    #       inet 127.0.0.1 port 953			#指定服务端地址
    #               allow { 127.0.0.1; } keys { "rndc-key"; };		#指定允许连接的网段
    # };
    # End of named.conf
    
  4. 所有 linux 主机 root 用户使用完全合格域名免密码 ssh 登录到其他 linux 主机。

    配置服务器SSH免密钥登录

    #在linux1上生成SS密钥文件
    [root@linux1 ~]# ssh-keygen -t rsa -b 4096
    [root@linux1 ~]# cd .ssh/
    [root@linux1 .ssh]# ll
    total 20
    -rw-------. 1 root root 3389 Mar 26 18:34 id_rsa
    -rw-r--r--. 1 root root  748 Mar 26 18:34 id_rsa.pub
    #复制密钥ID到linxu2
    [root@linux1 ~]# ssh-copy-id root@linux2
    #在linux2上查看并修改配置文件
    [root@linux2 ~]# vim .ssh/authorized_keys
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCxOl3yoC7NHWC72HRuedNqqete0LTgfHIyjSTfHOb/upTG8QtuMeI6z3yNIw39HW+4WyYnardgG0pYyp5ZlSsWwLtzXNDHbtQqdSSJOjG/zpfoTliNL33S+0R4qCp98qdIs+TfKrjpyLqDwjuQeD3pIBr2Xa06Lpd4YPY3nbG8Cp/O9gXq3WCCHClxHcEslj6AxmfzLRT1N/5oer8Xbg3czdwj8TX49iXNoLw1cE89mAFoXrOhiZOYlMr3c3fxlPdIbPE6g8cJmOPAEBGu7WvnsqUZCQ+4omCeNMLZABRbXLX7h6/zH6jJh6sR2TIk0T3wK4KFTwDOLBrfgeh2z5gUwg4ry8YRUV9n5ZN11/Km0Bu2stRf6IM3yYJPmEAZztLGL28PpxqZ9A4DNSsiRorZQpC4OCG/uZdDdyRKG/9DC+pnF00H33R3vlYef/ntN0Qnx8a9gDW8ENJ66KoJqH0PMDlCDwl0NjBSziOREeACKbU0eGTExHfHDIA+QtKsfMbJu+wDHEOEDMbb5JiFdFXBqTzbMtiFBCLfubONVMX6JUXHe5kzXH6/HYs23f8XFha1D9AmBhM7TpFDLl1khPv9MFOjQi5W6Mci7vcE9tVK1nMyZ6FueZ/8jB3n9+vbOGnzGC85hSRnnfFQstn16AM5yXmnU/oaFZWmCsniekHu5Q== [email protected]    #主要修改linux1-7的主机名称其他不变
    #将修改过的文件传回Linux1
    [root@linux2 ~]# scp .ssh/authorized_keys root@linux1:/root/.ssh/
    #将密钥文件传送到客户机
    [root@linux1 ~]# scp -pr /root/.ssh/ linux2.skills.com:/root
    [root@linux1 ~]# scp -pr /root/.ssh/ linux3.skills.com:/root
    [root@linux1 ~]# scp -pr /root/.ssh/ linux4.skills.com:/root
    [root@linux1 ~]# scp -pr /root/.ssh/ linux5.skills.com:/root
    [root@linux1 ~]# scp -pr /root/.ssh/ linux6.skills.com:/root
    [root@linux1 ~]# scp -pr /root/.ssh/ linux7.skills.com:/root
    
  5. 配置 linux1 为 CA 服务器,为所有 linux 主机颁发证书,不允许修改/etc/pki/tls/openssl.conf。CA 证书有效期 20 年,CA 颁发证书有效期均为 10 年,

    证书信息:

    • 国家=“CN”,

    • 省=“Beijing”,

    • 城市=“Beijing”,

    • 组织=“Skills”,

    • 组织单位=“System”,

    • 公用名=skills.com。

  6. 证书路径均为/etc/ssl/skills.crt,私钥路径均为/etc/ssl/skills.key,chrome 浏览器访问 https 网站时,不出现证书警告提示信息。

(二)apache2 服务

【任务描述】为了搭建快速、可靠的网页服务器,请采用 Apache 服务器,实现对企业网站的安全有效访问。

  1. 配置 linux2 为 apache2 服务器,安装 apache2,http 访问时自动跳转到 https。

    #安装Apach服务
    [root@linux2 ~]# yum install -y httpd  mod_ssl
    [root@linux2 ~]# ll   #查看申请好的证书
    total 20
    -rw-------. 1 root root 1096 Mar 15 13:34 anaconda-ks.cfg
    -rw-------. 1 root root 5659 Mar 27 23:50 skills.crt
    -rw-------. 1 root root 1212 Mar 27 23:50 skills.csr
    -rw-------. 1 root root 1704 Mar 27 23:50 skills.key
    #编辑证书配置文件
    [root@linux2 ~]# vim /etc/httpd/conf.d/ssl.conf 
    85 SSLCertificateFile /root/skills.crt
    93 SSLCertificateKeyFile /root/skills.key
    #在配置文件后面添加下面配置http跳转https
    [root@linux2 ~]# vim /etc/httpd/conf/httpd.conf  #在最后面添加
    <virtualhost *:80>
    RewriTeEngine on
    RewriteRule ^(.*) https://www.skills.com/ [L]
    </virtualhost>
    <virtualhost *:443>
            ServerAlias *.skills.com
            ServerName www.skills.com
            RewriteEngine ON
            RewriteCond "%{HTTP_HOST}" "!^www." [NC]
            RewriteRule ^/(.*)$ https://www.skills.com/$1 [R=301]
            documentroot /var/www/html/
            directoryindex  index.html
            SSLEngine on
            SSLVerifyDepth 10
            SSLVerifyClient require
            SSLCertificateFile /root/linux2.crt
            SSLCertificateKeyFile /root/linux2.key
            SSLCACertificateFile /root/linux2.pem
    </virtualhost>
    IncludeOptional conf.d/*.conf
    
  2. 使用 skills.com 或 any.skills.com(any 代表任意网址前缀,用 linux2.skills.com 和 web.skills.com 测试)访问时,自动跳转到www.skills.com。

    更改DNS

      1 $TTL 1D
      2 @       IN SOA  @ rname.invalid. (
      3                                         0       ; serial
      4                                         1D      ; refresh
      5                                         1H      ; retry
      6                                         1W      ; expire
      7                                         3H )    ; minimum
      8         NS      @
      9         A       127.0.0.1
     10         AAAA    ::1
     11 linux1  A       10.10.20.101
     12 linux2  A       10.10.20.102
     13 linux3  A       10.10.20.103
     14 linux4  A       10.10.20.104
     15 linux5  A       10.10.20.105
     16 linux6  A       10.10.20.106
     17 linux7  A       10.10.20.107
     18 *       A       10.10.20.102 					#统配符泛匹配
     19 www     A       10.10.20.102
    
  3. 客户端访问时,必需有 SSL 证书。由 linux 提供证书服务,使用 linux3 和 windows3 测试。

    基本证书配置

    #创建证书基本文件夹
    [root@linux1 ~]# mkdir -p /etc/pki/CA/{certs,crl,newcerts,private}
    #进入到私钥存放文件夹
    [root@linux1 ~]# cd /etc/pki/CA/private
    #生成私钥文件
    [root@linux1 private]# umask 077; openssl genrsa -out cakey.pem 4096
    [root@linux1 private]# cd ..
    #生成根证书
    [root@linux1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300
    #创建签发证书需要的文件
    [root@linux1 CA]# touch index.txt
    [root@linux1 CA]# echo 01 > /etc/pki/CA/serial
    
    

    指定配置文件vim /tmp/openssl.cnf

    [root@linux1 ~]# cp  /etc/pki/tls/openssl.cnf /tmp/
    [root@linux1 ~]# vim /tmp/openssl.cnf 
    144 req_extensions = v3_req   #启用请求扩展
    238 [ v3_req ]				  #定义扩展参数
    239 
    240 # Extensions to add to a certificate request
    241 
    242 basicConstraints = CA:FALSE     #基本约束
    243 keyUsage = nonRepudiation, digitalSignature, keyEncipherment   #密钥用法
    244 subjectAltName = @alt_names	    #定义扩展参数
    245 [ alt_names ]					
    246 DNS.1 = www.skills.com			#指定DNS扩展参数
    247 DNS.2 = linux2.skills.com
    

    指定临时配置文件生成证书请求文件

    [root@linux1 CA]# umask 077; openssl genrsa -out linux2.key 4096
    #使用openssl制作证书请求文件
    [root@linux1 CA]# openssl req -new -nodes -keyout linux2.key -out linux2.csr -config /tmp/openssl.cnf
    #查看证书请求文件的内容
    [root@linux1 CA]# openssl req -text -noout -in linux2.csr 
    #使用 openssl 签署带有 SAN 扩展的证书请求
    [root@linux1 CA]# openssl ca -policy policy_anything -out linux2.crt -config /tmp/openssl.cnf -extensions v3_req -in linux2.csr -days 3650
    #签署后,查看证书的内容
    [root@linux1 CA]# openssl x509 -text -noout -in linux2.crt
    

    使用命令行申请带扩展的证书

    #证书请求文件
    openssl req -new -sha256 \
       -key skills.key \
       -subj "/C=CN/ST=Beijing/L=Beijing/O=Skills/OU=System/CN=www.skills.com" \
       -reqexts SAN \
       -config <(cat /etc/pki/tls/openssl.cnf \
            <(printf "[SAN]\nsubjectAltName=DNS:www.skills.com,DNS:linux2.skills.com")) \
       -out skills.csr
    #签发证书
    openssl ca -in skills.csr \
     -extensions SAN \
     -config <(cat /etc/pki/tls/openssl.cnf \
            <(printf "[SAN]\nsubjectAltName=DNS:www.skills.com,DNS:linux2.skills.com")) \ 
     -out skills.crt
     
    

    使用命令生成带扩展的证书

    #生成根证证书私钥
    openssl genrsa -des3 -out ca.key 2048
    #生成根证书
    openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt \
        -subj "/C=CN/ST=Beijing/L=Beijing/O=System/OU=Skills/CN=skills.com"
    #生成服务器证书私钥
    openssl genrsa -des3 -out server.key 2048
    #生成证书请求文件
    openssl req -new \
        -sha256 \
        -key server.key \
        -subj "/C=CN/ST=Beijing/L=Beijing/O=System/OU=Skills/CN=skills.com" \
        -reqexts SAN \
        -config <(cat /etc/pki/tls/openssl.cnf \
            <(printf "[SAN]\nsubjectAltName=DNS:www.skills.com,DNS:*.skills.com")) \
        -out server.csr
    #签发证书
    openssl ca -in server.csr \
            -md sha256 \
            -keyfile private/cakey.pem \
        -cert cacert.pem \
        -extensions SAN \
        -config <(cat /etc/pki/tls/openssl.cnf \
            <(printf "[SAN]\nsubjectAltName=DNS:www.skills.com,DNS:*.skills.com")) \
        -out server.crt
     #查看证书请求文件   
     openssl req -text -noout -verify -in server.csr
     #查看签发好的证书
     openssl x509 -in server.crt -noout -text
    

    生成客户端证书

    #生成实验
    [root@linux1 CA]# umask 077; openssl genrsa -out client.key 4096
    #生成证书请求文件
    [root@linux1 CA]# openssl req -new -key client.key -out client.csr
    #签发证书
    [root@linux1 CA]# openssl ca -in client.csr -out client.crt -days 3650
    #合并成证书链
    [root@linux1 CA]# openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
    #转换证书链格式
    [root@linux1 CA]# openssl pkcs12 -in /etc/ssl/client.pfx -out /etc/ssl/all.pem -nodes
    #客户端个人证书的公钥  
    openssl pkcs12 -in client.pfx -out client.crt -nokeys   
    #客户端个人证书的私钥
    openssl pkcs12 -in client.pfx  -out client.key -nocerts -nodes       
    #也可以转换为公钥与私钥合二为一的文件;    #客户端公钥与私钥,一起存在all.pem中 
    openssl pkcs12 -in client.pfx -out all.pem -nodes 
    #把证书放到信任目录
    cd /etc/pki/ca-trust/source/anchors/
    #执行命令信任证书
    /bin/update-ca-trust
    

    Windows服务器chrome浏览器操作

    1、把根证书文件cacert.pem跟申请的证书文件linux2.crt复制到客户端并修改cacert.pem后缀为cacert.crt

    2、把客户端证书链client.pfx安装到客户机

    安装这三个证书文件

  4. 关闭不安全的服务器信息,在任何页面不会出现系统和 WEB 服务器版本信息。

    ServerTokens Prod
    ServerSignature Off
    

(三)tomcat 服务

【任务描述】 根据企业需要搭建动态网站,采用 tomcat 实现该需求。

  1. 配置 linux3 和 linux4 为 Tomcat 服务器,网站默认首页内容分别为“TomcatOne”和“TomcatTwo”,使用 80 端口访问 http 和 443 端口访问 https ;由 windows1 提供证书服务,证书路径均为/etc/ssl/skills.jks,证书密码 Pass-1234,格式为 jks。

    tar解压安装Tomcat

    [root@linux4 ~]# ll
    total 195404
    -rw-------. 1 root root      1096 Mar 15 13:34 anaconda-ks.cfg
    -rw-r--r--. 1 root root         0 Mar 28 23:54 ansible.txt
    -rw-r--r--. 1 root root  11898821 Mar 21 11:22 apache-tomcat-10.0.18.tar.gz
    -rw-r--r--. 1 root root 188173501 Mar 29 18:20 openjdk-18_linux-x64_bin.tar.gz
    [root@linux4 ~]# mkdir tomcat
    [root@linux4 ~]# tar -zxvf apache-tomcat-10.0.18.tar.gz  -C tomcat
    [root@linux4 ~]# tar -zxvf openjdk-18_linux-x64_bin.tar.gz
    [root@linux4 ~]# ll
    total 12
    -rw-------. 1 root root 1096 Mar 15 13:34 anaconda-ks.cfg
    -rw-r--r--. 1 root root    0 Mar 28 23:54 ansible.txt
    drwxr-xr-x. 8 root root   96 Mar 30 02:16 jdk-18
    drwxr-xr-x. 9 root root  238 Mar 30 03:19 tomcat
    

    启动tomcat

    #添加Java环境变量
    [root@linux4 ~]# vim /etc/profile
    export JAVA_HOME=/root/jdk-18
    export PATH=$JAVA_HOME/bin:$PATH:$CATALINA_HOME/bin
    #查看是否成功添加环境变量
    [root@linux4 ~]# java -version 
    openjdk version "18" 2022-03-22
    OpenJDK Runtime Environment (build 18+36-2087)
    OpenJDK 64-Bit Server VM (build 18+36-2087, mixed mode, sharing)
    [root@linux4 ~]# cd tomcat/bin/    #此路径为tomcat解压后主配置文件路径
    [root@linux4 bin]# ./startup.sh    #启动tomcat
    [root@linux4 bin]# ./shutdown.sh   #关闭tomcat
    #查看端口是否开启
    [root@linux4 bin]# ss -ltunp       #8005是tomcat默认远程端口 8080是tomcat默认网站     
    

    查看默认网站

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCjaqhdG-1691628636007)(Lin/7.png)]

    https证书申请

    #生成密钥库
    keytool -genkey -alias tomcat -keyalg RSA -keystore /etc/ssl/skills.jks -storepass dcncloud  -ext SAN=dns:linux3.skills.com,dns:linux4.skills.com -dname "CN=linux3.skills.com,CN=linux4.skills.com,OU=System,O=Skills,L=Beijing,S=Beijing,C=CN"
    #查看密钥库内容可以看到 DNS扩展信息
    keytool -list -v -keystore /etc/ssl/skills.jks -storepass dcncloud
    #生成证书请求文件
    keytool -certreq -file /etc/ssl/skills.csr -keystore /etc/ssl/skills.jks -storepass dcncloud -alias tomcat  -ext SAN=dns:linux3.skills.com,dns:linux4.skills.com
    #查看证书请求文件内容  可以看到 DNS扩展信息
    keytool -printcertreq -file skills.csr -v
    #查看证书请求文件   使用证书请求文件到window1上申请证书
    cat skills.csr   
    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIDAjCCAeoCAQAwbzELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaWppbmcxEDAO
    BgNVBAcTB0JlaWppbmcxDzANBgNVBAoTBlNraWxsczEPMA0GA1UECxMGU3lzdGVt
    MRowGAYDVQQDExF0b21jYXQuc2tpbGxzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
    ggEPADCCAQoCggEBAKGYz+vzEIqHpVLW9xluwH334GRsyqkkmKiyNF/tqcMqXPT8
    Zzs6eckZfdiGUOV5N/XPIvezL1G52YZjBv3vJJXtkq0nfnTjviP6svKvY2eDK+R5
    VQqRzv5Jxc612bA/JFP+lgbWls0EhnFhozywFMv7uLY0yReS7l4RNYtIJk9cQ6jS
    UI6r63iM85+ehwvy57J9qp9xlFIcBxosDpteF7B3Z/xFpjd4GZG8lIu/4XlBWwMg
    3twhU0A75PEzGxS0EPFeDga1OyToiUQjuTYqWWENfU49TNtucV2hVTWK7xNnN6Ef
    vu1RW0bYhPA66ChmiM63w8gAWatbCOJdMnUOnEcCAwEAAaBOMEwGCSqGSIb3DQEJ
    DjE/MD0wHQYDVR0OBBYEFKBX70ElfBaLDbEHpkCm7eiH18MOMBwGA1UdEQQVMBOC
    EXRvbWNhdC5za2lsbHMuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQA5DjEVBjFXLteF
    SWduXRi1bVEgfTDk8MZCT5qiqwgTdBUfBAZHPjxC4GWfZN+U935EATpI1lrQJdYD
    P9Pd6W7g4ISnjG6muaM84ulm49qKY0UMz0JO1QiqKv/9fcocjjEqFmu0+E4oc8AA
    SP1JkwBeLZpk1RwVRrtu9a5Br5Mg0L8RLbZlnEF+pcmJKmf0h5PyShpPJ3Y/l2ak
    GU9jB96Nv/buO2HcEJBHgFR1A0J8CUvfIXFzFi0szQnPbteZNWY6baT1xJNdd8Ij
    6bZi0oR109W2fDIgyqLJoeJew7PU/b1yMMXIwCWTkNElOaMnu7iEFAgi2y0CIkBr
    Fq4+TGei
    -----END NEW CERTIFICATE REQUEST-----
    #把申请的证书链导入到密钥钥库中
    #导入证书链
    keytool  -importcert -alias tomcat -keystore skills.jks -file certnew.p7b
    #查看密钥库证书链内容
    keytool  -alias tomcat -list -v -keystore skills.jks -storepass dcncloud
    #在客户机上安装证书链中的两个证书
    

    https网站配置配置Linux3linux4

    [root@linux4 ~]# vim tomcat/conf/server.xml 
     68     <Connector executor="tomcatThreadPool"
     69                port="80" protocol="HTTP/1.1"    #http默认访问端口
     70                connectionTimeout="20000"
     71                redirectPort="443" />
     72     <Connector port="443" 						#https默认访问端口
     73             protocol="org.apache.coyote.http11.Http11NioProtocol"
     74             maxThreads="150"
     75             SSLEnabled="true">
     76         <SSLHostConfig>
     77             <Certificate
     78               certificateKeystoreFile="/etc/ssl/skills.jks"   #密钥库存放位置
     79               certificateKeystorePassword="dcncloud"		  #密钥库密码
     80               type="RSA" />
     81         </SSLHostConfig>
     82     </Connector>
    101     <Engine name="Catalina" defaultHost="linux4.skills.com">  #指定访问名称
    121     <Host name="linux4.skills.com"  appBase="webapps"		  #指定访问名称
    122            unpackWARs="true" autoDeploy="true">
    
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEO71ML7-1691628636007)(Lin/image-20220331150047239.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvaIHed7-1691628636007)(Lin/image-20220331150125430.png)]

  2. 配置 linux1 为 nginx 服务器,安装 nginx,默认文档 index.html 的内容为“HelloNginx”;由 windows1 提供证书服务,仅允许使用域名访问,http 访问自动跳转到 https,证书路径为/etc/ssl/skills.crt,私钥路径为/etc/ssl/skills.key。

    申请nginx证书

    [root@linux1 ssl]# openssl genrsa -out nginx.key   #生成私钥文件
    [root@linux1 ssl]# openssl req -new -key nginx.key -out nginx.csr -config /tmp/openssl.cnf  -days 3650   #创建证书请求文件
    [root@linux1 ssl]# cat nginx.csr    #复制证书请求文件 到Windows1上申请证书
    -----BEGIN CERTIFICATE REQUEST-----
    MIIDhTCCAm0CAQAwbjELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAO
    BgNVBAcMB0JlaWppbmcxDzANBgNVBAoMBlNraWxsczEPMA0GA1UECwwGU3lzdGVt
    MRkwFwYDVQQDDBBuZ2lueC5za2lsbHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
    AQ8AMIIBCgKCAQEAuJ4Q6UI3o6Da9VFGBijq5WBW2SzGcDPXvZj/t8waypTieoGP
    OwsVLCkLlQ+WeLLge6o5JGi6/9FNKuwJMJ88R3VqWpcufEoKpachW27lNvL98esx
    F22/T7vVMmCnIY37XAdXgF2ekY5wiHdxsWOLbhqm+tML6BuZTBUW+QcncV2mqt9S
    ydgBx+HNZWr2WFP8DijvieZwAZk+fzsYFKQbsdAJ9iHpOLxbLsYnPBOXHXSf0Gf1
    m3MprbcjqpspgEE6DoaC8c2ChUWiS2mnB436/O0r2jd2hbSA4Vk8dR/rGjOxo2bi
    oyNFSfsm4zCm+z4hdOvLET0lQzzevGKZkw8KUQIDAQABoIHRMIHOBgkqhkiG9w0B
    CQ4xgcAwgb0wCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwgaIGA1UdEQSBmjCBl4IR
    bGludXgxLnNraWxscy5jb22CEWxpbnV4Mi5za2lsbHMuY29tghFsaW51eDMuc2tp
    bGxzLmNvbYIRbGludXg0LnNraWxscy5jb22CEWxpbnV4NS5za2lsbHMuY29tghFs
    aW51eDYuc2tpbGxzLmNvbYIRbGludXg3LnNraWxscy5jb22CEG5naW54LnNraWxs
    cy5jb20wDQYJKoZIhvcNAQELBQADggEBAFaG9QF0lN9S2851N+ruqrl1Q/oeY3wy
    yhlIwXULDNiMS6lYma0ddXQ+ulrKOb7bOpfYP6mpg35rXGLXocyvkjJ3RM6HETCe
    C5ymLFZCmwtVeOllpqLylkNeUQR3c1NoXZUDaflCbfrHba9CxuAbRO/RvcdKrcdX
    sfGMUGpkhdV2S2mnmwrKEoWp45lJvrFNuOv8jn5wkdwYfcsLOsRhF1HLMyrOeC2g
    sWsHpMoZ3yYg8e1b+KyAgyeQDIDYlMg08eYe7nngoP+LjY4mqZaiVO1hRMMwOilm
    TUKIxsAc8efY0/15cMgCVgnFm9f5xsZPjQLDBgdvDNdHFvFBFJkfceE=
    -----END CERTIFICATE REQUEST-----
    

    申请完证书上传到 linux1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jmar765I-1691628636007)(Lin/image-20220331141140011.png)]

    转换证书格式

    [root@linux1 ssl]# ll
    total 16
    lrwxrwxrwx. 1 root root   16 Sep 22  2021 certs -> ../pki/tls/certs
    -rw-r--r--. 1 root root 2198 Mar 31 10:53 nginx.cer
    -rw-r--r--. 1 root root 1297 Mar 31 18:50 nginx.csr
    -rw-------. 1 root root 1704 Mar 31 18:50 nginx.key
    [root@linux1 ssl]#  openssl x509 -inform PEM -in nginx.cer -out nginx.crt
    [root@linux1 ssl]# ll
    total 16
    lrwxrwxrwx. 1 root root   16 Sep 22  2021 certs -> ../pki/tls/certs
    -rw-r--r--. 1 root root 2198 Mar 31 10:53 nginx.cer
    -rw-r--r--. 1 root root 2163 Mar 31 19:02 nginx.crt
    -rw-r--r--. 1 root root 1297 Mar 31 18:50 nginx.csr
    -rw-------. 1 root root 1704 Mar 31 18:50 nginx.key
    

    安装配置nginx

    [root@linux1 ~]# yum install nginx -y
    [root@linux1 ~]# systemctl restart nginx.service 
    [root@linux1 ~]# systemctl enable nginx.service 
    [root@linux1 nginx]# vim nginx.conf
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    
    # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
    include /usr/share/nginx/modules/*.conf;   #标识nginx配置文件位置
    
    events {
          
          
        worker_connections 1024;
    }
    
    http {
          
          
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        upstream ws{
          
           
        server linux3.skills.com:443;
        server linux4.skills.com:443 weight=2;
        }   
        access_log  /var/log/nginx/access.log  main;
    
        sendfile            on; 
        tcp_nopush          on; 
        tcp_nodelay         on; 
        keepalive_timeout   65; 
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        server {
          
          
            listen       80 default_server;     		#配置Http侦听端口
            listen       [::]:80 default_server;		
            server_name  nginx.skills.com;				#指定访问网站
            return 403;  								#禁止ip地址访问
            return 301 https://$server_name$request_uri;	#http跳转https
            root         /usr/share/nginx/html;			    #指定默认站点位置
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            error_page 404 /404.html;
                location = /40x.html {
          
          
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
          
          
            }
        }
        server {
          
          
            listen       443 ssl http2 default_server;  
            server_name  nginx.skills.com;				#指定默认网页
            root         /usr/share/nginx/html;
    
            ssl_certificate "/etc/ssl/nginx.crt";		#指定nginx证书位置
            ssl_certificate_key "/etc/ssl/nginx.key";	#指定nginx私钥位置
            ssl_session_cache shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_ciphers PROFILE=SYSTEM;
            ssl_prefer_server_ciphers on;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            error_page 404 /404.html;
                location = /40x.html {
          
          
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
          
          
            }
        }
    [root@linux1 nginx]# firewall-cmd --permanent --add-service=http   
    [root@linux1 nginx]# firewall-cmd --permanent --add-service=https    
    [root@linux1 nginx]# firewall-cmd --reload
    [root@linux1 nginx]# firewall-cmd --list-all
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RksE83fP-1691628636007)(Lin/image-20220331145956168.png)]

  3. 利用 nginx 反向代理,客户端通过 https://tomcat.skills.com 加密访问 Tomcat,实现 linux3 和 linux4 的两个 Tomcat 负载均衡,http 访问通过 301 自动跳转到 https。

    nginx反向代理vim /etc/nginx/nginx.conf

    [root@linux1 ssl]# cd /etc/nginx/
    [root@linux1 nginx]# vim nginx.conf
     21     upstream loads{
          
          
     22     server linux3.skills.com:443;
     23     server linux4.skills.com:443 weight=2;
     24     }
     94 server {
          
          
     95         listen       8443 ssl http2 default_server;
     96         server_name  tomcat.skills.com;
     97 
     98         proxy_redirect      off;
     99         proxy_set_header    X-Real-IP $remote_addr;
    100         proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    101         proxy_set_header    Host $http_host;
    102 
    103         ssl_certificate "/etc/ssl/nginx.crt";
    104         ssl_certificate_key "/etc/ssl/nginx.key";
    105         ssl_session_cache shared:SSL:1m;
    106         ssl_session_timeout  10m;
    107         ssl_ciphers PROFILE=SYSTEM;
    108         ssl_prefer_server_ciphers on;
    109 
    110         # Load configuration files for the default server block.
    111         include /etc/nginx/default.d/*.conf;
    112 
    113         location / {
          
          
    114                 proxy_pass https://loads;
    115         }
    116 
    117         error_page 404 /404.html;
    118             location = /40x.html {
          
          
    119         }
    120 
    121         error_page 500 502 503 504 /50x.html;
    122             location = /50x.html {
          
          
    123         }
    124     }
    

(四)NFS 服务

【任务描述】 为了使局域网中的特定用户,能够访问共享文件夹内的特定资源,请采用文件共享,实现共享资源的安全访问。

  1. 配置 linux2 为 KDC 服务器,负责 linux3 和 linux4 的验证。

    安装KDC验证服务端

    [root@linux2 ~]# yum install krb5-server krb5-libs.i686  -y   #安装KDC服务
    #修改KDC配置文件
    [root@linux2 ~]# vim /etc/krb5.conf   
    # To opt out of the system crypto-policies configuration of krb5, remove the
    # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated.
    includedir /etc/krb5.conf.d/
    
    [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
        dns_lookup_realm = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
        spake_preauth_groups = edwards25519
        default_realm = SKILLS.COM       #默认域名
        default_ccache_name = KEYRING:persistent:%{
          
          uid}
    
    [realms]           
     SKILLS.COM = {
          
                 
         kdc = linux2.skills.com             	#KDC服务端域名
         admin_server = linux2.skills.com		#KDC服务端器名称
     }
    
    [domain_realm]
     .skills.com = SKILLS.COM					#KDC域名
     skills.com = SKILLS.COM
    [root@linux2 ~]# vim /var/kerberos/krb5kdc/kdc.conf
    [kdcdefaults]		#KDC默认设置
        kdc_ports = 88
        kdc_tcp_ports = 88
        spake_preauth_kdc_challenge = edwards25519
    
    [realms] 
    SKILLS.COM = {
          
              #指向KDC域名
         #master_key_type = aes256-cts
         acl_file = /var/kerberos/krb5kdc/kadm5.acl
         dict_file = /usr/share/dict/words
         admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
         supported_enctypes = aes256-cts:normal aes128-cts:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal}
    [root@linux2 ~]# vim /var/kerberos/krb5kdc/kadm5.acl
    */[email protected]      *
    #kdc 数据库初始化
    [root@linux2 ~]# kdb5_util create -s    
    Loading random data
    Initializing database '/var/kerberos/krb5kdc/principal' for realm 'SKILLS.COM',
    master key name 'K/[email protected]'
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.
    Enter KDC database master key: 
    Re-enter KDC database master key to verify: 
    #进入kdc服务端配置
    [root@linux2 ~]# kadmin.local 
    Authenticating as principal root/[email protected] with password.
    kadmin.local:  addprinc -randkey nfs/linux3.skills.com      #添加NFS验证密钥
    kadmin.local:  addprinc -randkey nfs/linux4.skills.com		#添加NFS验证秒密钥
    kadmin.local:  listprincs #查看NFS KDC密钥
    K/[email protected]
    kadmin/[email protected]
    kadmin/[email protected]
    kadmin/[email protected]
    kiprop/[email protected]
    krbtgt/[email protected]
    nfs/[email protected]    #查看
    nfs/[email protected]	#查看
    kadmin.local:  ktadd -k /tmp/linux3 nfs/linux3.skills.com   #导出Linux3的KDC密钥
    Entry for principal nfs/linux3.skills.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/linux3.
    Entry for principal nfs/linux3.skills.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/linux3.
    kadmin.local:  ktadd -k /tmp/linux4 nfs/linux4.skills.com   #导出Linux4的KDC密钥
    Entry for principal nfs/linux4.skills.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/linux4.
    Entry for principal nfs/linux4.skills.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/linux4.
    kadmin.local:   exit
    [root@linux2 ~]# cd /tmp/
    [root@linux2 tmp]# ll     #查看导出的密钥文件
    total 8
    -rw-------. 1 root root 168 Apr  1 19:12 linux3
    -rw-------. 1 root root 168 Apr  1 19:12 linux4
    [root@linux2 ~]# systemctl start krb5kdc.service kadmin.service
    [root@linux2 ~]# systemctl enable krb5kdc.service kadmin.service
    [root@linux2 ~]# firewall-cmd --permanent --add-service=kerberos
    [root@linux2 ~]# firewall-cmd --reload
    [root@linux2 etc]# scp /etc/krb5.conf linux3:/etc/krb5.conf  	#导出KDC配置文件到Linux3
    krb5.conf            100%  793   290.1KB/s   00:00    
    [root@linux2 etc]# scp /etc/krb5.conf linux4:/etc/krb5.conf		#导出KDC配置文件到Linux4
    krb5.conf            100%  793   254.6KB/s   00:00 
    #导出linux3的C密钥文件到linux3
    [root@linux2 etc]#scp /tmp/linux3 linux3.skills.com:/etc/krb5.keytab
    #导出linux4C密钥文件到linux4
    [root@linux2 etc]#scp /tmp/linux4 linux4.skills.com:/etc/krb5.keytab
    
  2. 在 linux3 上,创建用户,用户名为 tom,uid=222,gid=222,家目录为/home/tomdir。

    创建用户

    [root@linux3 ~]# groupadd -g 222 tom   #创建指定的组id的组tom
    [root@linux3 ~]# useradd tom -u 222 -g 222 -d /home/tomdir #创建指定组id用户id家目录的用户tom
    
  3. 配置 linux3 为 NFS 服务器,目录/srv/share 的共享要求为:10.10.20.0/24 网络用户具有读写权限,所有用户映射为 tom;kdc 加密方式为 krb5p。目录/srv/tmp 的共享要求为:所有人都可以读写,都(含 root 用户)不改变身份;kdc 加密方式为 krb5p。

    安装NFS服务端配置KDC客户端

    #安装客户端KDC服务
    [root@linux3 ~]# yum install krb5-workstation krb5-libs
    #初始化KDC凭据
    [root@linux3 ~]# kinit -kt /etc/krb5.keytab nfs/linux3.skills.com
    [root@linux3 ~]# klist -k /etc/krb5.keytab      #查看KDC密钥
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
    ---- --------------------------------------------------------------------------
       2 nfs/[email protected]
       2 nfs/[email protected]
    [root@linux3 ~]# klist  						#查询登陆状态
    Ticket cache: KCM:0
    Default principal: nfs/[email protected]
    
    Valid starting       Expires              Service principal
    04/01/2022 19:18:51  04/02/2022 19:18:51  krbtgt/[email protected]
            renew until 04/01/2022 19:18:51
    #安装NFS服务端 
    [root@linux3 ~]# yum install -y nfs-utils  rpcbind  
    [root@linux3 ~]# mkdir /srv/{tmp,share} -p
    [root@linux3 ~]# vim /etc/exports     #配置NFS配置文件
    /srv/share      10.10.20.0/24(rw,anonuid=222,anongid=222,sec=krb5p)
    /srv/tmp       *(rw,no_root_squash,sec=krb5p)
    [root@linux3 ~]# systemctl restart nfs-server.service     #重启NFS服务
    [root@linux3 ~]# firewall-cmd --add-service=nfs --permanent 
    [root@linux3 ~]# firewall-cmd --add-service=rpc-bind  --permanent 
    [root@linux3 ~]# firewall-cmd --add-service=mountd   --permanent 
    [root@linux3 ~]# firewall-cmd --reload 
    
  4. 配置 linux4 为 NFS 客户端,新建/opt/share 和/opt/tmp 目录,分别挂载 linux3 上的/srv/share 和/srv/tmp。

    KDC客户端NFS客户端

    #安装客户端KDC服务
    [root@linux4 ~]# yum install krb5-workstation krb5-libs -y
    #初始化KDC凭据
    [root@linux4 ~]# kinit -kt /etc/krb5.keytab nfs/linux4.skills.com
    ##查询登陆状态
    [root@linux4 ~]# klist 
    Ticket cache: KCM:0
    Default principal: nfs/[email protected]
    
    Valid starting       Expires              Service principal
    04/01/2022 19:19:36  04/02/2022 19:19:36  krbtgt/[email protected]
            renew until 04/01/2022 19:19:36
    01/01/1970 08:00:00  01/01/1970 08:00:00  Encrypted/Credentials/v1@X-GSSPROXY:
    listprincs
    [root@linux4 ~]# mkdir /opt/{share,tmp} -p     #创建挂载文件夹
    [root@linux4 ~]# yum install -y nfs-utils      #安装NFS服务 
    [root@linux4 ~]# mount linux3.skills.com:/srv/share /opt/share   #挂载文件夹
    [root@linux4 ~]# mount linux3.skills.com:/srv/tmp /opt/tmp		 #挂载文件夹
    [root@linux4 ~]# df -h			#查看挂载
    Filesystem                    Size  Used Avail Use% Mounted on
    devtmpfs                      890M     0  890M   0% /dev
    tmpfs                         909M     0  909M   0% /dev/shm
    tmpfs                         909M  8.5M  901M   1% /run
    tmpfs                         909M     0  909M   0% /sys/fs/cgroup
    /dev/mapper/rl-root            26G   13G   14G  47% /
    /dev/loop0                     10G   10G     0 100% /mnt
    /dev/vda1                    1014M  214M  801M  22% /boot
    linux3.skills.com:/srv/tmp     26G   13G   14G  47% /opt/tmp
    linux3.skills.com:/srv/share   26G   13G   14G  47% /opt/share
    tmpfs                         182M     0  182M   0% /run/user/0
    [root@linux4 ~]# mount |grep kr   #查看Krb5p挂载
    linux3.skills.com:/srv/tmp on /opt/tmp type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5p,clientaddr=10.10.20.104,local_lock=none,addr=10.10.20.103)
    linux3.skills.com:/srv/share on /opt/share type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5p,clientaddr=10.10.20.104,local_lock=none,addr=10.10.20.103)
    
    

(五)NIS 服务

【任务描述】 为降低重复设定用户帐号密码的步骤,便于账号管理,请采用 NIS 服务器,集中管理网域中所有主机的帐号密码。

  1. 配置 linux5 为 NIS 服务器;新建 user1 和 user2 用户,用户目录分别为/home/user1 和/home/user2。采用 samba 方式共享 user1 和 user2 的 home 目录,用户测试。

    NIS服务端

    [root@linux5 ~]# dnf -y install ypserv rpcbind
    [root@linux5 ~]# hostname
    linux5.skills.com
    [root@linux5 ~]# nisdomainname
    skills.com
    [root@linux5 ~]# vim /etc/sysconfig/network
    # Created by anaconda
    NISDOMAIN=skills.com
    YPSERV_ARGS="-p 944"          #固定端口
    YPXFRD_ARGS="-p 945"		  #固定端口
    [root@linux5 ~]# vim /etc/sysconfig/yppasswdd
    YPPASSWDD_ARGS="--port 950"   #固定端口
    [root@linux5 ~]# vim /var/yp/securenets
    255.0.0.0       127.0.0.0
    255.255.255.0   10.10.20.0
    #开启服务并设置自启
    [root@linux5 ~]# systemctl enable --now rpcbind ypserv ypxfrd yppasswdd nis-domainname
    [root@linux5 ~]# usr/lib64/yp/ypinit -m   #更新NIS数据库
    #如果没有禁用selinux,更改selinux布尔值
    [root@linux5 ~]# setsebool -P nis_enabled on			
    [root@linux5 ~]# setsebool -P domain_can_mmap_files on  
    #重启服务
    [root@linux5 ~]# systemctl restart rpcbind ypserv ypxfrd yppasswdd
    #开启端口服务
    [root@linux5 ~]# firewall-cmd --add-service=rpcbind --permanent
    [root@linux5 ~]# firewall-cmd --add-port={944-951/tcp,944-951/udp} --permanent
    [root@linux5 ~]# firewall-cmd --reload
    #创建测试用户
    [root@linux5 ~]# useradd user1
    [root@linux5 ~]# passwd user1 
    [root@linux5 ~]# useradd user2
    [root@linux5 ~]# passwd user1
    [root@linux5 ~]# cd /var/yp/
    [root@linux5 yp]# make   #添加新用户或组后更新
    

    Samba共享

    # smb-server
    # 安装服务
    [root@linux5 ~]# yum install -y samba
    # 编辑smb配置
    vim /etc/samba/smb.conf    # 追加以下内容
    [user1]
            comment = share user
            path = /home/user1
            browseable = yes
            writable = yes
            valid users = user1
            write list = user1
    [user2]
            comment = share user
            path = /home/user2
            browseable = yes
            writable = yes
            valid users = user2
            write list = user2
    
  2. 配置 linux6 为 NIS 客户端,按需自动挂载 linux5上的 user1和 user2 用户目录到/home。

    NIS客户端

    #安装NIS客户端
    [root@linux6 ~]# dnf -y install ypbind rpcbind oddjob-mkhomedir
    [root@linux6 ~]# hostname
    linux6.skills.com
    [root@linux6 ~]# nisdomainname 
    skills.com
    [root@linux6 ~]# echo "NISDOMAIN=skills.com" >> /etc/sysconfig/network
    [root@linux6 ~]# vim /etc/yp.conf
    domain skills.com server linux5.skills.com
    [root@linux6 ~]# authselect select nis --force
    Backup stored at /var/lib/authselect/backups/2022-04-01-15-18-43.50Lkmy
    Profile "nis" was selected.
    The following nsswitch maps are overwritten by the profile:
    - aliases
    - automount
    - ethers
    - group
    - hosts
    - initgroups
    - netgroup
    - networks
    - passwd
    - protocols
    - publickey
    - rpc
    - services
    - shadow
    
    Make sure that NIS service is configured and enabled. See NIS documentation for more information.
    
    [root@linux6 ~]# authselect enable-feature with-mkhomedir   #设置家目录自动挂载
    [root@linux6 ~]# setsebool -P nis_enabled on                #设置selinux布尔值
    #开启不服并设置开机自启
    [root@linux6 ~]# systemctl enable --now rpcbind ypbind nis-domainname oddjobd
    [root@linux6 ~]# su user1     #测试
    [user1@linux6 root]$ 
    

(六)Redis 服务

【任务描述】为了解决应用服务器的 CPU 和内存压力,减轻 I/O 的压力,请采用 Redis 服务,实现高并发数据和海量数据的读写。

  1. 利用 linux3 搭建 redis cluster 集群,使用端口 7001-7003 模拟主节点,7004-7006 模拟从节点。

    安装redis

    [root@linux3 ~]# yum install -y redis
    [root@linux3 ~]# vim /etc/redis.conf 
    69 bind 0.0.0.0				#允许所有人连接
    92 port 6379					#默认端口号
    136 daemonize yes			#后台运行
    838 cluster-enabled yes		#开启群集
    845 cluster-config-file nodes-6379.conf			#群集存放位置
    [root@linux3 ~]# mkdir redis
    [root@linux3 ~]# cd redis/
    [root@linux3 redis]# mkdir {7001..7006}     #创建redis文件夹
    [root@linux3 redis]# for i in {7001..7006};	
    > do
    > cp /etc/redis.conf $i/ ;			#复制6分redis.conf配置文件到7001..7006文件夹
    > sed -i "s/6379/$i/g" $i/redis.conf ;	#修改redis.conf配置文件的端口号
    > redis-server $i/redis.conf ;					#批量运行redis
    > done
    #修改日志权限并开启服务
    [root@linux3 ~]# chmod 777 /var/log/redis/redis.log
    [root@linux3 ~]# systemctl start redis
    [root@linux3 ~]# ss -ltunp
    Netid      State       Recv-Q      Send-Q            Local Address:Port              Peer Address:Port      Process                                                        
    udp        UNCONN      0           0                       0.0.0.0:111                    0.0.0.0:*          users:(("rpcbind",pid=792,fd=5),("systemd",pid=1,fd=73))      
    udp        UNCONN      0           0                     127.0.0.1:323                    0.0.0.0:*          users:(("chronyd",pid=829,fd=6))                              
    udp        UNCONN      0           0                          [::]:111                       [::]:*          users:(("rpcbind",pid=792,fd=7),("systemd",pid=1,fd=75))      
    udp        UNCONN      0           0                         [::1]:323                       [::]:*          users:(("chronyd",pid=829,fd=7))                              
    tcp        LISTEN      0           128                     0.0.0.0:17001                  0.0.0.0:*          users:(("redis-server",pid=16200,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:17002                  0.0.0.0:*          users:(("redis-server",pid=16225,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:17003                  0.0.0.0:*          users:(("redis-server",pid=16260,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:17004                  0.0.0.0:*          users:(("redis-server",pid=16262,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:17005                  0.0.0.0:*          users:(("redis-server",pid=16267,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:17006                  0.0.0.0:*          users:(("redis-server",pid=16275,fd=8))                       
    tcp        LISTEN      0           128                     0.0.0.0:111                    0.0.0.0:*          users:(("rpcbind",pid=792,fd=4),("systemd",pid=1,fd=72))      
    tcp        LISTEN      0           128                     0.0.0.0:22                     0.0.0.0:*          users:(("sshd",pid=864,fd=5))                                 
    tcp        LISTEN      0           128                   127.0.0.1:5432                   0.0.0.0:*          users:(("postmaster",pid=2659,fd=4))                          
    tcp        LISTEN      0           128                     0.0.0.0:7001                   0.0.0.0:*          users:(("redis-server",pid=16200,fd=6))                       
    tcp        LISTEN      0           128                     0.0.0.0:7002                   0.0.0.0:*          users:(("redis-server",pid=16225,fd=6))                       
    tcp        LISTEN      0           128                     0.0.0.0:7003                   0.0.0.0:*          users:(("redis-server",pid=16260,fd=6))                       
    tcp        LISTEN      0           128                     0.0.0.0:7004                   0.0.0.0:*          users:(("redis-server",pid=16262,fd=6))                       
    tcp        LISTEN      0           128                     0.0.0.0:7005                   0.0.0.0:*          users:(("redis-server",pid=16267,fd=6))                       
    tcp        LISTEN      0           128                     0.0.0.0:7006                   0.0.0.0:*          users:(("redis-server",pid=16275,fd=6))                       
    tcp        LISTEN      0           128                        [::]:111                       [::]:*          users:(("rpcbind",pid=792,fd=6),("systemd",pid=1,fd=74))      
    tcp        LISTEN      0           128                        [::]:22                        [::]:*          users:(("sshd",pid=864,fd=7))                                 
    tcp        LISTEN      0           128                       [::1]:5432                      [::]:*          users:(("postmaster",pid=2659,fd=3))   
    #创建群集
    [root@linux3 ~]# redis-cli --cluster create 10.10.20.103:7001 10.10.20.103:7002 10.10.20.103:7003 10.10.20.103:7004 10.10.20.103:7005 10.10.20.103:7006 --cluster-replicas 1  #表示每个master有一个salve
    #查看节点运行状态
    [root@linux3 ~]# redis-cli --cluster check 10.10.20.103:7001
    10.10.20.103:7001 (5ab1b701...) -> 0 keys | 5461 slots | 1 slaves.
    127.0.0.1:7003 (883014f7...) -> 0 keys | 5461 slots | 1 slaves.
    127.0.0.1:7002 (825ec4a3...) -> 0 keys | 5462 slots | 1 slaves.
    [OK] 0 keys in 3 masters.
    0.00 keys per slot on average.
    >>> Performing Cluster Check (using node 10.10.20.103:7001)
    M: 5ab1b701a62ed6113270043483585677e272c44f 10.10.20.103:7001
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 883014f7d4e770d0babbbaadb9afd92b73b7adfc 127.0.0.1:7003
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: 34a3f886bdfc10c40bf733e78053ef578e240c4f 127.0.0.1:7004
       slots: (0 slots) slave
       replicates 883014f7d4e770d0babbbaadb9afd92b73b7adfc
    S: 9681036d7d181a24dbdb890049c47e72f98e1af6 127.0.0.1:7005
       slots: (0 slots) slave
       replicates 5ab1b701a62ed6113270043483585677e272c44f
    S: 35c1add8d85f75a129ebb25b25bbd3d9ec71296b 127.0.0.1:7006
       slots: (0 slots) slave
       replicates 825ec4a342a1fca21d8803f92ebcb1a154187ba3
    M: 825ec4a342a1fca21d8803f92ebcb1a154187ba3 127.0.0.1:7002
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    

(七)postgresql 服务

【任务描述】为按数据结构来存储和管理数据,请采用 PostgreSQL 服务,实现方便、严密、有效的数据组织、数据维护、数据控制和数据运用。

  1. 配置 linux3 为 postgresql 服务器,创建数据库 userdb;在库中创建表 userinfo,在表中插入 2 条记录,分别为(1,user1,1995-7-1),(2,user2,1995-9-1),口令与用户名相同,password 字段用 md5 函数加密,表结构如下:

    字段名 数据类型 主键
    id serial
    name varchar(10)
    birthday date
    password varchar(50)

    安装数据库

    [root@linux3 ~]# yum install postgresql-server -y   #安装数据库
    [root@linux3 ~]# psql --version     				#查看数据库版本
    psql (PostgreSQL) 10.17
    [root@linux3 ~]# cat /etc/passwd |grep postgres		#查看自动创建的用户
    postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
    [root@linux3 ~]# postgresql-setup initdb			#初始化数据库
    WARNING: using obsoleted argument syntax, try --help
    WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
     * Initializing database in '/var/lib/pgsql/data'
     * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
    [root@linux3 ~]# cd /var/lib/pgsql/data/ 		#数据库存储路径
    [root@linux3 ~]# systemctl restart postgresql.service   	#重启数据库
    [root@linux3 data]# ss -ltunp					#查看5432端口是否开启
    [root@linux3 ~]# su - postgres 
    [postgres@linux3 ~]$ 
    [postgres@linux3 ~]$ psql
    psql (10.17)
    Type "help" for help.
    postgres=# 
    postgres=# create database userdb;    #创建数据库
    CREATE DATABASE
    postgres=# \l 												#查看数据库
                                      List of databases
       Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     userdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
    (4 rows)
    postgres=# \c userdb 									#进入数据库
    You are now connected to database "userdb" as user "postgres".
    #创建userinfo表结构
    userdb=# create table userinfo (id serial primary key,name varchar(10),birthday date,password varchar(50));  
    userdb=# \d														#查看当前数据库内所有表
                   List of relations
     Schema |      Name       |   Type   |  Owner   
    --------+-----------------+----------+----------
     public | userinfo        | table    | postgres
     public | userinfo_id_seq | sequence | postgres
    (2 rows)
    userdb=# \d userinfo;    							#查看userinfo表结构
                                        Table "public.userinfo"
      Column  |         Type          | Collation | Nullable |               Default                
    ----------+-----------------------+-----------+----------+--------------------------------------
     id       | integer               |           | not null | nextval('userinfo_id_seq'::regclass)
     name     | character varying(10) |           |          | 
     birthday | date                  |           |          | 
     password | character varying(50) |           |          | 
    Indexes:
        "userinfo_pkey" PRIMARY KEY, btree (id)
    #插入数据
    userdb=# insert into userinfo(name,birthday,password) values('user1','1995-7-1',md5('user1'));
    userdb=# select * from userinfo;  			#查看表中的数据
     id | name  |  birthday  |             password             
    ----+-------+------------+----------------------------------
      1 | user1 | 1995-07-01 | 24c9e15e52afc47c225b757e7bee1f9d
    userdb=# insert into userinfo(name,birthday,password) values('user2','1995-9-1',md5('user2'));
    userdb=# select * from userinfo;				#查看表中的数据
     id | name  |  birthday  |             password             
    ----+-------+------------+----------------------------------
      1 | user1 | 1995-07-01 | 24c9e15e52afc47c225b757e7bee1f9d
      2 | user2 | 1995-09-01 | 7e58d63b60197ceb55a1c487989a3720
    (2 rows)
    userdb=#\q											#退出数据库
    
  2. 设置可以直接在 shell 下操作数据库,然后备份数据库 userdb 到/var/local/postgresqlbak/userdb.sql。

    #shell下操作数据库 修改配置文件
    [root@linux3 ~]#  vim /var/lib/pgsql/data/pg_hba.conf
     80 local   all             all                                     trust
    [root@linux3 ~]# makdir /var/local/postgresqlbak   #创建数据库备份文件夹
    [root@linux3 ~]# pg_dump -U postgres -c -f /var/local/postgresqlbak/userdb.sql 
    userdb;   																		      #备份数据库
    

(八)PXE 服务

【任务描述】由于企业新购一批服务器,需要安装 linux 操作系统,请采用 PXE 服务实现需求。

  1. 配置 linux4 为 PXE 服务器,实现完全自动安装 Linux。

    #安装相关软件包
    [root@lvs ~]# yum install -y httpd syslinux xinetd tftp-server dhcp-server
    
  2. 安装 DHCP 服务,地址范围为 10.10.20.10-10.10.20.19,网关为10.10.20.254,DNS 为 10.10.20.101,域名为 skills.com。

  3. 安装 tftpd-hpa,为 PXE 客户端提供启动服务,TFTP 目录为默认值。

  4. 安装 apache2 服务,为 PXE 客户端提供软件包;挂载 linux 光盘文件到/var/www/html/cdrom。

    
    

(九)WordPress 服务

【任务描述】为了推广产品,提升品牌形象,合理利用资源,降低成本,请采用 WordPress 服务,为企业建立博客。

  1. 在 linux5 上安装图形界面,并设置默认启动模式为图形界面。安装 xrdp,物理机可以使用远程桌面连接该主机。

    安装GUIxrdp

    #安装GUI
    [root@linux5 ~]# yum groupinstall "Server with GUI" -y --skip-broken
    #切换图形模式为默认启动方式
    [root@linux5 ~]# systemctl set-default graphical
    Removed /etc/systemd/system/default.target.
    Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
    #安装Xrdp
    [root@linux5 ~]# cd xrdp/
    [root@linux5 xrdp]# ll
    total 1904
    -rw-r--r-- 1 root root  227232 Apr 19 01:34 imlib2-1.4.9-8.el8.x86_64.rpm
    -rw-r--r-- 1 root root   38932 Apr 19 01:34 tigervnc-license-1.11.0-10.el8_5.noarch.rpm
    -rw-r--r-- 1 root root 1167056 Apr 19 01:34 tigervnc-server-minimal-1.11.0-10.el8_5.x86_64.rpm
    -rw-r--r-- 1 root root  481432 Apr 19 01:25 xrdp-0.9.19-1.el8.x86_64.rpm
    -rw-r--r-- 1 root root   24696 Apr 19 01:25 xrdp-selinux-0.9.19-1.el8.x86_64.rpm
    [root@linux5 xrdp]# yum localinstall *.rpm -y --skip-broken
    #设置启动并开机自启
    [root@linux5 xrdp]# systemctl enable --now xrdp.service
    #防火墙开放端口
    [root@linux5 xrdp]# firewall-cmd --permanent --add-port=3389/tcp
    
  2. 配置 C 语言和 C++语言的编译环境。

    安装C语言编译环境

    [root@linux5 ~]# yum install gcc gcc-c++ -y
    
  3. 安装 nginx、mariadb、php、phpMyAdmin 和 wordpress,创建数据库 wordpress;数据库字符集为 utf8-unicode-ci;创建用户 test,对所有数据库有完全权限。

    安装软件

    #安装
    [root@linux5 ~]# yum install nginx mariadb php mariadb-server -y
    #启动数据库
    [root@linux5 ~]# systemctl enable --now mariadb.service 
    #初始化数据库
    [root@linux5 ~]# mysql_secure_installation
    #连接数据库
    [root@linux5 ~]# mysql -uroot -pROOT
    MariaDB [(none)]>
    MariaDB [(none)]> create database wordpress;		#创建wordpress数据库
    Query OK, 1 row affected (0.000 sec)
    MariaDB [(none)]> create user test@localhost identified by "Pass-1234"; 		#创建test用户
    Query OK, 0 rows affected (0.001 sec)
    MariaDB [(none)]> grant all on *.* to test@localhost identified by 'Pass-1234';#给予权限
    Query OK, 0 rows affected (0.000 sec)
    MariaDB [(none)]> exit #退出
    #上传
    sftp> phpMyAdmin-5.1.3-all-languages.zip
    sftp> wordpress-5.9.2-zh_CN.tar.gz
    #解压移动至  /usr/share/nginx 文件夹
    [root@master nginx]# ll
    total 8
    drwxr-xr-x  2 root root   99 Apr 19 11:03 html
    drwxr-xr-x  2 root root  143 Apr 19 11:03 modules
    drwxr-xr-x 12 root root 4096 Feb 10 23:16 phpMyAdmin
    drwxr-xr-x  5 1006 1006 4096 Apr 19 15:04 wordpress
    #配置nginx
    [root@linux5 ~]# cd /etc/nginx/conf.d 
    [root@linux5 conf.d ]# cp /etc/nginx/nginx.conf ./phpMyAdmin.conf
    [root@linux5 conf.d ]# vim phpMyAdmin.conf    #配置phpMyAdmin
    server {
          
          
            listen       82;											#指定php端口
            server_name  localohost;
            location / {
          
          
                root   /usr/share/nginx/phpMyAdmin;		#phpMyAdmin默认配置文件位置
                index  index.html index.htm index.php;
            }
           location ~ \.php$ {
          
          
               root           /usr/share/nginx/phpMyAdmin;	#phpMyAdmin组件位置
               fastcgi_pass   unix:/run/php-fpm/www.sock;		#指定php运行(需重启php服务)
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
           }
    }
    [root@linux5 conf.d ]# cp phpMyAdmin.conf wordpress.conf
    [root@linux5 conf.d ]# vim wordpress.conf  #配置wordpress.conf 
    server {
          
          
            listen       81;
            server_name  localhost;
            location / {
          
          
                root   /usr/share/nginx/wordpress;
                index  index.html index.htm index.php;
            }
           location ~ \.php$ {
          
          
               root           /usr/share/nginx/wordpress;
               fastcgi_pass   unix:/run/php-fpm/www.sock;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
           }
    }
    [root@linux5 ~]# firewall-cmd --permanent --add-port=3306/tcp --add-port=81-82/tcp
    [root@linux5 ~]# firewall-cmd --reload 
    
    
  4. 利用 linux5 上浏览器搭建 wordpress 博客,站点标题为“This is my blog!”。

    配置phpMyAdmin登录http://10.10.20.105:82/

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KeFxFfmy-1691628636007)(Lin/image-20220420204406927.png)]

    配置wordpress登录http://10.10.20.105:81/

    【1】登录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbx92Ea8-1691628636008)(Lin/image-20220420204614771.png)]

    【2】输入用户名密码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LEWr6le-1691628636008)(Lin/image-20220420204744502.png)]

    【3】复制下面文件到指定位置

    [root@linux5 ~]# cd /usr/share/nginx/wordpress
    [root@linux5 ~]# vim wp-config.php
    #把wordpress里面的内容粘贴到文件里
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QmgOeFyr-1691628636008)(Lin/image-20220420205301804.png)]

    【4】此处账户名密码自定义 一定要记住(如果忘了的话可以通过phpMyAdmin恢复)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HOV7vy0w-1691628636008)(Lin/image-20220420205640582.png)]

    【5】创建账户成功

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kz2BUisr-1691628636008)(Lin/image-20220420205726790.png)]

    【6】登录测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9s3B9H0-1691628636008)(Lin/image-20220420205830829.png)]

    【7】成功登录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sL9K2aCZ-1691628636008)(Lin/image-20220420210027665.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obxfCDRu-1691628636008)(Lin/image-20220420205930371.png)]

(十)Ansible 服务

【任务描述】为了提高了工作效率,由程序自动的、重复的执行任务,请采用 Ansible 服务,实现自动化运维。

  1. 在 linux1 上安装 ansible,作为 ansible 的控制节点。linux2-linux7 作为 ansible 的受控节点。

    [root@linux1 ~]# cd /etc/ansible
    [root@linux1 ansible]# cat hosts | grep -v "#"
    [lin]
    linux1
    linux2
    linux3
    linux4
    linux5
    linux6
    linux7
    
  2. 编写/root/my.yml 剧本,实现在 linux1 的/root 目录创建一个 ansible.txt 文件,然后复制到所有受控节点的/root 目录。

    [root@linux1 ~]# cat liu.yaml 
    ---
    - hosts: all
      tasks:
        - shell: touch /root/ansible.txt
          when: ansible_hostname == "linux1"
        - copy:
            force: true
            src: /root/ansible.txt
            dest: /root/
          when: ansible_hostname != "linux1"  
    

(十一)Kubernetes 服务

【任务描述】为了对容器进行更高级更灵活的管理,请采用Kubernetes 服务,管理和控制容器。

  1. 在 linux5 上安装 kubernetes,linux6-linux7 作为 kubernetes 的节点,搭建一主二从的单集群。

    所有节点都要执行

    注意:
    kubelet服务在没有初始化成功之前是无法启动的;但是需要提前开启kubelet自启

    containerd 服务在没有初始化之前需要启动并开启自启

    #查看主机名
    [root@linux5 ~]# hostname
    linux5.skills.com
    [root@linux6 ~]# hostname
    linux6.skills.com
    [root@linux7 ~]# hostname
    linux7.skills.com
    #查看DNS解析
    [root@linux5 ~]# ping linux7.skills.com -c 1
    PING linux7.skills.com (10.10.20.107) 56(84) bytes of data.
    64 bytes from linux7.skills.com (10.10.20.107): icmp_seq=1 ttl=64 time=0.888 ms
    
    --- linux7.skills.com ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.888/0.888/0.888/0.000 ms
    [root@linux5 ~]# ping linux6.skills.com -c 1
    PING linux6.skills.com (10.10.20.106) 56(84) bytes of data.
    64 bytes from linux6.skills.com (10.10.20.106): icmp_seq=1 ttl=64 time=0.805 ms
    
    --- linux6.skills.com ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.805/0.805/0.805/0.000 ms
    [root@linux5 ~]# ping linux5.skills.com -c 1
    PING linux5.skills.com (10.10.20.105) 56(84) bytes of data.
    64 bytes from linux5.skills.com (10.10.20.105): icmp_seq=1 ttl=64 time=0.119 ms
    
    --- linux5.skills.com ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.119/0.119/0.119/0.000 ms
    #关闭swap
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    swapoff -a
    #关闭Selinux
    setenforce 0
    sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
    #防火墙开端口master
    firewall-cmd --add-port 179/tcp --add-port 10255/tcp --add-port 6443/tcp --add-port 2379-2380/tcp --add-port 10250-10252/tcp --permanent
    #防火墙开端口node1
    firewall-cmd --add-port 179/tcp --add-port 10255/tcp --add-port 6443/tcp --add-port 10250-10252/tcp --add-port 2379-2380/tcp --add-port 30000-32767/tcp --permanent
    #配置持久性模块
    cat <<EOF|tee /etc/modules-load.d/containerd.conf
    overlay
    br_netfilter
    EOF
    #配置系统通信规则
    cat <<EOF|tee /etc/sysctl.d/kubernetes-cri.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    #重新加载模块
    modprobe overlay
    modprobe br_netfilter
    #重新加载服务
    sysctl --system
    [root@linux5 ~]# ll
    total 542192
    -rw-------. 1 root root      1096 Mar 15 13:34 anaconda-ks.cfg
    -rw-r--r--. 1 root root         0 Mar 28 23:54 ansible.txt
    -rw-r--r--. 1 root root 555197017 Apr 15 14:18 kubernetes.tar.gz
    [root@linux5 ~]# tar -zxf kubernetes.tar.gz   #解压包
    [root@linux5 ~]# ll
    total 542192
    -rw-------. 1 root root      1096 Mar 15 13:34 anaconda-ks.cfg
    -rw-r--r--. 1 root root         0 Mar 28 23:54 ansible.txt
    drwxr-xr-x. 4 root root       133 Apr 15 14:15 kubernetes
    -rw-r--r--. 1 root root 555197017 Apr 15 14:18 kubernetes.tar.gz
    [root@linux5 ~]# cd kubernetes/
    [root@linux5 kubernetes]# ll
    total 974468
    -rw-r--r--. 1 root root 213605888 Apr  1 16:52 calico.tar
    -rw-r--r--. 1 root root    217605 Apr  1 17:49 calico.yaml
    drwxr-xr-x. 2 root root      4096 Apr 15 11:02 container
    -rw-r--r--. 1 root root  20871680 Apr  1 16:47 flannel.tar
    -rw-r--r--. 1 root root 763136000 Mar 31 19:18 k8s.tar
    drwxr-xr-x. 2 root root      4096 Apr 15 11:02 kubectl
    -rw-r--r--. 1 root root      5692 Apr  1 17:51 kube-flannel.yml
    [root@linux5 kubernetes]# cd container/
    [root@linux5 container]# ll
    total 33292
    -rw-r--r--. 1 root root   353512 Mar 31 18:15 checkpolicy-2.9-1.el8.x86_64.rpm
    -rw-r--r--. 1 root root 30195808 Mar 31 18:15 containerd.io-1.5.11-3.1.el8.x86_64.rpm
    -rw-r--r--. 1 root root    57027 Mar 31 18:15 container-selinux-2.173.0-1.module+el8.5.0+735+2f243138.noarch.rpm
    -rw-r--r--. 1 root root   257448 Mar 31 18:15 policycoreutils-python-utils-2.9-16.el8.noarch.rpm
    -rw-r--r--. 1 root root    87384 Mar 31 18:15 python3-audit-3.0-0.17.20191104git1c2f876.el8.1.x86_64.rpm
    -rw-r--r--. 1 root root   129032 Mar 31 18:15 python3-libsemanage-2.9-6.el8.x86_64.rpm
    -rw-r--r--. 1 root root  2351872 Mar 31 18:15 python3-policycoreutils-2.9-16.el8.noarch.rpm
    -rw-r--r--. 1 root root   639676 Mar 31 18:15 python3-setools-4.3.0-2.el8.x86_64.rpm
    #安装容器运行时
    [root@linux5 container]# dnf install -y *rpm
    [root@linux5 container]# cd /root/kubernetes/kubectl
    [root@linux5 kubectl]# ll
    total 66864
    -rw-r--r--. 1 root root  7401938 Mar 31 18:16 4d300a7655f56307d35f127d99dc192b6aa4997f322234e754f16aaa60fd8906-cri-tools-1.23.0-0.x86_64.rpm
    -rw-r--r--. 1 root root  9921646 Mar 31 18:16 96b208380314a19ded917eaf125ed748f5e2b28a3cc8707a10a76a9f5b61c0df-kubectl-1.23.5-0.x86_64.rpm
    -rw-r--r--. 1 root root  9475514 Mar 31 18:16 ab0e12925be5251baf5dd3b31493663d46e4a7b458c7a5b6b717f4ae87a81bd4-kubeadm-1.23.5-0.x86_64.rpm
    -rw-r--r--. 1 root root   207728 Mar 31 18:16 conntrack-tools-1.4.4-10.el8.x86_64.rpm
    -rw-r--r--. 1 root root 21546750 Mar 31 18:16 d39aa6eb38a6a8326b7e88c622107327dfd02ac8aaae32eceb856643a2ad9981-kubelet-1.23.5-0.x86_64.rpm
    -rw-r--r--. 1 root root 19487362 Mar 31 18:16 db7cb5cb0b3f6875f54d10f02e625573988e3e91fd4fc5eef0b1876bb18604ad-kubernetes-cni-0.8.7-0.x86_64.rpm
    -rw-r--r--. 1 root root    23628 Mar 31 18:16 libnetfilter_cthelper-1.0.0-15.el8.x86_64.rpm
    -rw-r--r--. 1 root root    23600 Mar 31 18:16 libnetfilter_cttimeout-1.0.0-11.el8.x86_64.rpm
    -rw-r--r--. 1 root root    30908 Mar 31 18:16 libnetfilter_queue-1.0.4-3.el8.x86_64.rpm
    -rw-r--r--. 1 root root   329640 Mar 31 18:16 socat-1.7.4.1-1.el8.x86_64.rpm
    #安装kuberbnetes三大组件
    [root@linux5 kubectl]# dnf install -y *rpm
    [root@linux6 container]# systemctl enable --now containerd.service
    systemctl enable --now kubelet.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/lib/systemd/system/containerd.service.
    [root@linux6 container]# systemctl enable --now kubelet.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
    #初始化配置文件
    [root@master ~]# containerd config default > /etc/containerd/config.toml
    [root@master ~]# vim /etc/containerd/config.toml
     56     sandbox_image = "k8s.gcr.io/pause:3.6"
    [root@linux5 ~]# systemctl restart containerd.service 
    #导入镜像
    [root@linux5 kubernetes]# ctr -n k8s.io image import k8s.tar
    [root@linux5 kubernetes]# ctr -n k8s.io image import calico.tar
    [root@linux5 kubernetes]# ctr -n k8s.io image import flannel.tar
    

    master

    #打印初始化配置文件
    [root@linux5 ~]# kubeadm config print init-defaults > kubeadm.yaml
    #配置初始化文件
      1 apiVersion: kubeadm.k8s.io/v1beta3
      2 bootstrapTokens:
      3 - groups:
      4   - system:bootstrappers:kubeadm:default-node-token
      5   token: abcdef.0123456789abcdef
      6   ttl: 24h0m0s
      7   usages:
      8   - signing
      9   - authentication
     10 kind: InitConfiguration
     11 localAPIEndpoint:
     12   advertiseAddress: 10.10.20.105
     13   bindPort: 6443
     14 nodeRegistration:
     15   criSocket: /run/containerd/containerd.sock
     16   imagePullPolicy: Never
     17   name: linux5
     18   taints: null
     19 ---
     20   apiServer:
     21   timeoutForControlPlane: 4m0s
     22 apiVersion: kubeadm.k8s.io/v1beta3
     23 certificatesDir: /etc/kubernetes/pki
     24 clusterName: kubernetes
     25 controllerManager: {
          
          }
     26 dns: {
          
          }
     27 etcd:
     28   local:
     29     dataDir: /var/lib/etcd
     30 imageRepository: k8s.gcr.io
     31 kind: ClusterConfiguration
     32 kubernetesVersion: 1.23.5
     33 networking:
     34   dnsDomain: cluster.local
     35   podSubnet: 10.244.0.0/16
     36   serviceSubnet: 10.96.0.0/12
     37 scheduler: {
          
          }
     #初始化  --ignore-preflight-errors=all 忽略报错
     [root@linux5 ~]# kubeadm init --config kubeadm.yaml --v=5 --ignore-preflight-errors=all
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     Your Kubernetes control-plane has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
      # kubernetes 管理配置 Kubectl
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    Alternatively, if you are the root user, you can run:
    	#Root用户执行
      export KUBECONFIG=/etc/kubernetes/admin.conf
    	#下面用于初始化pod网络
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    		#下面用于添加工作节点
    kubeadm join 10.10.20.105:6443 --token abcdef.0123456789abcdef \
            --discovery-token-ca-cert-hash sha256:348916d3b4866e65eb989a73cf81123c3c2b580356ea180829c27bd9c574f093 
    		#下面用于添加控制节点
    kubeadm join 10.10.20.105:6443 --token abcdef.0123456789abcdef \
            --discovery-token-ca-cert-hash sha256:348916d3b4866e65eb989a73cf81123c3c2b580356ea180829c27bd9c574f093 \
    				--control-plane         
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
     
    

    node

    [root@linux6 ~]# kubeadm join 10.10.20.105:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:348916d3b4866e65eb989a73cf81123c3c2b580356ea180829c27bd9c574f093 
    
  2. 使用 containerd 管理容器。

    测试查看

    #查看pod状态
    [root@linux5 ~]# kubectl get pods -n kube-system
    
    NAME                             READY   STATUS    RESTARTS      AGE
    coredns-64897985d-72k89          1/1     Running   0             44h
    coredns-64897985d-nx89r          1/1     Running   0             44h
    etcd-linux5                      1/1     Running   1 (44h ago)   44h
    kube-apiserver-linux5            1/1     Running   1 (44h ago)   44h
    kube-controller-manager-linux5   1/1     Running   1 (44h ago)   44h
    kube-flannel-ds-dhcdf            1/1     Running   0             15m
    kube-flannel-ds-qkcd8            1/1     Running   0             15m
    kube-flannel-ds-vftm7            1/1     Running   0             15m
    kube-proxy-5xkfh                 1/1     Running   1 (44h ago)   44h
    kube-proxy-6hnfr                 1/1     Running   0             36m
    kube-proxy-hvbgb                 1/1     Running   0             36m
    kube-scheduler-linux5            1/1     Running   1 (44h ago)   44h
    #查看节点状态
    [root@linux5 ~]# kubectl get nodes
    NAME                STATUS   ROLES                  AGE   VERSION
    linux5              Ready    control-plane,master   44h   v1.23.5
    linux6.skills.com   Ready    <none>                 36m   v1.23.5
    linux7.skills.com   Ready    <none>                 36m   v1.23.5
    #查看kubelet状态
    [root@linux5 ~]# systemctl status kubelet.service 
    ● kubelet.service - kubelet: The Kubernetes Node Agent
       Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
      Drop-In: /usr/lib/systemd/system/kubelet.service.d
               └─10-kubeadm.conf
       Active: active (running) since Sun 2022-04-17 03:13:26 CST; 20h ago
         Docs: https://kubernetes.io/docs/
     Main PID: 16384 (kubelet)
        Tasks: 13 (limit: 11390)
       Memory: 58.9M
       CGroup: /system.slice/kubelet.service
               └─16384 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/co>
    
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.011035   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.011128   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.011195   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.011266   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.011333   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: I0417 23:26:53.012496   16384 reconciler.go:221] "operationExecutor.VerifyControllerAttachedVolume started for volume >
    Apr 17 23:26:53 linux5.skills.com kubelet[16384]: E0417 23:26:53.172603   16384 kubelet.go:2347] "Container runtime network not ready" networkReady="NetworkReady=false >
    Apr 17 23:26:55 linux5.skills.com kubelet[16384]: W0417 23:26:55.940134   16384 manager.go:1176] Failed to process watch event {EventType:0 Name:/system.slice/container>
    Apr 17 23:26:57 linux5.skills.com kubelet[16384]: W0417 23:26:57.475741   16384 manager.go:1176] Failed to process watch event {EventType:0 Name:/kubepods-burstable-pod>
    Apr 17 23:26:59 linux5.skills.com kubelet[16384]: W0417 23:26:59.007634   16384 manager.go:1176] Failed to process watch event {EventType:0 Name:/system.slice/container>
    lines 1-22/22 (END)
    #查看容器运行时状态
    [root@linux5 ~]# systemctl status containerd.service   
    ● containerd.service - containerd container runtime
       Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
       Active: active (running) since Sat 2022-04-16 02:55:35 CST; 1 day 20h ago
         Docs: https://containerd.io
     Main PID: 862 (containerd)
        Tasks: 146
       Memory: 1.0G
       CGroup: /system.slice/containerd.service
               ├─  862 /usr/bin/containerd
               ├─ 3795 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id ac391ad7be052b6afd6edebbdd4933fd3c459dd9845bbf47b2a2cbd1adbf23db -address /run/containerd/cont>
               ├─ 3803 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id aa31eda4991792693df8beeeabf04dac476964deb6c86bf082e28fb0c447f719 -address /run/containerd/cont>
               ├─ 3930 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id eb8c0bce997012b542752571fc9680a9c2e5df033c4226cc68f8e821282d15a7 -address /run/containerd/cont>
               ├─ 3986 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 276c4e9d15db40b42f36eefc9eb018b2185c408e70c280f0fc6decd0ae5dcd21 -address /run/containerd/cont>
               ├─ 5590 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id a183dba7d95bcd2b18c36be3a0874b9c61aac96092571699a9ccf243db764b79 -address /run/containerd/cont>
               ├─25947 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 45e189a942df340b8cc4a5d3f51466eb2291d54e7f9685be7fa84c90b4b0cd82 -address /run/containerd/cont>
               ├─kubepods-besteffort-podd557d5ac_ce07_4307_b462_7de3787fd416.slice:cri-containerd:a183dba7d95bcd2b18c36be3a0874b9c61aac96092571699a9ccf243db764b79
               │ └─5609 /pause
               ├─kubepods-besteffort-podd557d5ac_ce07_4307_b462_7de3787fd416.slice:cri-containerd:fabd4fc2d5c43fa4358bf0a2f946515c3c39860796f802f58d29bfd831b40c8b
               │ └─5749 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=linux5
               ├─kubepods-burstable-pod42b3bf07_036f_4685_91f7_e560ce94726c.slice:cri-containerd:407a1ecf6985a5a49eb8b00dae6fd00aece2f66cd2f0deb072a0ccd78348aae6
               │ └─26099 /opt/bin/flanneld --ip-masq --kube-subnet-mgr
               ├─kubepods-burstable-pod42b3bf07_036f_4685_91f7_e560ce94726c.slice:cri-containerd:45e189a942df340b8cc4a5d3f51466eb2291d54e7f9685be7fa84c90b4b0cd82
               │ └─25967 /pause
               ├─kubepods-burstable-pod5142580322c710399a0dcde11d0f16fe.slice:cri-containerd:276c4e9d15db40b42f36eefc9eb018b2185c408e70c280f0fc6decd0ae5dcd21
               │ └─4018 /pause
               ├─kubepods-burstable-pod5142580322c710399a0dcde11d0f16fe.slice:cri-containerd:8d4713417a458174e0e14504d824cfa5d7a5177176faf997a230cf9e97563b08
               │ └─4550 kube-controller-manager --allocate-node-cidrs=true --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf --authorization-kubeconfig=/e>
               ├─kubepods-burstable-pod88df1d254fbc2fb480974082573f06b2.slice:cri-containerd:cbf41df91ef13524b4f63b5c94779ac9f5ed96ce403cb4668d0bcff73f8ba9cd
               │ └─4589 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/scheduler.conf --authorization-kubeconfig=/etc/kubernetes/scheduler.conf --bind-address=1>
               ├─kubepods-burstable-pod88df1d254fbc2fb480974082573f06b2.slice:cri-containerd:eb8c0bce997012b542752571fc9680a9c2e5df033c4226cc68f8e821282d15a7
               │ └─3960 /pause
               ├─kubepods-burstable-podafc8d2e83408d203ba182c7bc24a9028.slice:cri-containerd:0d82ed04ee4cf869038c4d2ce29f2d84087fade4af2cf3996b90c580b7534e2f
               │ └─4582 etcd --advertise-client-urls=https://10.10.20.105:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/e>
               ├─kubepods-burstable-podafc8d2e83408d203ba182c7bc24a9028.slice:cri-containerd:ac391ad7be052b6afd6edebbdd4933fd3c459dd9845bbf47b2a2cbd1adbf23db
               │ └─3902 /pause
               ├─kubepods-burstable-podc44af47d234948453fb8d04e042b3103.slice:cri-containerd:aa31eda4991792693df8beeeabf04dac476964deb6c86bf082e28fb0c447f719
               │ └─3904 /pause
               └─kubepods-burstable-podc44af47d234948453fb8d04e042b3103.slice:cri-containerd:bd9234a8ab49c0c30d3f4e69c81761a30ee8ec22dd4023c3bf91bac5b99069fa
                 └─4528 kube-apiserver --advertise-address=10.10.20.105 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt ->
    
    Apr 17 23:26:54 linux5.skills.com containerd[862]: time="2022-04-17T23:26:54.965567591+08:00" level=info msg="StartContainer for \"38ffd4351789f25a87eac502438effab17b5f>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.088562634+08:00" level=info msg="StartContainer for \"38ffd4351789f25a87eac502438effab17b5f>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.149731435+08:00" level=info msg="shim disconnected" id=38ffd4351789f25a87eac502438effab17b5>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.149788951+08:00" level=warning msg="cleaning up after shim disconnected" id=38ffd4351789f25>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.149825092+08:00" level=info msg="cleaning up dead shim"
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.167601400+08:00" level=warning msg="cleanup warnings time=\"2022-04-17T23:26:55+08:00\" lev>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.841664169+08:00" level=info msg="CreateContainer within sandbox \"45e189a942df340b8cc4a5d3f>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.945487985+08:00" level=info msg="CreateContainer within sandbox \"45e189a942df340b8cc4a5d3f>
    Apr 17 23:26:55 linux5.skills.com containerd[862]: time="2022-04-17T23:26:55.948840083+08:00" level=info msg="StartContainer for \"407a1ecf6985a5a49eb8b00dae6fd00aece2f>
    Apr 17 23:26:56 linux5.skills.com containerd[862]: time="2022-04-17T23:26:56.153597378+08:00" level=info msg="StartContainer for \"407a1ecf6985a5a49eb8b00dae6fd00aece2f>
    lines 5-50/50 (END)
    
    

(十二)FTP 服务

【任务描述】为了提高文件的共享性,对用户进行透明和可靠高效地数据传送,请采用 FTP 服务器,实现文件安全传输。

  1. 配置 linux4 为 FTP 服务器,安装 vsftpd。

    安装FTP服务

    [root@linux4 ~]# dnf -y install vsftpd			#安装服务
    [root@linux4 ~]# useradd ftpuser -s /sbin/nologin   #创建用户并指定该用户不能登录
    [root@linux4 ~]# mkdir /etc/vsftpd/vuserconf #创建存放虚拟用户配置文件夹
    [root@linux4 ~]# mkdir /home/ftpuser/ftp1    #创建ftp1虚拟用户家目录
    [root@linux4 ~]# mkdir /home/ftpuser/ftp2	 #创建ftp2虚拟用户家目录
    [root@linux4 ftpuser]# chmod 777 ftp1		#赋予目录权限
    [root@linux4 ftpuser]# chmod 777 ftp2		#赋予目录权限
    [root@linux4 vsftpd]# vim /etc/pam.d/vsftpd   #修改配置文件添加9,10行 注释4,5,6行
      1 #%PAM-1.0
      2 session    optional     pam_keyinit.so    force revoke
      3 auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
      4 #auth       required    pam_shells.so
      5 #auth       include     password-auth
      6 #account    include     password-auth
      7 session    required     pam_loginuid.so
      8 session    include      password-auth
      9 auth       sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers
     10 account    sufficient      /lib64/security/pam_userdb.so    db=/etc/vsftpd/virtusers
    [root@linux4 ~]# setebool -P ftpd_full_access on  #设置Selinux布尔值
    [root@linux4 ~]# firewall-cmd --add-service=ftp --permanent
    [root@linux4 ~]# firewall-cmd --reload
    [root@linux4 ~]# firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: ens3
      sources: 
      services: cockpit dhcpv6-client ftp https pop3 pop3s smtp smtps ssh
      ports: 8080/tcp 465/tcp 995/tcp
      protocols: 
      forward: no
      masquerade: no
      forward-ports: 
      source-ports: 
     [root@linux4 ~]# systemctl restart vsftpd.service 
    
  2. 配置虚拟用户认证模式。虚拟用户 ftp1 和 ftp2 映射为 ftpuser (该账户不能登录系统,家目录为/home/ftpuser),ftp1 有完全权限,禁止上传后缀名为.docx 和.xlsx 的文件,上传文件所有者为 ftpuser;ftp2 仅有下载权限。ftp1 登录 ftp 后的目录为/home/ftpuser/ftp1,ftp2 登录 ftp 后的目录为/home/ftpuser/ftp2。

    [root@linux4 ~]# /etc/vsftpd/vsftpd.conf    #添加以下三行
     2 guest_enable=YES							#设定启用虚拟用户功能
     3 guest_username=ftpuser					#指定虚拟用户的宿主用户
     4 user_config_dir=/etc/vsftpd/vuserconf    #指定虚拟用户配置文件存放路径
    #创建虚拟用户,生成虚拟用户文件
    [root@linux4 ~]# cd /etc/vsftpd
    [root@linux4 vsftpd]# vim virtusers   #奇数行为用户 偶数行为密码
    ftp1
    1230
    ftp2
    1230
    [root@linux4 vsftpd]# db_load -T -t hash -f virtusers virtusers.db 
    [root@linux4 ~]# vim /etc/vsftpd/vuserconf/ftp1
    local_root=/home/ftpuser/ftp1   #用户目录
    allow_writeable_chroot=YES
    virtual_use_local_privs=YES 	#使用用户本地权限
    write_enable=YES				#可写
    deny_file={
          
          *.docx,*.slsx}		#禁止上传后缀
    [root@linux4 ~]# vim /etc/vsftpd/vuserconf/ftp2
    local_root=/home/ftpuser/ftp2 	#用户目录
    anon_upload_enable=NO			#禁止上传
    anon_mkdir_write_enable=NO		#禁止新建文件夹
    

(十三)mail 服务

【任务描述】 为构建一个企业级邮件服务器,请采用 Postfix 邮件服务器,实现更快、更容易管理、更安全的邮件服务。

  1. 配置 linux4 为 mail 服务器,安装 postfix 和 dovecot。

    安装postfix

    [root@linux4 ~]# yum install postfix.x86_64 
    [root@linux4 ~]# vim /etc/postfix/main.cf
     94 myhostname = linux4.skills.com       #邮件服务器的主机名
    102 mydomain = skills.com  				 #邮件服务器域名
    132 inet_interfaces = all
    183 mydestination = $myhostname,$mydomain
    438 home_mailbox = Maildir/
    444 mail_spool_directory = /var/mail     #允许手动指定邮件服务器文件存放位置(默认注释)
    709 smtpd_tls_cert_file = /etc/ssl/idm.crt
    715 smtpd_tls_key_file = /etc/ssl/idm.key
    725 smtp_tls_CApath = /etc/ssl/				#非必须
    731 smtp_tls_CAfile = /etc/ssl/cacert.pem   #非必须
    [root@linux4 ~]# vim /etc/postfix/master.cf
     29 smtps     inet  n       -       n       -       -       smtpd
     30   -o syslog_name=postfix/smtps
     31   -o smtpd_tls_wrappermode=yes
    

    dovecot

    [root@linux4 ~]# yum install dovecot.x86_64
    [root@linux4 ~]# vim /etc/dovecot/conf.d/10-auth.conf
     10 disable_plaintext_auth = yes
    [root@linux4 ~]# vim /etc/dovecot/conf.d/10-mail.conf
     24    mail_location = maildir:~/Maildir
    [root@linux4 ~]# vim /etc/dovecot/conf.d/10-ssl.conf
     8 ssl = yes
    14 ssl_cert = </etc/ssl/idm.crt
    15 ssl_key = </etc/ssl/idm.key
    26 ssl_ca = </etc/ssl/cacert.pem
    [root@linux4 ~]# vim /etc/dovecot/dovecot.conf
    24 protocols = imap pop3 lmtp submission     #允许指定协议的类型
    #允许设置 IP 地址来监听服务。对于 IPv4 地址,使用星号 (*),对于 IPV6 地址,使用冒号 (::)
    30 listen = *    
    [root@linux4 ~]# vim /etc/dovecot/conf.d/10-master.conf
     17 service imap-login {
          
          
     18   inet_listener imap {
          
          
     19     port = 0 			#关闭端口
     20   }
     21   inet_listener imaps {
          
          
     22     port = 0			#关闭端口
     23     #ssl = yes
     24   }
     36 }
     37
     38 service pop3-login {
          
          
     39   inet_listener pop3 {
          
          
     40     port = 0			#关闭端口
     41   }
     42   inet_listener pop3s {
          
          
     43     port = 995			#开启995端口用于ssl验证
     44     ssl = yes
     45   }
     46 }
    [root@linux4 ~]# doveadm instance list     #验证服务状态
    path                  name    last used           running
    /run/dovecot          dovecot 2022-04-02 21:55:42 yes     
    [root@linux4 ~]# journalctl -u dovecot -b  #要检查日志,请运行以下命令:
    firewall-cmd --permanent --add-port=465/tcp --add-port=995/tcp 
    firewall-cmd --reload
    
  2. 仅支持 smtps 和 pop3s 连接,证书路径为/etc/ssl/skills.crt,私钥路径为/etc/ssl/skills.key。

    [root@linux1 CA]# umask 077; openssl genrsa -out skills.key 4096
    [root@linux1 CA]# openssl req -new -nodes -keyout skills.key -out linux4.csr -config /tmp/openssl.cnf
    [root@linux1 CA]# openssl req -text -noout -in skills.csr 
    [root@linux1 CA]# openssl ca -policy policy_anything -out skills.crt -config /tmp/openssl.cnf -extensions v3_req -in skills.csr -days 3650
    [root@linux1 CA]# scp skills* linux4:/etc/ssl/
    
  3. 创建用户 mail1 和 mail2,向 [email protected] 发送的邮件,每个用户都会收到。

  4. root 用户使用 mail 工具向 [email protected] 发送一封邮件,邮件主题为“Hello”,内容为“Welcome”。

    使用邮件软件测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TCnMWcHp-1691628636009)(Lin/image-20220406153631514.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXSc6OS1-1691628636009)(Lin/image-20220406153710070.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsFsWsuF-1691628636009)(Lin/image-20220406153933158.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fI9Xx7MU-1691628636009)(Lin/image-20220406154048913.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jk5twAL-1691628636009)(Lin/image-20220406154115166.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3AMW0GG3-1691628636009)(Lin/image-20220406154403569.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBCJHZSB-1691628636009)(Lin/image-20220406154437870.png)]

(十四)脚本

【任务描述】为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作**。**

  1. 在 linux6 上编写/root/CreateFile.sh 的 shell 脚本,创建 20 个文件/root/test/File101 至/root/test/File120,如果文件存在,则先删除再创建;每个文件的内容同文件名,如 File101 文件的内容为“File101”。

    [root@linux6 ~]# vim  CreateFile.sh
    if [ ! -f "/root/test" ]
    then
    mkdir /root/test
    fi
    for a in {
          
          101..120}
    do
    if [ -f "/root/test/File$a" ]
    then
    rm -rf /root/test/File$a
    fi
    touch /root/test/File$a
    echo "File$a" > /root/test/File$a
    done
    
  2. 在linux7上编写/root/CreateFile.py的python3脚本,创建20个文件/root/test/File01至/root/test/File20,如果文件存在,则先删除再创建;每个文件的内容同文件名,如File01文件的内容为“File01”

    import os
    for i in range(1,21):
        filename = 'File0' + str(i)
        if i >= 10:
            filename = 'File' + str(i)
        path = '/root/test/' + filename
        if os.path.isfile(path):
            os.remove(path)
        with open(path,'w') as f:
           f.write(filename)
           f.close()
    

(十五)samba 服务

【任务描述】 为在 Linux 和Windows 之间实现共享文件和打印机的安全访问,请采用 samba 服务器,实现 Windows 操作系统和 Linux 操作系统的资源共享兼容。

  1. 在linux4上创建 user101-user120 等20 个用户;user101 和user102添加到 manager 组,user103添加到 sale 组,user104 添加到dev 组。

    创建用户和组

    #创建20个用户
    [root@linux4 ~]# for((i=101;i<=120;i++)); do useradd user$i; done;
    #创建组
    [root@linux4 ~]# groupadd manager
    [root@linux4 ~]# groupadd sale
    [root@linux4 ~]# groupadd dev
    #修改用户的所属组
    [root@linux4 ~]# usermod user101 -g manager
    [root@linux4 ~]# usermod user102 -g manager
    [root@linux4 ~]# usermod user103 -g sale
    [root@linux4 ~]# usermod user104 -g dev
    
  2. 配置为 Samba 服务器,建立共享目录/share/ShareManager, /share/ShareSale, /share/SharePublic,共享名与目录名相同。

    安装服务并创建相关文件夹

    #安装samba
    [root@linux4 ~]# yum install samba -y
    #创建目录
    [root@linux4 ~]# mkdir -p /share/{ShareManager,ShareSale,SharePublic}
    #防火墙
    [root@linux4 ~]# firewall-cmd --permanent --add-service=samba
    [root@linux4 ~]# firewall-cmd --reload 
    
  3. manager 组用户对 ShareManager 和SharePublic 有共享读写权限,sale 组用户对 ShareSale 和SharePublic 有共享读写权限,dev 组对所有共享均有读写权限;用户对自己新建的文件有完全权限,对其他用户的文件只有读权限,且不能删除别人的文件。

    编辑samba配置文件

    [root@linux4 ~]# vim /etc/samba/smb.conf
    #添加以下配置
    [ShareManager]
            comment = ShareManager
            path = /share/ShareManager
            valid users = @manager,@dev
            writable = yes
            browseable = yes
    [ShareSale]
            comment = ShareSale
            path = /share/ShareSale
            valid users = @sale,@dev
            writable = yes
            browseable = yes
    [SharePublic]
            comment = SharePublic
            path = /share/SharePublic
            valid users = @manager,@sale,@dev
            writable = yes
            browseable = yes
    #不能让其他用户删除自己的文件
    chmod o+t /share ShareManager ShareSale SharePublic
    
  4. 把用户 user101-user104 添加到 samba 用户。

    #把用户添加到Smba用户
    [root@linux4 ~]# smbpasswd -a user101
    New SMB password:
    Retype new SMB password:
    

为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作**。**

  1. 在 linux6 上编写/root/CreateFile.sh 的 shell 脚本,创建 20 个文件/root/test/File101 至/root/test/File120,如果文件存在,则先删除再创建;每个文件的内容同文件名,如 File101 文件的内容为“File101”。

    [root@linux6 ~]# vim  CreateFile.sh
    if [ ! -f "/root/test" ]
    then
    mkdir /root/test
    fi
    for a in {
          
          101..120}
    do
    if [ -f "/root/test/File$a" ]
    then
    rm -rf /root/test/File$a
    fi
    touch /root/test/File$a
    echo "File$a" > /root/test/File$a
    done
    
  2. 在linux7上编写/root/CreateFile.py的python3脚本,创建20个文件/root/test/File01至/root/test/File20,如果文件存在,则先删除再创建;每个文件的内容同文件名,如File01文件的内容为“File01”

    import os
    for i in range(1,21):
        filename = 'File0' + str(i)
        if i >= 10:
            filename = 'File' + str(i)
        path = '/root/test/' + filename
        if os.path.isfile(path):
            os.remove(path)
        with open(path,'w') as f:
           f.write(filename)
           f.close()
    

(十五)samba 服务

【任务描述】 为在 Linux 和Windows 之间实现共享文件和打印机的安全访问,请采用 samba 服务器,实现 Windows 操作系统和 Linux 操作系统的资源共享兼容。

  1. 在linux4上创建 user101-user120 等20 个用户;user101 和user102添加到 manager 组,user103添加到 sale 组,user104 添加到dev 组。

    创建用户和组

    #创建20个用户
    [root@linux4 ~]# for((i=101;i<=120;i++)); do useradd user$i; done;
    #创建组
    [root@linux4 ~]# groupadd manager
    [root@linux4 ~]# groupadd sale
    [root@linux4 ~]# groupadd dev
    #修改用户的所属组
    [root@linux4 ~]# usermod user101 -g manager
    [root@linux4 ~]# usermod user102 -g manager
    [root@linux4 ~]# usermod user103 -g sale
    [root@linux4 ~]# usermod user104 -g dev
    
  2. 配置为 Samba 服务器,建立共享目录/share/ShareManager, /share/ShareSale, /share/SharePublic,共享名与目录名相同。

    安装服务并创建相关文件夹

    #安装samba
    [root@linux4 ~]# yum install samba -y
    #创建目录
    [root@linux4 ~]# mkdir -p /share/{ShareManager,ShareSale,SharePublic}
    #防火墙
    [root@linux4 ~]# firewall-cmd --permanent --add-service=samba
    [root@linux4 ~]# firewall-cmd --reload 
    
  3. manager 组用户对 ShareManager 和SharePublic 有共享读写权限,sale 组用户对 ShareSale 和SharePublic 有共享读写权限,dev 组对所有共享均有读写权限;用户对自己新建的文件有完全权限,对其他用户的文件只有读权限,且不能删除别人的文件。

    编辑samba配置文件

    [root@linux4 ~]# vim /etc/samba/smb.conf
    #添加以下配置
    [ShareManager]
            comment = ShareManager
            path = /share/ShareManager
            valid users = @manager,@dev
            writable = yes
            browseable = yes
    [ShareSale]
            comment = ShareSale
            path = /share/ShareSale
            valid users = @sale,@dev
            writable = yes
            browseable = yes
    [SharePublic]
            comment = SharePublic
            path = /share/SharePublic
            valid users = @manager,@sale,@dev
            writable = yes
            browseable = yes
    #不能让其他用户删除自己的文件
    chmod o+t /share ShareManager ShareSale SharePublic
    
  4. 把用户 user101-user104 添加到 samba 用户。

    #把用户添加到Smba用户
    [root@linux4 ~]# smbpasswd -a user101
    New SMB password:
    Retype new SMB password:
    

猜你喜欢

转载自blog.csdn.net/Selina_lv/article/details/132201453