【问题标题】:java impersonationjava模拟
【发布时间】:2011-10-29 21:46:26
【问题描述】:

我们有一个 java 进程作为 Windows 上的本地系统用户运行,它需要访问系统上另一个用户拥有的文件。据我了解,本地系统用户应该有权模拟该用户。为此,我们传递正在访问文件的程序的 tid 和 pid 并从中获取用户信息(令牌)。然后我们在当前线程上设置令牌。像这样的:

DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);

其中hToken是通过打开线程获得的,然后通过它们的id进行处理。 问题是当我尝试访问一个只能由用户访问而没有其他人我无法读取的文件时。我收到拒绝访问错误。所以问题是我是否应该能够通过模拟访问这个文件,如果可以,那么在给定线程 ID 和 pid 的情况下模拟另一个用户是否正确。我想我也会看到 windows 7 和 windows xp 之间的不同行为。

【问题讨论】:

  • 我对 Java 的了解接近于零,所以如果我说的是废话,请耐心等待……我的第一个想法是 1) 与其他用户一起运行 2) 更改文件权限跨度>
  • 我们不能这样做。我们事先没有这些信息。

标签: java windows java-native-interface impersonation


【解决方案1】:

对于初学者,您应该始终测试您的 Windows API 调用的返回值。 只有这样,您才能确定令牌确实已被复制并分配给您的进程。

模拟需要一些特权,如果您是一个简单的用户,我不确定您是否会拥有这些特权。我怀疑 DuplicateTokenEx 函数失败了。 以管理员权限重试(使用“运行方式...”工具),然后告诉我们进展如何。

【讨论】:

  • 抱歉,我遗漏了一些代码……我们正在检查返回值,一切正常。此外,我们是本地系统用户,据说具有正确的权限或至少具有模拟权限。
  • 如果你真的是在SYSTEM账户下运行,我认为没有什么文件是你不能读取的(或者是你不能改变的权限)。
猜你喜欢
  • 2011-09-16
  • 1970-01-01
  • 2011-11-06
  • 2012-11-09
  • 2018-09-19
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多