我正在尝试设置具有以下要求的 Windows 服务:
问题是该进程需要在某些时候取得文件夹的所有权,这是通过调用 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。
答案 0 :(得分:1)
我无法重现您的问题。这是我的测试方法。
C:\TestDir
NT SERVICE\TrustedInstaller
完全控制权限NT SERVICE\TrustedInstaller
Administrators
和 SYSTEM
帐户设置为具有读取权限完成后,验证以提升的管理员身份登录,我无法在该目录中创建文件。
我使用 nssm (https://nssm.cc) 做到了这一点:
创建一个简短的批处理文件 C:\scripts\TestService.cmd
,其中包含 takeown
命令:
takeown /F C:\TestDir /A
运行 nssm install
并指定:
C:\Windows\System32\cmd.exe
/C C:\scripts\TestService.cmd
Stop service (oneshot mode)
Administrators
组成员的帐户的用户名和密码C:\scripts\TestService-stdout.log
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
组成员的帐户运行的服务已提升(即具有完全管理权限)。