使用 su 与命令

使用 su 与命令

Ubuntu 服务器 12.04

在我通过 ssh 进入的远程服务器上,我设置了一个特殊用户:

sudo adduser --system --disabled-login --disabled-password --group suser

运行一些维护功能。有时我会进入登录会话并执行suser以下操作:

sudo su -l suser -s /bin/bash

执行一些任务...但是我特别希望能够通过以下方式运行一些 git 命令:

sudo su suser -c <COMMAND>

来自我的真实用户并且没有登录到suser。

不幸的是我无法确定如何我就开始这么做了。我尝试了对我有意义的唯一方法:

sudo su suser -c git clone https://example.com/repos/project.git
sudo su suser -c "git clone https://example.com/repos/project.git"
   or even
sudo su suser -c mkdir /home/suser/test
sudo su suser -c "mkdir /home/suser/test"

但什么都没发生,我回到提示。有人能帮忙或解释一下为什么这是不可能的吗?

答案1

问题是 是使用suser创建的,/bin/false并作为其默认 shell。因此,当您尝试suser通过运行命令sudo时,系统会尝试使用 运行它们,/bin/false/但这不是真正的 shell,因此会失败。您可以为 设置 shell suser,也可以在运行 时在命令行上指定它sudo。或者,您可以使用sudo-u选项。

  1. 使用-u

    sudo -u suser mkdir /home/suser/foo
    

    这是可行的,因为默认情况下,sudo使用/bin/bash(或您设置的默认值$SHELL)。因此,它将执行命令,suser但使用bash,因此命令被正确执行。

  2. 设置suser的默认 shell:

    sudo chsh suser 
    

    在出现的提示符中输入/bin/bash(或任何你喜欢的内容)。你现在应该能够以如下方式启动命令suser

    sudo su suser -c "mkdir /home/suser/test"
    
  3. 明确设置 shell:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
    

相关内容