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
选项。
使用
-u
:sudo -u suser mkdir /home/suser/foo
这是可行的,因为默认情况下,
sudo
使用/bin/bash
(或您设置的默认值$SHELL
)。因此,它将执行命令,suser
但使用bash
,因此命令被正确执行。设置
suser
的默认 shell:sudo chsh suser
在出现的提示符中输入
/bin/bash
(或任何你喜欢的内容)。你现在应该能够以如下方式启动命令suser
:sudo su suser -c "mkdir /home/suser/test"
明确设置 shell:
sudo su suser -s /bin/bash -c "mkdir /home/suser/test"