B模块

来源:B模块.docx · 本地静态转换

·注意事项

1、预共享密钥的s2s连接地址不能用域名,只能用IP地址
2、每个客户配置:Set-ExecutionPolicy Bypass防止评分时使用脚本评分,客户端无法执行 / 题目要求运行脚本,结果无法执行
3、台Windows配置:new-netfirewallrule -dis pass -name pass放行所有规则,等同于直接关闭防火墙,但是防火墙实际上是开着的
4、配置 S2S VPN时,建议在接口加上 -persistent 参数,这样它断开也会自动重连(除非RemoteAccess服务没有启动)
5、DNS 反向解析,必须要对所有A记录创建反解,如果服务域名是用A记录写的,也必须要写PTR
6、客户端重新注册ddns的命令:ipconfig /registerdns
7、在检查环境时,可以先查看机器 时区、keymap,是否有预配置 IP、服务
8、安装 AD域后,将dns服务器地址设置为本地IP,如果没有IPv6地址,就取消IPv6网卡的监听,如果有,就把IPv6 DNS服务器地址也设置为本地
9、Server 2025中,配置failover服务时,如果要连接 iSCSI等磁盘,必须要先将failover集群创建出来后,再连接磁盘,否则创建failover集群时会在创建时一直卡住
10、如果子域、RODC域的DHCP无法授权,需要在 林根域DC上用命令授权:Add-DhcpServerInDC -DnsName "lyon-router.lyon.paris.local" -IPAddress 10.40.0.1
11、有时iscsi配置后端口不会起来,需要手动重启一下服务(重启机器也不行)

12、有时候使用iSCSI作为后端的failover,没有自动创建出存储池,可以不创建存储池,在failover上之际将这块磁盘添加进去,然后开启维护模式,在服务器管理器中格式化该磁盘(Win + K有时无法格式化)
13、一些需要计划任务运行bat脚本的,例如DHCP重启自动恢复,凭据可以指定SYSTEM(勾选使用最高权限),否则每次它执行都会弹出一个cmd框,这样不太好,使用SYSTEM用户就不会有弹窗
14、Server 2025中,adrms 增加了一个必要条件:1、必须能够验证证书吊销
15、如果有两个域、或者子域,建议将各自对端域的Domain Admins 加入机器本地的 administrators中:net localgroup Administrators “CN2026.wsc\Domain Admins” /add
16、Windows 域内机器会自动注册dns记录,但是假如这个机器有多个IP,例如网关,那么它就只会注册靠近网关的IP的那条记录,其他的记录需要手动添加
17、RSAT 连接时,如果是同一个域的,最好用域名来连接,用IP有时候无法连接,例如 DNS
18、可以使用 netsh interface ip set address tun0(定义的S2S接口名称) 来指定VPN接口地址
19、DFS 根目录和创建的DFS文件夹中的共享文件夹的根目录不能一样,否则会出问题,会导致路径重叠,DFS共享文件夹创建失败
20、在客户端创建证书申请,提交给CA签发的证书,有时会因为一些问题导致浏览器无法调用,这个时候可以在certlm.msc中将它导出为pfx,然后再重新导入就能使用了。
21、关于 DNS 转发器,要看题目说的是转发到一个域,还是转发到一个机器,如果是转发到一个域,那就要做条件转发,如果是指向某个dns机器,那就是普通转发器
22、web index文件不要用 echo 来写入内容,要用 set-content,否则就会像下面这样多两个字符
(Ansible的win_lineinfile 不会导致这样多出字符)

23、Windows Web HTTP重定向到HTTPS要使用 HTTP Redirect,不要用 HSTS,因为HSTS返回值是200,HTTP重定向返回值才是301(新建一个http站点来做这个)
并且这里最好这样写,末尾加 / ,下面两个都不要勾选,这样重定向时就会携带 URI
并且记得这里一定要改成 301,默认是 302

