0

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

  • 作为域帐户运行 - 此帐户有权访问该进程将触及的其他共享
  • 在机器上拥有完全的管理权限,通过 UAC - 特别需要能够拥有文件夹的所有权

问题是该过程需要在某些时候取得文件夹的所有权,这是通过调用takeown /A /F <file>. 这适用于命令行,但只有当它明确时Run as Administrator-作为机器上的本地管理员并没有提供完整的管理员权限,并且该帐户仍然必须通过 UAC 提示符,所以当作为服务运行时,我们只是得到ERROR: The current logged on user does not have administrative privileges.。似乎为服务帐户绕过 UAC 的标准方法是使用该Local System帐户,但这不是一个选项,因为这样我们就无法访问其他服务器。

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

4

1 回答 1

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. 标准错误重定向: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组成员的帐户运行的服务会以提升的权限运行(即,具有完全的管理权限)。

于 2021-04-20T15:27:48.873 回答