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
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
-
配置 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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gDDrlu3w-1691628635983)(https://lvcycy.oss-cn-beijing.aliyuncs.com/2022/Win/image-20220325204552186.png)]
-
把 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
域迁移
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 #根据提示输入是
-
将 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
-
将 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
右键属性→新建条件转发器
开启至此林中的反向解析
-
把云平台其他 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
-
在 windows1 上安装证书服务,证书颁发机构有效期为 20 年,颁发证书有效期 10 年,
证书信息:
- 公用名=skills.com,
- 国家=CN,
- 省=Beijing,
- 城市=Beijing,
- 组织=Skills,
- 组织单位=System。
-
chrome 浏览器访问 https 网站时,不出现证书警告提示信息。
-
在 windows2 上安装从属证书服务。
-
在 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; }
(二)组策略
【任务描述】 为了帮助系统管理员对计算机或是特定用户来进行不同配置,请采用组策略,实现软件、计算机和用户的策略设置。
-
部署软件 powershell7.2.msi,让域中主机自动安装 powershell(从物理机复制 powershell7.2.msi 到 windows1 的 C:\soft)。
创建文件夹;上传软件
设置共享文件夹
右键软件安装→属性
选择要部署的软件
配置完成结果截图
更新组策略
#更新组策略 gpupdate #强制更新 gpupdate /force
-
域中主机(含域控制器)自动申请“计算机”模板证书,自动注册“工作站身份验证”模板证书,该模板可用作“服务器身份验证”。 windows3 和 windows4 之间通信采用 IPSec 安全连接,采用计算机证书验证。
服务器身份验证
更新windows1;windows3-windows4组策略
验证测试windows3-windows4的联通性
ping 10.10.10.104
查看高级安全防火墙 主模式
组策略信任证书颁发机构
-
拒绝 dev 组从网络访问域控制器,允许 manager 组本地登录域控制器。
-
登录时不显示用户名,不显示上次登录,无须按 Ctrl+Alt+Del。
-
登录计算机时,在桌面新建名称为 chinaskills 的快捷方式,目标为 https://www.chinaskills-jsw.org,快捷键为 Ctrl+Shift+F6
-
为正在登录此计算机的所有用户设置漫游配置文件路径为 windows1 的 C:\share,每个用户提供单独的配置文件文件夹。
-
用户的主文件夹为 windows1 的 C:\home,驱动器号为 X。
-
每个用户的“文档”文件夹重定向到windows1的C:\Document,为每一用户创建一个文件夹。
-
所有域用户使用漫游用户配置文件,配置文件存储在 windows1 的 C:\Profiles 文件夹,为每个用户提供单独的配置文件文件夹。
-
新建 C:\DocShare 共享文件夹,共享名称为 ShareDoc,管理员组有完全访问权限,其他用户有只读权限;在 AD DS 中发布该共享。
-
允许 manager1 用户远程登录到域控制器,manager1 登录系统时,对 windows1的C:\DocShare 共享文件夹映射驱动器 Z。D2
-
拒绝用户对任何可移动存储类的权限 D3
(三)DHCP 服务
【任务描述】 为了提高 IP 地址的使用率,减少 IT 技术人员的工作量,请采用 DHCP 服务器,实现 IP 地址及其他网络参数的动态分配。
-
配置 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。
-
在 windows4 上安装 WDS,部署安装 Windows Server 2022 Datacenter Core。
需要先添加一个ISO镜像并挂载
-
两台 DHCP 服务器实现故障转移,故障转移关系名称为 dhcp,最长客户端提前期为 2 小时,模式为“负载平衡”,负载平衡比例各为 50%,状态切换间隔 60 分钟,启用消息验证,共享机密为 Pass-1234。
(四)文件共享
【任务描述】为了使局域网中的特定用户,能够访问共享文件夹内的特定资源,请采用文件共享,实现共享资源的安全访问。
-
在 windows1 创建用户主目录共享文件夹:本地目录为D:\share\home,共享名为 home,允许所有域用户可读可写。在本目录下为所有用户添加一个以名称命名的文件夹,该文件夹将设置为所有域用户的 home 目录,用户登录计算机成功后,自动映射挂载到 H 卷。禁止用户在该共享文件中创建“*.exe, *.bat, *.sh”文件,文件组名和模板名为 my。
压缩磁盘盘符为D
-
创建 manager 组共享文件夹:本地目录为 D:\share\manager,共享名为 manager,仅允许 manager 用户组成员拥有完全权限,该共享对其他组成员不可见。
-
创建 public 公共共享文件夹:本地目录为 D:\share\public,共享名为 public,仅允许 manager 用户组成员拥有更改权限,其他认证用户只读权限。
(五)DFS 服务
【任务描述】 为建立一个高效率的存储架构,请采用 DFS,实现集中管理共享文件。
-
在 windows3 至 windows5 的 C 分区划分 2GB 的空间,创建NTFS 分区,驱动器号为 D。
-
配置 windows3 为 DFS 服务器,命名空间为 DFSROOT,文件夹为 Pictures;实现 windows4 的 D:\Pics 和 windows5 的 D:\Images 同步。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vzx2Ag3-1691628635997)(https://lvcycy.oss-cn-beijing.aliyuncs.com/2022/Win/image-20220511193448770.png)]
在Windows4和Windows5分别在D盘上创建Pics和Images文件夹并设置共享
-
配置 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 服务。
-
把 windows3 配置为 ASP 网站,网站仅支持 dotnet CLR v4.0,站点名称为 asp。
默认安装dotnetCLRv4.0
-
http 和 https 绑定本机外部网络 IP 地址,仅允许使用域名访问,启用 HSTS,实现 http 访问自动跳转到 https。
-
网站目录为 C:\IIS\Contents,主页文档 index.aspx 的内容为"HelloAspx"。
注意主页文件后缀
-
启用 windows 身份验证,只有通过身份验证的用户才能访问到该站点。
-
新建虚拟目录 dev,对应物理目录 C:\development,该虚拟目录启用 windows 身份验证,只有通过身份验证的用户才能访问。
-
由 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
-
客户端访问时,必需有 SSL 证书,证书模板为“管理员”,使用windows5测试。
(七)打印服务
【任务描述】为了提高打印服务效率,节省成本,请采用共享打印服务,实现共享打印的安全性。
-
在 windows4 上安装打印机,驱动程序为“MS Publisher Color Printer”,名称和共享名称均为“SkillsPrinter”;在域中发布共享;使用组策略部署在"Default Domain Policy"的计算机。
在域中发布共享
-
通过浏览器访问打印机时,启用匿名身份认证,匿名用户为dev1。
-
客户端访问时,必需有 SSL 证书,证书模板为“管理员”,使用 windows5 测试。
此处做法同web题最后一问
(八)FTP 服务
【任务描述】为了提高文件的共享性,对用户进行透明和可靠高效地数据传送,请采用 FTP 服务器,实现文件安全传输。
-
把 windows4 配置为 FTP 服务器,FTP 站点名称为 ftp,站点绑定本机 IP 地址,站点根目录为 C:\ftp\ftproot。
安装
配置
题目要求与用户隔离后期在更改
-
站点通过 Active Directory隔离用户,使用 manager1和manager2 测试。
到域控制器上配置ADSI编辑器
【1】右键连接到
【2】找到manager1和manager2用户如果没有执行创建
创建隔离文件夹
找到msIIS-FTPDir 和msIIS-FTPRoot
-
设置 FTP 最大客户端连接数为 100。设置无任何操作的超时时间为 5 分钟,设置数据连接的超时时间为 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 }
-
在 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 操作系统卷上存储的数据。
-
将windows4的D盘启用 BitLocker,使用密码解锁驱动器,仅加密已用磁盘空间,使用 XTS-AES 加密模式,启用自动解锁。
三、Linux 服务
(一)DNS 服务
【任务描述】 创建 DNS 服务器,实现企业域名访问。
#激活网卡
nmcli connection up ens3
-
设置所有 linux 服务器的时区设为“上海”,本地时间调整为实际时间。
在所有机器上执行
[root@linux1 ~]# timedatectl set-timezone Asia/Shanghai
-
利用 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 #指定开机自启
-
利用 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
-
所有 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
-
配置 linux1 为 CA 服务器,为所有 linux 主机颁发证书,不允许修改/etc/pki/tls/openssl.conf。CA 证书有效期 20 年,CA 颁发证书有效期均为 10 年,
证书信息:
-
国家=“CN”,
-
省=“Beijing”,
-
城市=“Beijing”,
-
组织=“Skills”,
-
组织单位=“System”,
-
公用名=skills.com。
-
-
证书路径均为/etc/ssl/skills.crt,私钥路径均为/etc/ssl/skills.key,chrome 浏览器访问 https 网站时,不出现证书警告提示信息。
(二)apache2 服务
【任务描述】为了搭建快速、可靠的网页服务器,请采用 Apache 服务器,实现对企业网站的安全有效访问。
-
配置 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
-
使用 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
-
客户端访问时,必需有 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安装到客户机
安装这三个证书文件
-
关闭不安全的服务器信息,在任何页面不会出现系统和 WEB 服务器版本信息。
ServerTokens Prod ServerSignature Off
(三)tomcat 服务
【任务描述】 根据企业需要搭建动态网站,采用 tomcat 实现该需求。
-
配置 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网站配置配置Linux3;linux4
[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)]
-
配置 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)]
-
利用 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 服务
【任务描述】 为了使局域网中的特定用户,能够访问共享文件夹内的特定资源,请采用文件共享,实现共享资源的安全访问。
-
配置 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
-
在 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
-
配置 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
-
配置 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 服务器,集中管理网域中所有主机的帐号密码。
-
配置 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
-
配置 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 服务,实现高并发数据和海量数据的读写。
-
利用 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 服务,实现方便、严密、有效的数据组织、数据维护、数据控制和数据运用。
-
配置 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 #退出数据库
-
设置可以直接在 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 服务实现需求。
-
配置 linux4 为 PXE 服务器,实现完全自动安装 Linux。
#安装相关软件包 [root@lvs ~]# yum install -y httpd syslinux xinetd tftp-server dhcp-server
-
安装 DHCP 服务,地址范围为 10.10.20.10-10.10.20.19,网关为10.10.20.254,DNS 为 10.10.20.101,域名为 skills.com。
-
安装 tftpd-hpa,为 PXE 客户端提供启动服务,TFTP 目录为默认值。
-
安装 apache2 服务,为 PXE 客户端提供软件包;挂载 linux 光盘文件到/var/www/html/cdrom。
(九)WordPress 服务
【任务描述】为了推广产品,提升品牌形象,合理利用资源,降低成本,请采用 WordPress 服务,为企业建立博客。
-
在 linux5 上安装图形界面,并设置默认启动模式为图形界面。安装 xrdp,物理机可以使用远程桌面连接该主机。
安装GUI、xrdp
#安装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
-
配置 C 语言和 C++语言的编译环境。
安装C语言编译环境
[root@linux5 ~]# yum install gcc gcc-c++ -y
-
安装 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
-
利用 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 服务,实现自动化运维。
-
在 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
-
编写/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 服务,管理和控制容器。
-
在 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
-
使用 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 服务器,实现文件安全传输。
-
配置 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
-
配置虚拟用户认证模式。虚拟用户 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 邮件服务器,实现更快、更容易管理、更安全的邮件服务。
-
配置 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
-
仅支持 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/
-
创建用户 mail1 和 mail2,向 [email protected] 发送的邮件,每个用户都会收到。
-
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)]
(十四)脚本
【任务描述】为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作**。**
-
在 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
-
在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 操作系统的资源共享兼容。
-
在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
-
配置为 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
-
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
-
把用户 user101-user104 添加到 samba 用户。
#把用户添加到Smba用户 [root@linux4 ~]# smbpasswd -a user101 New SMB password: Retype new SMB password:
为了减少重复性任务的工作量,节省人力和时间,请采用脚本,实现快速批量的操作**。**
-
在 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
-
在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 操作系统的资源共享兼容。
-
在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
-
配置为 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
-
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
-
把用户 user101-user104 添加到 samba 用户。
#把用户添加到Smba用户 [root@linux4 ~]# smbpasswd -a user101 New SMB password: Retype new SMB password: