tiagocolo/ActiveDirectory-HelpDesk-Lab
GitHub: tiagocolo/ActiveDirectory-HelpDesk-Lab
一个从零搭建的 Active Directory 实验环境,用于练习 IT 支持/Help Desk 工作流程中的域管理、用户自动化、权限配置和应急响应。
Stars: 0 | Forks: 0
# Active Directory Help Desk 实验环境
这是我从头搭建的一个实操 AD 实验环境,用于练习真实的 IT 支持 / Help Desk 工作流程 —— 包括域设置、自动化用户入职、访问控制、GPO 加固,以及一次非常令人难忘的事故:我意外删除了自己的管理员账户。
## 为什么搭建这个环境
我希望为我的作品集准备一些比“我跟着 YouTube 教程做了一遍”更有分量的内容。因此,我设置了一个小型公司场景(2 个部门,6 个用户),并记录了所有过程 —— 包括犯过的错误。你正在阅读的这份 README 就是我在操作过程中随手写下的文档,而不是事后润色出来的。
**本项目涵盖:**
- AD DS 部署与配置
- 通过 PowerShell 自动化创建用户(基于 CSV)
- 安全组、OU 结构、GPO
- NTFS 与共享权限的对比(纵深防御)
- 为 Domain Controller 配置静态 IP / DNS
- 限制 USB 存储设备的 GPO
- 应急响应(没错,我搞砸过一些东西)
- 所有内容均映射至 CIS Controls v8
## 环境设置
**宿主机:** 运行于 VirtualBox 上的 Windows Server 2025 Standard (评估版)
**网络:** 双网络适配器 —— NAT 用于连接互联网,内部网络(`adlab`,192.168.50.0/24)用于处理域流量
**DC 静态 IP:** `192.168.50.10/24`,无网关(隔离网段),DNS `127.0.0.1`
**一个小麻烦:** `sconfig` 不允许我在没有网关的情况下设置静态 IP(它将留空输入视为“取消”)。我通过 PowerShell 使用 `New-NetIPAddress` 解决了这个问题 —— 这样干净多了。
## 我做了什么(附截图)
每个步骤在 [`screenshots/`](./screenshots/) 中都有截图和简要说明。
| # | 步骤 |
|---|------|
| 01 | **静态 IP** —— 通过 PowerShell 设置 192.168.50.10/24,DNS 127.0.0.1 |
| 02 | **安装 AD DS** —— 在服务器管理器中安装角色 |
| 03 | **提升为 DC** —— 为 `lab.local` 建立新的林根 |
| 04 | **IT OU** —— 为 IT 部门创建 OU |
| 05 | **RRHH OU** —— 为 HR 创建 OU |
| 06 | **Users CSV** —— 为自动化脚本提供数据的员工信息文件 |
| 07 | **PowerShell 创建用户** —— 脚本运行中,批量创建用户 |
| 08 | **脚本执行策略** —— 必须允许运行本地 PS 脚本 |
| 09 | **安全组** —— 创建了 IT-Support 和 RRHH-Team |
| 10 | **将用户添加到组** —— 分配成员身份 |
| 11 | **DNS 配置** —— 正向和反向查找区域 |
| 12 | **NTFS 权限** —— 授予 RRHH-Team 对 RRHH-Docs 的修改权限 |
| 13 | **SMB 共享** —— 带有访问控制的网络共享 |
| 14 | **GPO 限制 USB** —— 在 RRHH OU 上禁用存储设备的策略 |
按顺序查看截图:[`screenshots/README.md`](./screenshots/README.md)
## 安全说明 (CIS Controls)
我将此项目映射到了 CIS Controls v8,使其更贴近实际工作需求:
**CIS 4 —— 安全配置:** 在 RRHH OU 上禁用 USB 存储的 GPO。它针对 `UsbStor` 驱动程序 (Start = 4),因此 Windows 会检测到设备但永远不会挂载它。键盘和鼠标仍然可以工作 —— 此策略专门针对存储设备。
**CIS 6 —— 访问控制:** RRHH-Docs 共享具有两层权限:
- NTFS:RRHH-Team 获得修改权限(读/写/编辑,但不能更改权限)
- 共享 (SMB):RRHH-Team 获得完全控制权限
有效权限取决于两者中更严格的那一个(NTFS)。这是有意为之的 —— 你在 NTFS 级别设置真正的上限,而将共享权限完全放开。
**CIS 8 —— 应急响应:** 见下文。
## 事故记录(我删除了自己的管理员账户)
在清理测试用户时,我运行了一个过滤器来查找设置了 `Title` 字段的用户。我自己的域账户刚好也有 Title。删除命令把我也删掉了 —— 而当时我还处于登录状态。
**发生了什么:** 活动会话仍然保持存活(Windows 不会在每次执行命令时重新验证),但 `Get-ADUser` 已经找不到我的账户了。内置的 Administrator 账户依然存在,因为它无法从 Domain Admins 中被移除。
**我是如何修复的:** 以 Administrator 身份登录,重新创建了账户,将其再次添加到 Domain Admins 中,并在关闭会话前进行了测试。
**经验教训:** 永远不要在未经过滤的情况下直接进行批量删除。请使用明确的允许列表,或者至少先运行 `-WhatIf`。我很幸运,因为内置的 Administrator 账户仍然可用 —— 在真实的生产环境中,这可能会酿成惨痛的事故。
我在 [screenshots README](./screenshots/README.md#-incident-report-accidental-loss-of-domain-admin-access) 中写下了完整的时间线,因为这值得铭记。
## 待办事项 (路线图)
虚拟机在我完成最后几个项目之前崩溃了:
- [x] 域 + DNS
- [x] 为 IT 和 RRHH 创建 OU
- [x] 自动化创建用户 (PowerShell + CSV)
- [x] 安全组
- [x] NTFS + 共享权限
- [x] GPO 限制 USB
- [x] 记录事故文档
- [ ] 将 Windows 客户端加入域(原定为下一步计划)
- [ ] 模拟 Help Desk 工单(账户锁定、人员调动、离职处理)
- [ ] 在 Jira 中追踪这些流程,以体验完整的工作流
核心部分已经完成,其余的是优化工作。
## 如何自己动手搭建
1. 安装 VirtualBox,创建一个安装了 Windows Server 2025 (评估版) 的虚拟机
2. 配置两个网络适配器:NAT + 内部网络(`adlab`)
3. 设置静态 IP:
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.50.10 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 127.0.0.1
4. 安装 AD DS 并进行提升:
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName "lab.local"
5. 配合 [`users.csv`](./scripts/users.csv) 运行 [`scripts/Create-Users.ps1`](./scripts/Create-Users.ps1)
6. 按照截图所示设置组、权限和 GPO
## 仓库结构
```
ActiveDirectory-HelpDesk-Lab/
├── README.md
├── screenshots/ <- Step-by-step screenshots with descriptions
├── network-diagrams/ <- Network topology visuals
├── scripts/ <- PowerShell + CSV for user provisioning
└── .gitignore
```
## 联系方式
**Tiago Colo Ceppone**
colotiago8@gmail.com
[linkedin.com/in/tiago-colo](https://linkedin.com/in/tiago-colo)
此项目旨在学习,而非作秀。如果有什么不对或可以改进的地方,我真心希望能得到反馈。
标签:AI合规, GPO加固, IPv6, Libemu, PowerShell, 活动目录, 系统运维, 自动化运维, 运维