【问题标题】:Run command as System User in Powershell在 Powershell 中以系统用户身份运行命令
【发布时间】:2017-07-12 11:48:55
【问题描述】:

我在网上找到了几个答案,但并不是我真正想要的。

问题如下: 使用“Networker”恢复文件时,文件的 ACL 与备份文件时的 ACL 相同,与文件恢复到的文件夹中的继承无关。意味着ACL的继承不会影响新恢复的文件。

这给我留下了一个问题,即只有 3 个帐户有权更改 ACL。

  • 用户,文件所属
  • 域管理员
  • 系统帐号

为了解决这个问题,我想运行一个自动脚本来修复 ACL 并激活正确的继承。

脚本的系统用户必须是三者之一。 用户正在改变,因此不是一个有效的选择,我也不想留下任何域管理员凭据,也不想将域管理员权限授予服务帐户。

这让我有了系统帐户来完成这项工作,问题来了:

如何在系统帐户凭据下的 powershell 中执行任务?

我试过了

$username = "NT Authority\System"
$password = ConvertTo-SecureString -String "" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist @($username, $password)

由于密码为空,我无法真正使用它创建凭据。

所有语言环境中的帐户名称都是 .\LocalSystem。名字, 也可以使用 LocalSystem 或 ComputerName\LocalSystem。此帐户 没有密码。 https://msdn.microsoft.com/de-de/library/windows/desktop/ms684190(v=vs.85).aspx

所以现在我有点困惑如何让它发挥作用。

编辑: 该文件系统在 EMC 上运行,并不是真正的 Windows 文件系统,而只是与 Linux 系统挂钩。所以没有本地管理员帐号。

TL;DR

我想用powershell的系统账号继承文件的ACL权限,怎么办?

【问题讨论】:

    标签: windows powershell acl local-system-account


    【解决方案1】:

    域管理员通过本地管理员组获得访问权限。本地管理员可以取得任何本地对象的所有权,并随后授予该对象新的权限。

    以管理员身份运行这样的事情应该做你想做的事:

    takeown /f C:\some\file_or_folder /a /r /d:y
    icacls C:\some\file_or_folder /reset /t /c /q
    

    切勿将 SYSTEM 帐户用于此类事情。

    【讨论】:

    • 是的,问题在于文件系统在 EMC 上运行,并不是真正的 Windows 文件系统,而只是与 Linux 系统挂钩。所以没有本地管理员帐户:(我现在看到的唯一另一种方法是“使用”普通文件系统恢复到不同的位置,因此是本地管理员。
    • 如果没有本地管理员帐户,是什么让您相信会有本地 SYSTEM 帐户?请编辑您的问题并提供有关您的环境、操作系统和文件系统的更多信息。
    • 嗨 Ansgar,如前所述,系统帐户显示在恢复文件的 ACL 中。但是,您是对的,实际上有一个系统帐户似乎很奇怪。
    • @AnsgarWiechers 如果您想运行一个 PS 脚本,该脚本通常在 AD 中作为ComputerName$ 帐户在您作为启动和关闭重新启动时运行,这是否意味着您希望以LocalSystem?脚本驻留的共享和它写入的日志文件仅授予对Domain Computers 的访问权限,但我试图远程访问Enter-PSSessionInvoke-Commands 以使其无需重新启动即可运行,但访问被拒绝。是否没有纯 PowerShell 或什至具有 AddType C# 定义或在没有 psexec 或任务调度程序或 nircmd 的情况下实现这一点的东西?你已经有答案了吗?
    • Related 是here,所以有人会认为如果编译好的 nircmd 或 psexec 可以做到,那么如果 PowerShell 没有,为什么不在 PowerShell 中使用 .Net 或 C 或 C# 代码一种使某些东西作为系统或本地系统执行的方法。仅在需要时在极端情况下手动使用,而不是用于自动化或类似的事情。
    【解决方案2】:

    https://github.com/mkellerman/Invoke-CommandAs

    使用提供的凭据或系统对本地/远程计算机进行调用命令的功能。返回 PSObject,处理网络中断并解决任何双跳问题。

    试试看,如果这能解决您的问题,请告诉我。

    【讨论】:

      【解决方案3】:

      如果您可以安装(非常有用的)第 3 方程序,您可以尝试以下方法。这是一个可移植的 .zip,没有真正的安装。

      以管理员身份运行:

      C:\WINDOWS\system32>nircmd.exe elevatecmd runassystem c:\windows\System32\cmd.exe
      

      启动一个新的 cmd 窗口:

      Microsoft Windows [Version 10.0.18362.418]
      
      (c) 2019 Microsoft Corporation. All rights reserved.
      
      C:\WINDOWS\system32>whoami
      nt authority\system
      
      C:\WINDOWS\system32>
      

      https://www.nirsoft.net/utils/nircmd.html

      【讨论】:

      • 必须有powershell native 的方式来做到这一点?
      • 同样来自 NirSoft:AdvancedRun.exe /EXEFilename "C:\Program Files\PowerShell\6\pwsh.exe" /RunAs 4 /Run 这里的“4”代表SYSTEM 运行。
      • ahhh,,, Nirsoft 工具...我随时可以使用它们...在 Sysinternals 工具附近... ;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2017-06-11
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多