如何 su 到另一个用户并使用后续的交互式 shell 运行命令

如何 su 到另一个用户并使用后续的交互式 shell 运行命令

我的目标是通过 su 进入 user2,运行引用 user1 环境的命令,并以 user2 身份启动交互式 shell。我正在尝试创建一个函数,允许我在 su 到另一个用户后继续转发 X。

以下命令按预期工作,但 bash 出现严重错误:

sudo su - user2 -c "export DISPLAY=$orig_display; xauth add $orig_xconfig ; bash"

$orig_display 和 $orig_xconfig 参数是存在于 user1 环境中的预定义参数。

本质上,我想将 su 的 -c 和 -l 标志结合起来,但它们似乎是互相排斥的。

答案1

我认为你所说的“极端错误”主要是因为man 1 su以下内容-c

执行的命令将没有控制终端。


分两步进行。

  1. 为user2设置X权限文件:

    sudo -u user2 xauth add $orig_xconfig
    # or
    # sudo su user2 -c "xauth add $orig_xconfig"
    
  2. 运行 shell。注意su -保留$DISPLAYsudo -i也应该保留$DISPLAY。因此:

    DISPLAY="$orig_display" sudo -i su -s /bin/bash - user2
    

    您的原始代码试图运行,bash无论 user2 的默认 shell 是什么,所以我使用了-s /bin/bash。您可能想要也可能不想要它。

相关内容