如何在没有sudo的shell脚本中运行特定命令?

时间:2016-04-29 07:21:34

标签: linux bash shell sh

我运行一个shell脚本,它以root用户身份运行,具有sudo权限。 它有gem install命令,它也作为sudo运行。

但我想在没有sudo的情况下运行gem install [command]

#!/usr/bin/env bash
curl -sSL https://get.rvm.io | bash -s stable
rvm install stable
gem install jekyll

它是vagrant的配置管理脚本。

2 个答案:

答案 0 :(得分:2)

如果您想以非特权用户身份运行它,可以使用

sudo -u <username> command

答案 1 :(得分:0)

您不应该使用sudo运行整个脚本;脚本本身应仅针对那些需要提升权限的命令调用sudo

例如:

#!/usr/bin/env bash
curl -sSL https://get.rvm.io > installer  # Does not need sudo
bash installer stable                     # Maybe needs sudo?
sudo rvm install stable                   # I assume this needs sudo
gem install jekyll

直接从外部资源运行代码而不验证它,更不用说以root身份运行代码,这是一个很大的安全风险。您应首先下载代码,验证它,然后将其作为参数传递给您的脚本。

#!/usr/bin/env bash
bash "$1" stable         # Again, maybe needs sudo
sudo rvm install stable
gem install jekyll

运行脚本:

curl -sSL https://get.rvm.io > installer
# Check if installer is the right script and is safe
myscript installer