24、子域配置 DFS,创建DFS复制组时是一定会出问题的,因为父域会把子域的那台机器用父域的域名去访问,而不是用子域的,需要在DFS服务器上添加一个子域的 suffix:
Set-DnsClientGlobalSetting -SuffixSearchList @("shanghai.cn","beijing.shanghai.cn")
25、就算题目没有要求修改密码策略,也必须要更改密码策略,将密码最小更改期限改为 0(默认为1,这就导致只能修改一次密码,之后必须等待一天)
26、公网 DNS 如果有要求 NS的FQDN的话,需要先设置域名后缀,然后创建一个 . 根域,主机的FQDN就会自动创建了。
27、如果有两个域,共享文件夹记得给对端域的用户访问权限,共享文件夹权限不要用 Domain Users,要用 users(因为Users中有Authenticated Users,能够包含对端域用户)
28、添加一些用户权限时,建议使用 Administrators、Users 这些。Administrators同时包含本地管理员、域管理员;Users同时包含本地用户,Authenticated Users,Authenticated Users又同时包含域用户,对端做了域信任的域用户。
29、配置完组策略后,大部分都需要gpupdate 一下策略,然后logoff才会生效

一、Powershell/cmd 命令:

1、初始化:

new-netfirewallrule -dis pass -name pass
Set-LocalUser administrator -PasswordNeverExpires $true
net user administrator /active:yes
powercfg /change     monitor-timeout-ac 0
powercfg /change     standby-timeout-ac 0
netdom renamecomputer (hostname) /newname:
net user administrator Skill39@Shanghai
Set-LocalUser user -PasswordNeverExpires $true

2、CLI 设置 suffix:

3、设置 IP、DNS:

# IPv4:
netsh interface ip set address Ethernet0 static 192.168.10.1
netsh interface ipv4 set dnsservers Ethernet0 static 192.168.10.1 primary validate=no
# IPv6:
netsh interface ipv6 add address Ethernet0 2001:db8:10::1/64
netsh interface ipv6 add route ::/0 Ethernet0 2001:db8:10::fffe
netsh interface ipv6 set dnsservers Ethernet0 static 2001:db8:10::1 validate=no
## 删除地址、dns:
# IPv4:
netsh interface ip set address Ethernet0 dhcp
netsh interface ipv4 delete dnsservers Ethernet0 all
# IPv6:
netsh interface ipv6 delete address Ethernet0 2001:db8:10::1
netsh interface ipv6 delete route ::/0 Ethernet0 2001:db8:10::fffe
netsh interface ipv6 delete dnsservers Ethernet0 all

·关闭 IPv6 临时地址(只会在客户端开启,服务端不会开启):

Set-NetIpv6Protocol -UseTemporaryAddresses Disabled

4、安装软件包:

Install-WindowsFeature routing -IncludeManagementTools -Restart

5、共享文件夹:

共享权限 不对 SYSTEM、Administrators 做限制,这里只做白名单,其他应该在 NTFS 中去限制

# 创建共享:
net share Groups=D:\DFS\Groups /grant:everyone,full
# 定义多个组:
net share Groups=D:\DFS\Groups /grant:Users,full /grant:Sales,full
# 删除共享:
net share test \\HQS1 /delete
# 对共享文件夹设置拒绝权限:
Block-SmbShareAccess -Name "MKT" -AccountName "PARIS\User1" -Force
# 对文件夹下的所有子文件、子文件夹 关闭继承(并保留权限):
icacls c:\share\personal\ /inheritance:d /T /C
## /inheritance:r 就是禁用继承的同时删除继承来的权限(但是一般都是全删)
# 对文件夹下的所有子文件、子文件夹 开启继承:
icacls c:\share\personal\ /inheritance:e /T /C
可以这样查看参数:

6、findstr -i 参数,忽略大小写搜索

7、一键安装所有 RSAT 工具

Get-WindowsCapability -Online -name RSAT* | % {Add-WindowsCapability -Online -Name $_.Name -Source D:\LanguagesAndOptionalFeatures\ -LimitAccess}
# Tab简化:get-windowsca -on -na RSAT* | % {add-windowsca -on -n $_.name d:\l -li}

8、DNS:

1)添加/删除 DNS区域:

