我在MS Windows平台上有哪些选择,相当于基于Unix平台的SUID?

Ric*_*d T 6 unix windows suid

为了理解我的要求,重要的是区分Unix中SUID的几种用法.

我有一个项目,使用用户的PATH中的可执行文件,该项目由项目拥有,并且设置了SUID位.这样,当它运行时,它在文件所有者的上下文中运行,而不是在调用用户的上下文中运行.这样,它可以访问用户没有的东西,从而通过正常的文件系统保护来保护这些东西免受用户的侵害.这工作得相当好.计划是将项目转移到客户端 - 服务器架构,但这需要一些时间.与此同时,我如何在Windows系统上复制此类行为?

请注意,项目的可执行文件不会调用SETUID库调用,但坦率地说,鉴于项目的作用,这将是一个很好的功能.该项目不需要系统root权限.它的第一个安全问题是它需要保护自己的文件免受用户(除了文件所有者以外的任何用户)的保护,如果它能够切换到"用户上下文"来访问文件,那将是非常好的.系统好像是主叫用户.(通过这种方式,它可以更容易地确定项目触摸什么是好的,什么不是.)

该项目是用C和Java组合编写的 - 一个带有SUID集的C程序调用Java代码......

我很想知道所有这些机制,特别关注那些:

  1. 适用于C和Java,以及;
  2. 易于为非Windows程序员实现,并且;
  3. 需要Windows独有的最小编码.

如果某些解决方案更优越,请分享您对此方面所知的任何想法.

笔记:

  1. LogonUser:需要纯文本密码.这怎么可能是一个答案?
  2. RunAs:需要在PROMPT输入密码!......与LogonUser一样,只会更糟; 我不明白这是怎么回答.

tek*_*ara 5

Cygwin 在此处对如何在不需要用户密码的情况下执行此操作进行了精彩的讨论:在 Cygwin 中使用 Windows 安全性

基本上,他们安装一个自定义 LSA 身份验证包,无需密码即可提供安全令牌。作为后备方案,当未安装身份验证包时,他们使用未记录的 NtCreateToken API。

想要模拟的应用程序可以在调用 java 之前进行 cygwin setuid 调用。


Eri*_*lje 4

我认为 Windows 中没有等效的 SETUID,但您可以以另一个用户身份启动进程。如果您使用 C,那么您实际上只需要研究两个主要的 Windows 特定函数:

登录用户

创建进程为用户

这些功能的文档非常好,所以它不应该是一个巨大的挑战。基本上,您将使用 LogonUser 来模拟用户,然后使用 CreateProcessAsUser 以该用户身份启动 JVM。

您还可以查看RUNAS命令,但我不确定这是否能满足您的需求。