【问题标题】:Dropping process rights under windowswindows下删除进程权限
【发布时间】:2010-10-19 18:23:25
【问题描述】:

出于安全原因,我正在寻找一种方法来放弃进程权限。我想以具有特权的用户身份开始,以受限用户身份结束。

例如,我希望我的网络服务器在受限用户下运行,但我仍然想在端口 80 上监听。

我如何在 Windows 下做这样的事情。类似于 Unix 的东西:

bind_to_80();
chroot("/some/limited/dir");
setuid(limited_user_id);
setgid(limited_group_id);
chroot("/some/limited/dir");
// drop some more rights
fork(); // now I can't come back

如何在 Windows 下做类似的事情?

编辑:当然我知道 Windows 没有 fork 或 chroot,但我正在寻找放弃各种权利,尤其是用户 - 最佳实践。

【问题讨论】:

  • 您是否尝试以非特权用户身份运行?我是第一次在windows下搭建rest api server。我使用服务管理控制台将服务配置为以非管理员用户身份运行。它仍然可以毫无问题地绑定和侦听端口 80。

标签: security winapi setuid


【解决方案1】:

看看Mark Russinovich's description 在Windows 下使用CreateRestrictedTokenCreateProcessAsUser 剥离权限。正如他解释的那样,这并不是万无一失的,因为运行该进程的帐户仍保留其权限。

当然,他的PsExec sysinternals 实用程序可以帮助您至少剥离Administrator 权限,而无需编码。

对于现有的进程,似乎AdjustTokenAdjustTokenGroup 允许操纵(前者显然需要 XPSP2 或更高版本),但本身需要特权...可能可以通过这种方式提交特权 seppuku,但我没有没有尝试过它们:它们可能会拒绝操纵当前进程的权限。

【讨论】:

  • 有没有可能在不启动其他进程的情况下做到这一点?
  • 我错了:一些操作是可能的。编辑添加。不确定在运行过程中的反射性使用。尝试是无可替代的!
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 2016-01-05
  • 2023-03-25
  • 2010-11-19
相关资源
最近更新 更多