# 添加一个普通主区域:
Add-DnsServerPrimaryZone -Name test1.com -zonefile test1.com.dns
# 添加辅助区域: 
Add-DnsServerSecondaryZone -Name test1.com -ZoneFile test1.com.dns -MasterServers 192.168.10.1
# 添加普通反向区域:
## 注意不能写全192.168.10.0,不能这样写,必须写:192.168.10/24,最后一位IP 要省略
Add-DnsServerPrimaryZone -NetworkID 192.168.10/24 -ZoneFile 192.168.10.dns
# 添加AD集成主区域: 
Add-DnsServerPrimaryZone -Name test1.com -ReplicationScope Domain   //这里也可以写'Enterprise'
# 添加一个普通主区域:
Add-DnsServerPrimaryZone -NetworkID 192.168.10 -ZoneFile "10.168.192.in-addr.arpa.dns" 
# 添加AD集成反向区域:
Add-DnsServerPrimaryZone -NetworkID "192.168.10.0/24" -ReplicationScope "Domain"
# 删除 dns区域/AD集成区域:
Remove-DnsServerZone -Name test1.com -Force

2)添加 记录:

# A记录:
Add-DnsServerResourceRecordA -ZoneName "wsc2026.org" -Name "www" -IPv4Address "192.168.10.10"
# CNAME记录:
Add-DnsServerResourceRecordCName -ZoneName "wsc2026.org" -Name "ftp" -HostNameAlias "www.wsc2026.org."
# PTR 记录:
## 先用 get-dnsserverzone查看PTR区域,然后将其复制:

添加记录:
Add-DnsServerResourceRecordPtr -ZoneName 249.96.113.in-addr.arpa -PtrDomainName pubsrv01.green.com -Name 225
## -PtrDomainName参数指定域名
## -Name指定地址(注意要反着写,如果PTR区域是/16,并且要写的地址是192.168.10.1,那么这里-Name就要写 1.10 )
# 删除记录:
Remove-DNSServerResourceRecord -Name external -ZoneName paris.com -RRType A //在paris.com区域中删除名为external的A记录
或者:
Remove-DNSServerResourceRecordA -Name external -ZoneName paris.com

3)指定 根提示、转发器、条件转发器、委派:

## 指定根提示:
Add-DnsServerRootHint -NameServer ns.worldskills.org  -IPAddress 86.20.1.1
## 指定转发器:
Set-DnsServerForwarder -IPAddress 10.20.20.20
### 转发失败后,不允许使用根提示(不指定默认就是true):
Set-DnsServerForwarder -IPAddress 10.20.20.20 -UseRootHint $false
## 指定条件转发器:
Add-DnsServerConditionalForwarderZone -Name "beijing.cn" -MasterServers 10.20.20.20
## 指定委派(这种方式不能用于 根区域:. ):
### 首先得先有 shanghai.cn 区域:
Add-DnsServerPrimaryZone -zoneName gz.shanghai.cn -ZoneFile gz.shanghai.cn.dns
Add-DnsServerZoneDelegation -Name "shanghai.cn" -ChildZoneName "gz" -NameServer "dns1.gz.shanghai.cn" -IPAddress 10.30.30.10
## 指定委派(在根 . 区域下,并且其他区域也适用)
add-dnsserverprimaryzone -zonename . -zonefile root.dns
Add-DnsServerResourceRecord -ZoneName . -Name green.com -NS -NameServer pubsrv01.green.com.
Add-DnsServerResourceRecordA -ZoneName . -Name pubsrv01.green.com -IPv4Address 113.96.249.225
### 例如,在根区域上为 shanghai.cn配置委派:
Add-DnsServerPrimaryZone -ZoneName . -ZoneFile root.dns
Add-DnsServerZoneDelegation -Name . -ChildZoneName shanghai.cn -NameServer ns.shanghai.cn -IpAddress 86.20.3.254
## 删除:
## 删除委派:
Remove-DnsServerZoneDelegation -Name "." -ChildZoneName "shanghai.cn" -Force
## 删除转发器:
Remove-DnsServerForwarder -IPAddress 10.20.20.20 -Force
## 删除条件转发区域:
就是正常删除区域的命令
Remove-DnsServerZone -Name "beijing.cn" -Force
## 删除根提示:
Remove-DnsServerRootHint -NameServer "root.skills.cn" -IPAddress 10.0.0.10 -Force

