等同于CreateProcessWithLogonW的UNIX

等同于CreateProcessWithLogonW的UNIX,unix,process,impersonation,Unix,Process,Impersonation,我拥有的:UNIX用户(alice)的登录名/密码 我是谁:另一个UNIX用户(bob) 我需要做的是:以编程方式启动一个进程(foo)作为另一个用户(alice) 最终结果应该是:进程正在运行,如果执行了“ps”,则将alice显示为所有者。出于特权的目的,其行为就像是alice启动了它一样 基本上,我需要编写一些代码,这些代码相当于“su-c'foo'-alice” 理想情况下,我不想在有问题的可执行文件(foo)上设置任何特殊位或权限。我认为只有两种可能在UNIX/Linux上以alice

我拥有的:UNIX用户(alice)的登录名/密码

我是谁:另一个UNIX用户(bob)

我需要做的是:以编程方式启动一个进程(foo)作为另一个用户(alice)

最终结果应该是:进程正在运行,如果执行了“ps”,则将alice显示为所有者。出于特权的目的,其行为就像是alice启动了它一样

基本上,我需要编写一些代码,这些代码相当于“su-c'foo'-alice”


理想情况下,我不想在有问题的可执行文件(foo)上设置任何特殊位或权限。

我认为只有两种可能在UNIX/Linux上以alice的身份从bob拥有的无法设置UID的进程启动进程

  • 调用setuid程序
  • 与已经运行的进程通信,该进程可以像alice一样启动进程

    • 永远不要说“永远”,但我认为这在任何unix便携方式下都可能是不可能的。setuid(2)调用(和朋友)仅当当前uid与目标uid相同(对有效uid和真实uid的一些细节进行模化)或当前uid为0(即root)时成功。也就是说,您不能从一个非根uid更改为另一个

      拥有密码没有帮助。密码用于系统的初始身份验证,无论是通过
      登录
      ssh
      ,还是一些GUI登录对话框,但密码仅是这些程序的问题,而不是系统本身的问题。换句话说,内核不关心你的密码,如果你想改变你的uid,你必须和它对话

      因此,你可能不得不考虑间接路线,比如Peter G提到的路线。 (是的,某些Unix可能有这样做的方法,但这是特定于平台的)


      我知道我没有在这里添加任何积极的建议,只是可能节省时间的消极建议“这里没什么可看的;请注意,在第二种情况下,进程必须已经作为alice或root运行。第三种可能是MaaaaaAybe进行fork和exec
      login
      ,但由于这确实需要与终端通话,我怀疑这会很快变得非常混乱。