管理其他用户的网络访问凭据

管理其他用户的网络访问凭据

我有一个用于运行服务的 Windows 帐户(即,任何人都不能以该帐户登录)。结果发现其中一个服务需要访问位于不同 Windows 域中的计算机上的远程网络共享,因此需要提供远程凭据才能访问该共享。

现在如果需要访问远程共享时,我只需打开凭据管理器并保存所需的凭据即可。但这不是我的做法,我对凭据管理器的理解是它只保存登录用户要使用的凭据。

我当然可以解决这个问题。我暂时提升服务帐户的权限以允许交互式登录,然后以该用户身份登录并使用凭据管理器存储正确的远程凭据。然后我删除交互式登录权限。但这感觉很不礼貌,不是我应该做的事情。

所以我的问题是:除了您登录的帐户之外,还有其他方法可以保存远程凭据吗?有没有更好的方法来解决我的问题。

答案1

如果您可以访问远程计算机,则可以将您的服务帐户添加到本地用户组,​​并将用户名/密码与您要使用的用户名/密码匹配。不要忘记授予它管理权限。

然后转到系统菜单中的远程登录选项卡,并将该​​用户添加为允许远程登录的用户。当我需要访问我们网络上的某些机器(但出于某种原因不属于域的一部分)时,我就会这样做。

答案2

虽然结果证明这与您的情况无关,但为了未来搜索者的利益,实际问题“管理其他用户的网络访问凭据”的答案是:

runas /user:serviceaccountname "%windir%\system32\cmdkey.exe /add:server.domain.com /user:username /pass:password"

serviceaccountname这将在 的凭证库中创建一个凭证,以供server.domain.com使用username/ password

/user还支持domain\usernameusername@domain风格。

答案3

为另一个用户设置凭据的最简单方法远程使用cmdkey,创建一个计划任务,该任务在您想要通过 添加凭据的用户帐户下运行cmdkey

通过 使用管理员帐户 连接到相关机器Enter-PSSession -ComputerName target_machine(或通过 运行命令Invoke-Command)。

SeBatchLogonRight设置

如果您想要通过其添加凭据的用户帐户cmdkey已经具有SeBatchLogonRight设置(通常只有管理员),那么它相当简单:

$job = Register-ScheduledJob -ScriptBlock {
     cmdkey /add:target_machine:target_port /user:target_domain\target_user /pass:target_user_password
} -Name "Add user credentials" -Credential (New-Object System.Management.Automation.PSCredential("source_domain\source_user", (ConvertTo-SecureString "source_user_password" -AsPlainText -Force))) -RunNow

Unregister-ScheduledJob -InputObject $job

沒有SeBatchLogonRight已設定

如果您要通过其添加凭据的用户帐户cmdkey尚未设置SeBatchLogonRight,则需要(暂时)授予其权限。远程执行此操作的一种简单方法是使用 Tony Pombo 的 PowerShell 模块(原始ScriptCenter 位置不再可用,因此此脚本现在使用公共 GitHub 仓库):

Invoke-WebRequest https://raw.githubusercontent.com/MightyCrizo/cis-microsoft-windows-server-2016-benchmark-powershell/4294a356825a10afacf7da3969ba2f5edf761b21/UserRights.psm1 -OutFile UserRights.psm1

# You might need to setup at least the following execution policy, if you haven't already:
# Set-ExecutionPolicy AllSigned

Import-Module .\UserRights.psm1

Grant-UserRight -Account "source_machine\source_user" -Right SeBatchLogonRight

$job = Register-ScheduledJob -ScriptBlock {
     cmdkey /add:target_machine:target_port /user:target_domain\target_user /pass:target_user_password
} -Name "Add user credentials" -Credential (New-Object System.Management.Automation.PSCredential("source_domain\source_user", (ConvertTo-SecureString "source_user_password" -AsPlainText -Force))) -RunNow

Unregister-ScheduledJob -InputObject $job

Revoke-UserRight -Account "source_machine\source_user" -Right SeBatchLogonRight

下列占位符已在上述脚本中使用:

  • source_domain= 该域名source_user属于。
  • source_usercmdkey=将为其执行命令的用户(cmdkey在该用户的上下文中运行)。
  • source_user_password= 账户的密码source_user
  • target_machine= 命令中使用的目标计算机cmdkey
  • target_port= 命令中使用的目标端口cmdkey(可选)。(例如,1433与 SQL Server 结合使用 Windows 身份验证。)
  • target_domain= 该域名target_user属于。
  • target_user= 命令中使用的目标用户帐户cmdkeysource_user当连接到时,将模拟该用户target_machine
  • target_user_password= 账户的密码target_user

答案4

作为另一种选择,我使用执行程序

psexec -u otheruser -p otheruserpassword cmdkey.exe /add:server.domain.com /user:username /pass:password

相关内容