4)域内客户端自动注册 dns 记录:

# 如果有多个IP,例如网关,只会注册一个地址
ipconfig /registerdns

·清除DNS缓存:

Clear-DnsServerCache -Force

9、DHCP:

授权 DHCP 服务器:
Add-DhcpServerindc -DnsName “dc.shanghai.cn” -IPAddress 192.168.1.1
# 这里的 dnsname写 FQDN(命令在dc上执行)
# 查看已经授权的dhcp服务器:
get-dhcpserverindc

·如果子域、RODC域的DHCP无法授权,需要在 林根域DC上用命令授权:

Add-DhcpServerInDC -DnsName "lyon-router.lyon.paris.local" -IPAddress 10.40.0.1

10、配置 ssh密钥对连接:

注意:普通用户直接放在 家目录 .ssh\authorized_keys 中

如果是 Administrator 用户,必须放在 C:\ProgramData\ssh\administrators_authorized_keys

直接把客户端公钥复制进去即可

1)先在 sshd 上开启 sshd:

start-service sshd
set-service sshd -starttype automatic

2)客户端生成密钥对:

ssh-keygen
 -t 指定算法
 -b 指定长度bit

然后把公钥拷给服务端,重命名为 authorized_keys 或 administrators_authorized_keys 就能连接了

·测试连接:

11、设置机器时区:

用命令设置机器时区:

二、脚本:

1、给Powershell传递参数,然后powershell调用cmd脚本,将参数传入cmd脚本中:

cmd脚本中,powershell的变量用 %,自定义的变量用 %%

2、读取用户表,创建用户:

用 $_.group 这样就能够读取到用户表属性

3、创建用户脚本:

三、BGP:

·注意:windows bgp 邻居 不要同时建立,要一个一个单独建立,否则会出问题

建立好一个之后,再去写下一个邻居的地址

1、IPv4 BGP:

Install-RemoteAccess -RoleType RoutingOnly
Add-BgpRouter -BgpIdentifier 1.1.1.1 -LocalASN 501 -TransitRouting Enabled

2、IPv6 BGP:

先用 netsh interface ipv6 set interface 开启 routing 路由转发
然后 set-bgprouter -ipv6routing enabled -localipv6address [随便指定一个ipv6地址]

然后就能够建立IPv6 BGP邻居了

·BGP 路由聚合:

# 创建路由聚合:
Add-BgpRoute-Aggregate -Prefix 2001:db8:20::/48 -SummaryOnly Enabled
# 然后将路由通告出去:
Add-BgpCustomRoute -Network 2001:db8:20::/48

四、CA:

注意,配置CA前,要按题目先确认 是否加域、是否要改 WorkGroup

1、导入信任 根证书:

certutil -addstore -f root c:\root1.cer
certutil -addstore -f root c:\sub1.cer

2、子CA 手动安装证书:

certutil -installcert c:\sub1.cer

3、使用 命令申请证书:

get-certificate -Template Web -SubjectName cn=www.paris.local -DnsName www.paris.local -CertStoreLocation cert:\LocalMachine\My
# 如果是多个字段:
get-certificate -Template Web -SubjectName "cn=www.paris.local,cn=test.paris.local" -DnsName "www.paris.local","test.paris.local" -CertStoreLocation cert:\LocalMachine\My

4、安装 根CA,设置CACommonName:

Install-AdcsCertificationAuthority -CACommonName worldskills-CA
## 指定CA类型为 企业CA、企业子CA、独立CA
-CAType EnterpriseRootCA //企业根CA
-CAType EnterpriseSubordinateCA  //企业子CA
-CAType StandaloneRootCA  //独立根CA
## 不指定类型时,WORKGROUP环境 默认是独立根CA,域环境 默认是企业根CA(这个点是GPT说的,具体不太确定,建议加上CAType)

10、创建存储池:

