在MS Windows平台上,对于基于Unix平台的SUID有什么样的select?

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

我有一个项目,在项目拥有的用户的PATH中使用可执行文件,并设置了SUID位。 这样,当它运行时,它运行在文件所有者的上下文中,而不是主叫用户。 这样,它就可以访问用户不能访问的东西,从而通过正常的文件系统保护来保护用户不受这些东西的影响。 这工作相当好。 计划将这个项目转移到一个客户 – 服务器体系结构,但这需要一些时间。 同时,如何在Windows系统上复制这种types的行为?

请注意,项目的可执行文件不会调用SETUID库调用,坦率地说,这将是一个很好的function添加,在我看来,该项目的作用。 该项目不需要系统root权限。 首先,安全问题是它需要保护用户自己的文件(只是文件所有者以外的任何用户),如果能够切换到“用户上下文”来访问文件,这将是非常好的系统就好像它是主叫用户一样。 (通过这种方式,可以更轻松地确定项目可以接触什么是好的。)

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

我热衷于了解所有这些机制,特别关注那些:

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

如果一些解决scheme是优越的,请分享你对这方面的任何你知道的想法。

笔记:

  1. LogonUser:需要纯文本密码。 这怎么可能是一个答案?
  2. RunAs:要求在PROMPTinput密码! …与LogonUser一样,只有更糟; 我不明白这是一个答案。

Cygwin对于如何在不需要用户密码的情况下进行了很好的讨论: 在Cygwin中使用Windows安全性

基本上他们安装一个自定义的LSA认证包,提供安全令牌而不需要密码。 作为回退,当未安装认证软件包时,他们使用未记录的NtCreateToken API。

在调用java之前,想要模拟的应用程序可能会创建一个cygwin setuid调用。

我不认为在Windows中有一个SETUID equivilent,但你可以启动一个进程作为另一个用户。 如果您使用的是C,那么您只需要查看两个主要的Windows特定功能:

LogonUser的

CreateProcessAsUser

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

你也可以看看RUNAS的命令,但是我不确定那是否能满足你的需要。