2010-07-20 41 views
0

我拥有的:UNIX用户(爱丽丝)的登录名/密码。UNIX的等价物CreateProcessWithLogonW

我是谁:其他一些UNIX用户(bob)。

我需要做的是:作为其他用户(爱丽丝)以编程方式启动进程(foo)。

最终结果应该是什么:如果完成了“ps”,则进程正在运行并显示alice作为所有者。为了特权的目的,就好像爱丽丝开始它一样。

基本上我需要编写一些代码,做的“苏-c‘富’ - 爱丽丝相当于”

理想我不想设置任何特殊位或权限上有问题的可执行文件(富)。

回答

1

我看到只有两种可能性在UNIX/Linux上从bob拥有的进程中启动一个进程,使其不能setuid本身。

  • 调用setuid程序
  • 与一个已经运行的进程进行通信,可以切勿启动过程爱丽丝
+0

+1:注意在第二种情况下,该过程必须已经以爱丽丝或根的方式运行。第三种可能是maaaaaaaybe fork和exec'login',但是因为_really_想和终端通话,所以我怀疑这会很快变得非常混乱。 – 2010-07-20 21:06:57

1

说永远,但我觉得这恐怕是不可能在任何UNIX移植的方式。 setuid(2)调用(和朋友)只有在当前uid与目标uid相同(模仿有效和真实uid的一些细微差别)或当前uid为0(即root)时才会成功。也就是说,您不能从一个非root用户更改为另一个。

拥有密码并没有帮助。该密码用于初始对系统的身份验证,无论是通过login,ssh还是某些GUI登录对话框,但密码仅由这些程序单独关注,而不是系统本身。换句话说,内核并不关心你的密码,而是内核,如果你想改变你的uid,你必须与之交谈。

也就是说,您可能因此有必要考虑间接路线,例如Peter G提到的路线。

(是的,一些unix可能有这样做的方法,但这是平台特定的)。

我知道我没有在这里增加任何积极的建议,只有可能省时的负面建议'没什么在这里看到;向右移动...'