# 先添加4块磁盘
$PhysicalDisks=(Get-PhysicalDisk -CanPool $True)
或获取指定几块磁盘:
## 这里一共有4块盘,编号分别是 5、6、7、8(用 Get-PhysicalDisk查看编号)
$PhysicalDisks=5,6,7 | %{Get-PhysicalDisk -DeviceNumber $_}
# 创建存储池:
New-StoragePool -FriendlyName HRDKOREA-POOL -StorageSubSystemFriendlyName "Windows Storage*" -PhysicalDisks $PhysicalDisks
## 创建虚拟磁盘直接分配最大大小
New-VirtualDisk -StoragePoolFriendlyName HRDKOREA-POOL -FriendlyName RAID5 -ResiliencySettingName Parity -ProvisioningType Fixed -UseMaximumSize
或者精简分配,但是要手动指定大小上限:
New-VirtualDisk -StoragePoolFriendlyName HRDKOREA-POOL -FriendlyName RAID5 -ResiliencySettingName Parity -ProvisioningType Thin -Size 20GB
Set-VirtualDisk -FriendlyName RAID5 -IsManualAttach $False
get-disk //查看磁盘号码
Initialize-Disk -Number 10 -PartitionStyle GPT
New-Partition -DiskNumber 10 -UseMaximumSize -DriveLetter Z
Format-Volume -DriveLetter Z -Filesystem NTFS
get-physicaldisk //先查看物理磁盘,指定一个要被设置为热备的盘
## 将一块不在存储池中的磁盘设置为热备盘
Add-PhysicalDisk -StoragePoolFriendlyName "HRDKOREA-POOL" -PhysicalDisks (Get-PhysicalDisk -DeviceNumber 8) -Usage HotSpare
删除卷:
Get-Partition -DriveLetter Z | Remove-Partition

11、加入域:

Add-Computer -DomainName shanghai.cn

12、使用 windows 内置的端口转发来实现代理(它目前只支持TCP端口的代理)

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=10.0.1.100 connectport=80
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443connectaddress=10.0.1.100 connectport=443 

五:AD域:

1、安装AD域控:

1)安装新林:

install-addsforest

2)新增域控到现有域:

新域控的DNS必须要有SRV记录才能被使用

Install-ADDSDomainController -InstallDNS
## 可选参数:
-noglobalcatalog //不作为GC
-readonlyreplica //RODC
## Windows 第二个域控有时候不会自己创建DNS和SRV记录,此时可以先从主服务器复制DNS区域,然后手动生成 SRV记录:
nltest /dsregdns  //生成SRV记录
ipconfig /registerdns
restart-service netlogon

3)在现有林中创建新域:

Install-ADDSDomain
Install-ADDSDomain -NewDomainName "company.cn" -ParentDomainName "skills.com" -DomainType TreeDomain -InstallDNS

4)创建子域:

Install-ADDSDomain -NewDomainName "gz" -ParentDomainName "skills.com" -DomainType ChildDomain -InstallDNS

5)创建新林,但是本机不安装dns:

## DC:
install-addsforest -installdns:$false 
## DNS机器:
install-windowsfeature dns -in..
然后必须创建出DNS区域(不需要记录),并且将动态更新设置为 Nonsecure and secure

然后在DC上将dns服务器地址指向 DNS机器,然后打开停止并启动 netlogon 服务:
restart-service netlogon
这样 _msdcs 记录就自动生成了,然后可以再在DC上自动生成主机名记录:
ipconfig /registerdns
然后这样其他机器就能够加域了

六、VPN:

·证书记得要加上 IKE 字段

1、s2s:

·自定义 IKEv2 算法:

记得加 persistent 参数,让vpn接口持久化建立连接

# 设置VPN接口算法:
Add-VpnS2SInterface -Name fw.shanghai.cn -Destination fw.shanghai.cn -Protocol IKEv2 -AuthenticationMethod MachineCertificates -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256 -Persistent -CustomPolicy
 可选:
-AuthenticationTransformConstants SHA256128 
-PfsGroup PFS2048
# 同时要设置RRAS全局IKEv2算法为一样的值:
Set-VpnServerConfiguration -TunnelType IKEv2 -CustomPolicy -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256 
可选:
-AuthenticationTransformConstants SHA256128
-PfsGroup PFS2048

