【发布时间】:2018-01-29 12:49:34
【问题描述】:
我在执行需要比调用用户更多权限的命令时遇到了一些麻烦。
出于管理原因,我编写了一个包含 powershell 脚本和 sn-ps 的“管理存储库”。如果我发布一个新标签,我会创建一个自动导入器脚本和一个自动更新。像魅力一样工作!
但我们决定将一些权限分配给其他用户以满足JEA 的一些要求。
现在我们的非特权“工作”用户正在导入存储库,并且不允许运行每个命令。 (例如查询 DHCP 服务器)
我认为这不会有问题 - 认为 Get-Credential 只是与 priv 用户一起运行 priv 功能......但我错了......这并不像我想象的那么简单。
第一个问题是该命令不接受 -credential 参数。 我最终得到了这样的结果:
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "powershell"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Domain = $cred.UserName.Split('\')[0]
$pinfo.Password = $cred.Password
$pinfo.UserName = $cred.UserName.Split('\')[1]
$pinfo.CreateNoWindow = $true
$pinfo.Arguments = "Get-DhcpServerv4Scope -computername $server"
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$stdout = $p.StandardOutput.ReadToEnd()
$stderr = $p.StandardError.ReadToEnd()
$p.WaitForExit()
我花了一些时间将此会话的输出转换为变量... 拳头我将输出写入一个 tmp 文件并在另一个会话中将其变红,但感觉就像我做错了。
现在我必须解析输出,创建模板并再次构建对象 - 我必须更改一半的脚本,它变得很慢,我不喜欢这种方式....
我无法摆脱有更好方法的感觉 - 所以我问你:)
最好的问候
大卫·布拉
【问题讨论】:
-
如果您已经在使用 JEA 会话配置,为什么不添加另一个允许非特权用户运行命令的配置?
-
在这一点上我支持你,但我必须走很长的路才能实现 JEA 概念。一个早期的步骤是为需要比默认权限更多的用户创建第二个用户。我将逐步缩小(更高权限用户的)权限,以保证对生产的影响更小。
标签: powershell credentials runas