要理解我在问什么,区分 Unix 中 SUID 的几种用法很重要。
我有一个项目使用用户 PATH 中的可执行文件,该可执行文件归项目所有,并且设置了 SUID 位。这样,当它运行时,它会在文件所有者的上下文中运行,而不是在调用用户的上下文中运行。通过这种方式,它可以访问用户无法访问的内容,从而通过正常的文件系统保护来保护这些内容不受用户的影响。这工作得相当好。计划是将项目迁移到客户端-服务器架构,但这需要一些时间。同时,如何在 Windows 系统上复制这种行为?
请注意,项目的可执行文件不会调用 SETUID 库调用,但坦率地说,在我看来,考虑到项目的功能,这将是一个很棒的功能。该项目不需要系统根权限。第一个安全问题是它需要保护自己的文件不受用户(只是文件所有者以外的任何用户)的影响,如果它能够切换到“用户上下文”来访问文件,那就太好了系统就好像它是调用用户一样。(通过这种方式,它可以更容易地确定项目可以触摸什么,什么不可以。)
该项目是用 C 和 Java 结合编写的 - 带有 SUID 集的 C 程序调用 Java 代码...
我很想知道所有这些机制,并且特别关注那些:
- 适用于 C 和 Java,并且;
- 易于为非 Windows 程序员实现,并且;
- 需要 Windows 独有的最少编码。
如果某些解决方案更好,请分享您在这方面所知道的任何想法。
笔记:
- LogonUser:需要纯文本密码。这怎么可能是答案?
- RunAs:需要在提示时输入密码!...与 LogonUser 一样,只会更糟;我不明白这是一个答案。