# 如果有拨号VPN,要同时修改VPN客户端的算法:
Set-VpnConnectionIPsecConfiguration -ConnectionName IKEv2 -EncryptionMethod AES256 -IntegrityCheckMethod SHA256 -DHGroup Group14 -CipherTransformConstants AES256 
可选:
-AuthenticationTransformConstants SHA256128
-PfsGroup PFS2048

·让 S2S 能够通过IPv6流量:

要开启IPv6 路由转发

# 有时图形化开启会报错,需要用命令开启:
netsh ras set type ipv4rtrtype=LANANDDD ipv6rtrtype=LANANDD rastype=none

然后添加 IPv6 路由指向 S2S 接口就行:

2、Remote Access:

·SSTP 关闭证书吊销验证:

修改注册表,不验证证书吊销列表

regedit

在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SstpSvc\Parameters 下新建DWORD(32位) “NoCertRevocationCheck”,值为1

七、adfs、wap:

·证书字段:

# 证书必须要有以下字段(可以全部写在一张证书中):
ADFS:
1、enterpriseregistration.test.com
2、连接名称,例如:adfs.test.com
 
wap:
1、wap必须要加上wap机器当前的主机名,例如:Server2.test.com
2、必须要包含 wap代理域名的 外网URL、内网URL
 
workfolder:
1、workfolder连接名称,例如:work.test.com
 
最后加上 *.域名

1、workfolder、adfs、wap:

# ADFS必须有两条DNS记录:
一条是:enterpriseregistration  例如:enterpriseregistration.test.com
一条是可以自定义的 adfs连接域名  例如:adfs.test.com
都指向ADFS自己
# 证书也要包含这些字段

·配置 adfs:

创建声明规则

https://windows-server-work-folders/V1

放行权限这里,everyone只能放行本地的域,如果要放行对端域,需要用 Permit Specific group 来同时指定本地和对端

添加依赖方属性:

·可以用命令导出,然后复制到 Server Core 导入:

(Get-AdfsRelyingPartyTrust).IssuanceTransformRules

# 在 adfs 上复制导出的内容:
Set-AdfsRelyingPartyTrust -TargetName "WorkFolders" -IssuanceTransformRules '@RuleName="WorkFolders" c:[Type=="http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",Issuer=="AD AUTHORITY"]=>issue(store="Active Directory",types=("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"),query=";userPrincipalName,displayName,sn,givenName;{0}",param=c.Value);'

·授权adfs、开启测试页面:

Grant-­AdfsApplicationPermission -­ServerRoleIdentifier "https://windows­-server-­work-folders/V1" -­AllowAllRegisteredClients ­-ScopeNames openid,profile
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
# 如果内网客户端也要使用 adfs认证(关闭它的windows身份认证):
Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider @("FormsAuthentication","MicrosoftPassportAuthentication")

·配置 wap:

·禁用 TLS 1.3:

·workfolder:

·注意,workfolder 必须要有一个 443站点绑定了443证书,否则无法使用

设置workfolder使用 adfs进行认证:

点击OK

2、Web、adfs、wap:

·配置 adfs:

创建声明感知:

这里的URL要写外网的

Add-AdfsRelyingPartyTrust -Name "Web-PreAuth" -Identifier "https://external.cn2026.mo/" -WSFedEndpoint "https://external.cn2026.mo/" -AccessControlPolicyName "Permit everyone"
# 如果要指定组:
Add-AdfsRelyingPartyTrust -Name "Web-PreAuth" -Identifier "https://external.cn2026.mo/" -WSFedEndpoint "https://external.cn2026.mo/" -AccessControlPolicyName "Permit specific group" -AccessControlPolicyParameters "CN2026\WebUsers"

测试过了,虽然都是声明感知,但是web这里不需要像 wap 一样配置 UPN那些字段,可以直接代理

Grant-­AdfsApplicationPermission -­ServerRoleIdentifier "https://external.cn2026.mo/" -­AllowAllRegisteredClients ­-ScopeNames openid,profile

·配置 WAP

八、RDS:

·注意:RDC 不能装在 ServerCore 上,会报错

·图形化有时无法创建 rd 会话集合,需要用命令创建:

