2014 年 6 月 17 日,我们有八台 Windows Server 2008 R2 RDSH 服务器(所有成员都属于同一 RDSH 场 {brokered})突然认为用户登录时 Windows 激活丢失。如果用户之前登录过,它们可以正常运行,但没有人可以建立新的登录。如果管理员尝试激活 Windows,则会出现错误代码 0x80070005。这些服务器中的每一台都在运行 ESET File Security for Windows Servers 4.5.12011.0 进行防病毒保护。事件查看器根本无法加载,并且会导致 MMC 崩溃(最终发现事件 ID6001&6004就在他们都疯了的时候,Winlogon 的攻击发生了)。
- 搜索TechNet并发现:http://support.microsoft.com/kb/2704233
- 检查注册表后发现以下键完全缺失:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-18
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-19
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-20 - 还发现“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\”中的键丢失:
Default
ProfilesDirectory
ProgramData
Public - 经过进一步调查,发现 C:\Users\ 中的“默认用户”的符号链接也丢失了(应该链接到 C:\Users\Default 并具有特殊的 NTFS 文件夹权限)。
- 发现 C:\Users\Public\Desktop 被命名为“Public Desktop”,尽管“C:\ProgramData\Desktop”的符号链接指向“C:\Users\Public\Desktop”
注意:我将发布修复所需的内容,因为我已经解决了,但我想在 ServerFault.com 上发布信息,以防其他人遇到这个问题。
答案1
以下是我解决问题的方法。这里有一些极其危险和破坏数据的步骤。 如果您没有用户帐户的漫游配置文件和文件夹重定向,那么您应该认真致电 Microsoft 支持,因为这不是解决问题的方法,因为它会删除文件!!!!! 使用这些说明的任何风险均由您自行承担!!!!!
- 在 RD 会话主机配置(用户登录模式)中将服务器设置为不允许新登录
- 从服务器注销用户(尽可能优雅地注销)
- 重新创建丢失的配置文件列表注册表项(参见 MS 文章):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-18
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-19
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\S-1-5-20 - 重新创建 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ 键 (REG_EXPAND_SZ)
Default > %SystemDrive%\Users\Default
ProfilesDirectory > %SystemDrive%\Users
ProgramData > %SystemDrive%\ProgramData
Public > %SystemDrive%\Users\Public - 用过的Sysinternals 连接点查看“C:\Users\Default User”并重新创建“C:\Users\Default User”以符号链接到“C:\Users\Default”
安全 - 高级 - 更改权限...
取消选中“包括可继承的权限...”
添加“所有人”>应用于“仅此文件夹”>拒绝“列出文件夹/读取数据”
添加“所有人”>应用于“仅此文件夹”>允许“遍历文件夹/执行文件”+“列出文件夹/读取数据”+“读取属性”+“读取扩展属性”+“读取权限”
添加“SYSTEM”>应用于“仅此文件夹”>允许“完全控制”
添加“管理员 (%COMPUTERNAME%\Administrators)”>应用于“仅此文件夹”>允许“完全控制” - 将 NTFS 权限设置为“C:\Users\Default User”以与另一个 RDSH 服务器完全匹配(来自不同的服务器场,因此我知道默认值是什么)
- 将“C:\Users\Public\Public Desktop”重命名为“C:\Users\Public\Desktop”
- 重启服务器
- 重新启动后,Windows 识别到 Windows 已激活并且服务正常运行(Windows Defender 之前曾被炸毁过)。
- 系统属性>高级>用户配置文件>未显示任何以前的 RDSH 用户。
- 我们使用漫游配置文件和文件夹重定向 GPO,因此用户未显示在配置文件中并不是完全的损失。只需清理 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist\ 中以前的 RDSH 用户的 ProfileList 注册表项(不要删除本地计算机管理员 %SID% 和 S-1-5-18、S-1-5-19、S-1-5-20 项!!!!!)
- 必须清理已删除 ProfileList 项的用户文件夹 C:\Users\ 。
如果您没有漫游配置文件和文件夹重定向设置(其中用户文件不仅存储在此服务器上),请不要这样做!!!
选择除以下内容之外的所有文件和文件夹:
所有用户
管理员
管理员。{%YOURDOMAINNAME%}
默认
默认用户
公共
desktop.ini
永久删除注册表的ProfileList部分中不再存在的配置文件的选定文件夹(SHIFT+DELETE)。 - 再次重新启动并验证一切是否正常。
- 一旦您对服务器满意,请在 RD 会话主机配置中再次允许新的登录。
注意:如果您正在运行虚拟 RDSH 服务器,并且您想避免这种疯狂的情况,您可能需要从备份中恢复您的 RDSH 服务器(如果您有一个正常运行的备份系统)。