将 su 与命令一起使用

JDe*_*Dex 4 linux bash git 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"
Run Code Online (Sandbox Code Playgroud)

但没有任何反应,我回到提示。任何人都可以协助或解释为什么这是不可能的?

ter*_*don 5

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

  1. 使用-u

    sudo -u suser mkdir /home/suser/foo
    
    Run Code Online (Sandbox Code Playgroud)

    这是有效的,因为默认情况下,sudo使用/bin/bash(或任何您设置的默认值$SHELL)。因此,它将执行命令 as suserbut using bash,因此该命令被正确执行。

  2. Setsuser的默认外壳:

    sudo chsh suser 
    
    Run Code Online (Sandbox Code Playgroud)

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

    sudo su suser -c "mkdir /home/suser/test"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 显式设置外壳:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
    
    Run Code Online (Sandbox Code Playgroud)