用命令创建的合集默认允许访问的用户组:Domain Users

# 需要使用命令创建:
New-RDSessionCollection -ConnectionBroker server1.shanghai.org -CollectionName RDS -SessionHost Server2.shanghai.org,Server3.shanghai.org

·如果有两个域,配置RDS后,可以设置允许两个域的用户组访问(必须命令行设置、需要先双向信任):

Set-RDSessionCollectionConfiguration -CollectionName "RemoteApps" -UserGroup @("PARIS\Domain Users","LYON\Domain Users")

·自动连接 RemoteApp:

# 路径
用户配置 > 策略 > 管理模板 > Windows组件 > 远程左面服务 > RemoteApp和桌面连接 > 指定默认连接URL

·(SSO,只对域内客户端永久有效,只有域内客户端、服务器能够生效)可以让它不弹身份认证框:

在域控上编辑组策略:

# 组策略路径:
Computer Configuration - Administrative Templates - System - Credentials Delegation - "Allow delegating default credentials"
## 中文路径:
计算机配置 - 管理模板 - 系统 - 凭据委派 - 允许委派默认凭证

这里写 RDweb 和 RD网关的域名,前面需要用 * 号,因为有时RD会话主机与RD网关不在同一台机器,就要再写上RD会话主机的域名,比较麻烦,所以可以直接写 *(不能直接整个写 *,不写任何域名)

这个前缀在说明中能抄:

·客户端同步组策略后 必须要重启机器才会生效,logoff不行(对于server和客户端都能够生效)

九、磁盘:

1、NFS 共享:

服务端:

创建 NFS 共享:

windows 要开启 NFS客户端 功能:

·配置 自动挂载:

编写组策略:

将该脚本放到 public的desktop,开启自动运行这个脚本

2、iSCSI:

十、WSL:

1、预安装的 wsl 可能无法正常使用:

# 修改 locale,否则root用户无法正常使用命令:
vi /etc/default/locale

然后 wsl --shutdown 重新再打开wsl即可

# 挂载镜像:
## 先挂载 debian 镜像到虚拟机上
## 格式:drvfs

十一、组策略:

1、自动颁发用户证书:

十二:Ansible:

1、IIS:

# 可以使用的模块:
win_iis_website    //只能创建http站点
microsoft.iis.website    //可以同时创建80和443站点
win_file    //state: directory 幂等创建目录;state: touch 幂等创建文件
win_lineinfile    //幂等将内容写入文件

(1)同时创建80 和443站点:

这里写入 index.html,可以用模块:win_copy: content

这里的 certificate_hash 就是证书指纹

能同时配置http和https是因为这里bindings定义了两个端口(ansible-doc 中有模板)

(2)创建Web(复杂需求):

# 还没全部完成,大体的框架是做出来了

add.yml:

(3)状态页面:

status.html.j2:

剧本:

(4)如果只需要创建 80站点:

使用 win_iis_website会简单一点

2、创建用户、OU、组:

# 可以使用的模块:
microsoft.ad.user    //幂等创建 AD域用户
microsoft.ad.group    //幂等创建 AD域组
win_user    //幂等创建 本地用户
win_group    //幂等创建 本地组

(1)创建 OU、组、用户:

# 这里脚本有一些比较复杂的点:
1、因为这里要用两个 loop,每个loop的变量都是item,因此会冲突覆盖,因此要用 loop_control,将外层的loop的变量设置为 u
2、因为要用两个loop,但是一个 tasks中不能用两个loop,因此要用 include_tasks调用另一个yml剧本
3、因为json文件中给定的是一个范围,因此要用range 读取json中的变量
4、range 输出的范围,例如 1 ~ 25,只会给出 1 ~ 24,因此末尾需要 + 1
5、因为变量是字符串,不能直接加减运算,因此要 | int 转为 数字格式
6、因为要求用户是 sales01 - 25,因此要配置 '%02d' | format(数字) 进行补0
7、这里要定义 homedirectory和homedrive,要使用 attributes 来定义。

user.yml:

(2)创建域用户:

必须要加 update_password:on_create 才是幂等创建,否则每次都会更新密码

(3)2024 题目:

