【问题标题】:how to find out who is running the runas application?如何找出谁在运行 runas 应用程序?
【发布时间】:2016-05-26 14:52:56
【问题描述】:

背景:

在我的组织中,我们有一个用于一些关键功能的应用程序,但它仅在以特定用户身份运行时效果最佳。

原因是应用程序将其大量配置存储为本地用户会话,因此它变成了多用户的噩梦,这意味着我们不得不重复大量工作。

我们已经分配了一个用户来运行应用程序,并通过设置 runas 桌面快捷方式找到了解决方案。问题是我们发现应用程序不能同时运行更多。它只允许每个并发用户运行 1 个实例。

我用于应用程序的快捷代码:

C:\Windows\System32\runas.exe /user:mydomain\runas_user /savecreds "C:\Program Files\MyApp\MyApp.exe"

因此,我一直在尝试确定如何查看当前正在使用“runas”应用程序的用户,以便让他们优雅地关闭它。 任务管理器仅在用户名中显示“runas_user”,但我认为必须有某种方法来确定谁运行它或哪个用户会话正在查看它。

问题:

有什么方法可以找出(最好使用 powershell 或其他脚本)当前正在运行该应用程序的用户吗?

【问题讨论】:

  • 也许在运行 runas 命令之前保存用户名(使用批处理脚本)(在任何人都可以写入文件的公共位置)? echo %username% > c:\runas_user.txt
  • 我觉得这是个好主意,除了大多数人不会知道应用程序已经在运行,并且无论如何都会打开 runas 图标。这意味着公共文件将由试图运行应用程序的新人更新,并且可能会看到它的运行和保释。输入现在想知道的第三个人,打开公共文件以查看其中的用户 1 和 2 的名称。如果多人这样做,很快就会变得乏味。
  • 有一种方法可以检查某个进程是否正在运行,使用批处理脚本。见:stackoverflow.com/questions/162291/…
  • 感谢@fedterzi 我设法通过运行tasklist /FI "USERNAME eq runas_user" /FI "IMAGENAME eq myapp.exe" 来确定哪个会话名称以RDP-Tcp#2 运行它。我可以在任务管理器中看到哪个用户名对应于RDP-Tcp#2。接下来我只需要找到一个有用的方法来解决"RDP-Tcp#2 is user X"
  • @Kareem quser.exe

标签: windows powershell batch-file command-line runas


【解决方案1】:

Windows 安全事件日志应显示这一点。所有 Windows 2008+ 身份验证事件都是事件 ID 4624(通过)或 4625(失败)。将它与登录类型结合起来应该可以得到你想要的。

来自 sans.org 上的this PDF 的许多有关登录类型的详细信息(从大约第 10 页开始)。我认为您最感兴趣的部分是“3.7 NewCredentials”:

使用 RunAs 命令在不同的用户帐户下启动程序 使用 /netonly 开关,Windows 记录登录/注销事件 登录类型 9. 当使用 /netonly 启动带有 RunAs 的程序时, 当用户当前登录时,程序在本地计算机上执行 除了与网络上其他计算机的任何连接,Windows 使用 RunAs 上指定的帐户连接到这些计算机 命令。没有 /netonly Windows 在本地运行程序 计算机和网络上的指定用户并记录 登录类型为 2 的登录事件

使用 PowerShell 获取事件 ID 和登录类型的快速而肮脏的方法:

$recentSecLog = 
Get-EventLog -LogName Security -Newest 1000 | Where {$_.EventID -match "4624|4625"}

$recentSecLog | Where {$_.message -match "Logon\sType:\s+9"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多