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)
但没有任何反应,我回到提示。任何人都可以协助或解释为什么这是不可能的?
问题是它suser是用/bin/false它的默认外壳创建的。因此,当您尝试以suserthrough方式运行命令时sudo,系统会尝试使用/bin/false/不是真正的 shell来运行它们并失败。您可以为其设置 shell,suser也可以在运行时在命令行上指定它sudo。或者,您可以使用sudo's-u选项。
使用-u:
sudo -u suser mkdir /home/suser/foo
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为默认情况下,sudo使用/bin/bash(或任何您设置的默认值$SHELL)。因此,它将执行命令 as suserbut using bash,因此该命令被正确执行。
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)显式设置外壳:
sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |