为了理解我的要求,重要的是区分Unix中SUID的几种用法.
我有一个项目,使用用户的PATH中的可执行文件,该项目由项目拥有,并且设置了SUID位.这样,当它运行时,它在文件所有者的上下文中运行,而不是在调用用户的上下文中运行.这样,它可以访问用户没有的东西,从而通过正常的文件系统保护来保护这些东西免受用户的侵害.这工作得相当好.计划是将项目转移到客户端 - 服务器架构,但这需要一些时间.与此同时,我如何在Windows系统上复制此类行为?
请注意,项目的可执行文件不会调用SETUID库调用,但坦率地说,鉴于项目的作用,这将是一个很好的功能.该项目不需要系统root权限.它的第一个安全问题是它需要保护自己的文件免受用户(除了文件所有者以外的任何用户)的保护,如果它能够切换到"用户上下文"来访问文件,那将是非常好的.系统好像是主叫用户.(通过这种方式,它可以更容易地确定项目触摸什么是好的,什么不是.)
该项目是用C和Java组合编写的 - 一个带有SUID集的C程序调用Java代码......
我很想知道所有这些机制,特别关注那些:
如果某些解决方案更优越,请分享您对此方面所知的任何想法.
笔记:
Cygwin 在此处对如何在不需要用户密码的情况下执行此操作进行了精彩的讨论:在 Cygwin 中使用 Windows 安全性
基本上,他们安装一个自定义 LSA 身份验证包,无需密码即可提供安全令牌。作为后备方案,当未安装身份验证包时,他们使用未记录的 NtCreateToken API。
想要模拟的应用程序可以在调用 java 之前进行 cygwin setuid 调用。