【问题标题】:UNIX equivalent of CreateProcessWithLogonWCreateProcessWithLogonW 的 UNIX 等效项
【发布时间】:2011-03-18 13:58:13
【问题描述】:

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

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

我需要做的:以其他用户 (alice) 的身份以编程方式 (foo) 启动一个进程。

最终结果应该是什么:如果“ps”完成,进程正在运行并显示 alice 作为所有者。出于特权的目的,就像 alice 启动它一样。

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

理想情况下,我不想对相关可执行文件 (foo) 设置任何特殊位或权限。

【问题讨论】:

    标签: unix process impersonation


    【解决方案1】:

    我认为只有两种可能性可以在 UNIX/Linux 上以 alice 身份从 bob 拥有的进程启动一个进程,而该进程本身不能 setuid。

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

    【讨论】:

    • +1:注意在第二种情况下,进程必须已经以 alice 或 root 身份运行。第三种可能性是 maaaaaaaybe fork 和 exec login,但由于 真的 想要与终端对话,我怀疑这会很快变得非常混乱。
    【解决方案2】:

    永远不要说永远,但我认为这在任何 unix-portable 方式中都可能是不可能的。仅当当前 uid 与目标 uid 相同(模数关于有效和真实 uid 的一些细微差别)或当前 uid 为 0(即 root)时,setuid(2) 调用(和朋友)才会成功。也就是说,您不能从一个非 root uid 更改为另一个。

    拥有密码无济于事。密码用于对系统进行初始身份验证,无论是通过loginssh,还是一些GUI登录对话框,但密码是那些程序单独关心的,而不是系统本身。换句话说,kernel 并不关心您的密码,如果您想更改您的 uid,则必须与 kernel 交谈。

    也就是说,您可能因此不得不考虑间接路线,例如 Peter G 提到的那些。

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

    我知道我不会在这里添加任何积极的建议,只是可能会节省时间的消极建议“这里没什么可看的;继续前进……'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2012-01-02
      相关资源
      最近更新 更多