如何在软件安装期间锁定普通用户(非管理员)?

如何在软件安装期间锁定普通用户(非管理员)?

我们有许多运行 Windows Embedded Standard 7 的瘦客户端和一个 SCCM 2012 R2 服务器来管理它们。瘦客户端启用了写入过滤器 (FBWF),因此机器更改不会持久。在极少数情况下,我们必须更新它们上的某些内容,我们只需通过 SCCM 进行部署,它会自动关闭写入过滤器并重新打开以提交更改。

以下是应该发生:
SCCM 客户端向用户发出通知,并设置 30 分钟倒计时以保存其工作并退出系统。然后,瘦客户端重新启动并禁用写入过滤器。登录屏幕显示挂锁并通知该设备正在维修,并且在 SCCM 执行其操作时不允许普通(非管理员)用户登录。SCCM 完成后,它会重新启用写入过滤器,重新启动,然后用户可以再次登录。

我遇到的问题是,我们使用感应卡读卡器登录系统。员工无需输入密码。他们只需轻触自己的徽章即可。这个系统很好,但运行它的软件破坏了 Windows Embedded 的写入过滤器自动化。

以下是实际上发生:
SCCM 客户端在关闭写入过滤器的情况下重新启动前通常会提前 15 分钟发出通知。重新启动时,普通的显示登录屏幕。用户可以在 SCCM 安装软件时登录系统并使用它。由于用户会话处于活动状态,因此它会在重新启动并重新启用写入过滤器之前再次发出 30 分钟的通知。

在这种情况下,它不仅会将部署时间额外增加 30 分钟,而且还会为普通用户在瘦客户端上提供 30-60 分钟的不受保护时间,并且当写入过滤器重新打开时,他们所做的任何更改都会永久地嵌入到映像中。

问题源于 Windows Embedded 7 使用与常规 Windows 7 不同的凭据提供程序(又名 GINA),但 SSO 产品必须替换 Windows 凭据提供程序才能正常运行。我已就此问题联系了供应商,但他们只是说这是一个已知问题,没有修复或解决方法。

我的问题是:
我如何以其他方式模拟所需的行为?我知道有一个组策略设置,您可以在其中拒绝特定用户组的本地登录。我原本想在安装之前和之后翻转相应的注册表设置,但我愿意接受其他想法。

如果有必要,我并不介意安装脚本。我精通脚本、PowerShell、VBScript 等。我只是想知道是否有人对如何解决这个问题有什么好主意。


更新:
我忘了说这些设备是在医院环境中使用,供工作人员记录患者情况。它们必须 24 小时可用,因此我们无法限制登录时间或配置维护窗口。我们通过提前通知轮班主管来管理停机时间,但任何超过一小时的停机都会成为法律合规问题,需要实施官方停机程序。

答案1

在我们开始之前,我想提出一个迂腐的观点,这更多是为了广大读者的利益,而不是为了你自己。

我们只是通过 SCCM 推送它

SCCM 是一种基于拉动的技术。我知道你的意思,但我发现,对于我的一级员工,我抓住每个机会强调 SCCM 不是基于推动的技术,这有助于他们更快地理解它。


我已经就此问题联系了供应商,但他们只是说这是一个已知问题,没有修复或解决方法

这太糟糕了,因为听起来这个问题的原因是嵌入式卡认证程序。继续联系供应商,也许他们真的会修复他们的软件。



谈到真正的答案——我看到了一些可能的解决方案,但没有一个是特别好的。

  • 为这些客户端配置维护窗口,以便您首次重新启动以从其写入过滤器中删除客户端,实际有效负载以及由此产生的重新启动都发生在员工不在终端的非工作时间。这似乎是最不痛苦的选择。无需使 SCCM 变得比现在更复杂。
  • 创建一个本地组策略模板将安全组添加到拒绝登录用户权限,然后将其作为应用程序部署的一部分进行分配/取消分配。
  • 使用 PowerShell 设置拒绝登录用户权限。我相信PowerShell 社区扩展 (PSCX)具有Set/Get-Privileges可让您操作用户权限分配的 cmdlet
  • 如果需要,您可以使用 API。下面是例子

答案2

似乎没有人触及使用任务序列来处理这个问题的可能性,所以请允许我列出其好处(假设你对它们不是很熟悉,但即使你熟悉也请阅读):

如果您安装和配置的所有内容都是通过 SCCM 处理的,那么您应该能够使用任务序列来完成此操作。主要对于 OSD,使用 TS 并不仅有的用于 OSD 并能提供以下好处:

无需登录工作站

TS 在 winlogon.exe 运行之前执行,因此用户不可能无意间登录,因为没有登录窗口。这引出了我的第二点:

自定义背景屏幕

您可以提供一个启动画面来显示正在进行维护,或者显示您真正想要显示的任何内容。

TS 实际上只是一个被美化的脚本,但是它具有很多功能,并且以某种方式组合在一起以减少开发时间,而且我发现了超出 OSD 的用例。

听起来你已经有一个脚本来完成你需要做的事情,所以你应该能够将其放入 TS 中,并进行最少的调试然后开始运行。

答案3

您尚未指定 SSO 软件是否使用 Active Directory 凭据,因此解决方案是利用 Active Directory 的“登录时间”功能。它处于每个用户级别,但可以在 Powershell 中轻松编写脚本(举例来说)。基本上,在 SCCM 更新窗口中将登录时间设置为“拒绝”登录,这样用户在 SCCM 执行其操作时将无法登录客户端。您需要进行第一次强制重启以注销他们(登录时间功能对已登录用户不起作用),但否则实施起来会很轻松。

答案4

可能想测试一下并看看它是否有效:

SCCM 活动开始时的脚本执行以下操作:

  • 从本地用户组中删除 NT AUTHORITY\Authenticated Users 身份
  • 从本地用户组中删除 NT AUTHORITY\Interactive 身份
  • 从本地用户组中删除域用户组

在最后:

将删除的安全主体添加回本地用户组

您添加/删除的实际组可能取决于您的计算机当前的配置方式。

更像拖车的东西,SCCM 活动的开始可以将 logoff.exe 的快捷方式复制到所有用户的开始菜单\启动文件夹(通常为 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp)。这将导致用户登录后立即注销会话。为了安全起见,您可能需要一个启动/关闭脚本来删除该快捷方式。(我相信在登录期间按住 Shift 键可以绕过启动快捷方式)。

相关内容