或:

·优化剧本:

题目要求要同时对子域和当前域创建,并且这里有的OU路径还是 dc=lyon

---
- name: paris site share folder
  hosts: DMZ-1
  gather_facts: false
  tasks:
    - name: Create a group in a custom path
      microsoft.ad.ou:
        name: "{{ item.ou.split(',')[0].split('=')[1] }}"
        path: DC=paris,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: Create a read group in a custom path
      microsoft.ad.group:
        name: "{{ item.read }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: Create a write group in a custom path
      microsoft.ad.group:
        name: "{{ item.write }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: SH-INTERNAL-1.paris.local
        domain_username: administrator@paris
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: Create Directory
      win_file:
        path: "c:\\project_share\\{{ item.name }}"
        state: directory
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: disable other user
      ansible.windows.win_acl_inheritance:
        path: "c:\\project_share\\{{ item.name }}"
        state: absent
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.write }}"
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t1
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: SYSTEM
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t2
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: administrators
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t3
    - name: read
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.read }}"
        rights: read
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
    - name: Add secret share
      ansible.windows.win_share:
        name: "{{ item.name }}"
        path: "c:\\project_share\\{{ item.name }}"
        full: "{{ item.write }}"
        read: "{{ item.read }}"
      loop: "{{ file_shares }}"
      when: "'lyon' not in item.ou"
      tags: t4
- name: lyon site share folder
  hosts: BJ-INTERNAL-1
  gather_facts: false
  tasks:
    - name: Create a group in a custom path
      microsoft.ad.ou:
        name: "{{ item.ou.split(',')[0].split('=')[1] }}"
        path: DC=lyon,DC=paris,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: Create a read group in a custom path
      microsoft.ad.group:
        name: "{{ item.read }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: Create a write group in a custom path
      microsoft.ad.group:
        name: "{{ item.write }}"
        path: "{{ item.ou }}"
        scope: domainlocal
        #path: OU=groups,DC=ansible,DC=local
        domain_server: BJ-INTERNAL-1.lyon.paris.local
        domain_username: administrator@lyon
        domain_password: Skills39
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: Create Directory
      win_file:
        path: "c:\\project_share\\{{ item.name }}"
        state: directory
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: disable other user
      ansible.windows.win_acl_inheritance:
        path: "c:\\project_share\\{{ item.name }}"
        state: absent
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.write }}"
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t1
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: SYSTEM
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t2
    - name: write
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: administrators
        rights: fullcontrol
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t3
    - name: read
      ansible.windows.win_acl:
        path: "c:\\project_share\\{{ item.name }}"
        user: "{{ item.read }}"
        rights: read
        type: allow
        state: present
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
    - name: Add secret share
      ansible.windows.win_share:
        name: "{{ item.name }}"
        path: "c:\\project_share\\{{ item.name }}"
        full: "{{ item.write }}"
        read: "{{ item.read }}"
      loop: "{{ file_shares }}"
      when: "'lyon' in item.ou"
      tags: t4

3、备份文件:

# 可用的模块:
win_copy    //将 Ansible 本机的文件文件夹 拷给 Windows
win_robocopy    //在 Windows 和 Windows 之间复制文件、文件夹
# 示例:
community.windows.win_robocopy:
  src: C:\Data
  dest: \\server2\backup    //需要能够访问到
  recurse: true
delegate_to:Server1   //最好指定在哪台机器执行,指定server1就是将server1的文件夹复制过去

(1)备份 web 根目录、DFS 目录:

# 这里脚本有一些比较复杂的点:
1、因为要调用两个when,并且要同时匹配两个条件,因此要在 when中用 and 来定义两个条件(如果同时写两个when条件,就是 or ,无论匹配上哪个条件都可)(或者用列表来写when的多个条件,这样用列表就等于用 when ... and ...)
2、并且还要5分钟内多次执行剧本将会退出并返回一段消息,所以这里剧本结尾创建一个文件,剧本开头去查看这个文件是否是5分钟内修改的,如果是,就debug一个信息,并且用 meta: end_play 终止剧本
3、在两台windows间复制文件、文件夹,用 win_robocopy 模块最好