Windows 服务 - 使用域帐户并以管理员权限运行

时间:2021-04-15 14:47:19

标签: windows-services uac windowsdomainaccount windows-administration

我正在尝试设置具有以下要求的 Windows 服务:

  • 作为域帐户运行 - 此帐户可以访问该过程将涉及的其他共享
  • 在机器上拥有完整的管理权限,超过了 UAC - 特别需要能够取得文件夹的所有权

问题是该进程需要在某些时候取得文件夹的所有权,这是通过调用 takeown /A /F <file> 来完成的。这适用于命令行,但仅当它明确为 Run as Administrator - being a local admin on the machine does not give full admin rights 时,并且帐户仍然必须通过 UAC 提示,因此当作为服务运行时,我们只会得到 ERROR: The current logged on user does not have administrative privileges. .似乎为服务帐户绕过 UAC 的标准方法是使用 Local System 帐户,但这不是一个选项,因为那样我们将无法访问其他服务器。

有什么方法可以设置服务并说“在计算机上的完全管理员的上下文中以该帐户运行”?作为另一个潜在的解决方案,有没有办法从机器上的 UAC 中排除域帐户?任何其他解决方案只要作为服务运行、可以设置文件夹所有权并使用域帐户就可以工作。理想情况下,这是在不打开大安全漏洞的情况下完成的,例如完全禁用机器上的 UAC。

1 个答案:

答案 0 :(得分:1)

我无法重现您的问题。这是我的测试方法。

第 1 部分:使用非管理员所有者创建示例目录

  1. 创建目录C:\TestDir
  2. 禁用权限继承并将继承的权限复制到显式权限中
  3. 授予 NT SERVICE\TrustedInstaller 完全控制权限
  4. 将目录的所有者设置为 NT SERVICE\TrustedInstaller
  5. AdministratorsSYSTEM 帐户设置为具有读取权限
  6. 删除所有其他帐户的访问权限

完成后,验证以提升的管理员身份登录,我无法在该目录中创建文件。

第 2 部分:创建获取目录所有权的服务

我使用 nssm (https://nssm.cc) 做到了这一点:

  1. 创建一个简短的批处理文件 C:\scripts\TestService.cmd,其中包含 takeown 命令:

    takeown /F C:\TestDir /A

  2. 运行 nssm install 并指定:

    1. 应用路径:C:\Windows\System32\cmd.exe
    2. 参数:/C C:\scripts\TestService.cmd
    3. 重启操作:Stop service (oneshot mode)
    4. 登录:指定属于本地 Administrators 组成员的帐户的用户名和密码
    5. 标准输出重定向:C:\scripts\TestService-stdout.log
    6. stderr 重定向:C:\scripts\TestService-stderr.log

我启动了执行 C:\scripts\TestService.cmd 批处理文件的服务。 (服务在启动后立即停止,在本例中是预期的。)标准输出文件 C:\scripts\TestService-stdout.log 包含以下几行:

C:\Windows\System32>takeown /F C:\TestDir /A

SUCCESS: The file (or folder): "C:\TestDir" now owned by the administrators group.

此实验表明,使用属于本地 Administrators 组成员的帐户运行的服务已提升(即具有完全管理权限)。