如何在以root权限开头的脚本中以非root用户身份运行命令?

詹姆斯·牛顿

问题
在bash脚本中,我正在使用命令...

sudo -u node bash

..从root切换到非sudo用户,这是失败的。


我正在provision.sh为Vagrant编写脚本的上下文,以设置运行Ubuntu 16.04.3的服务器,以及使用Meteor 1.6交付应用程序所需的所有软件包。

必需的步骤之一是以nvm非root用户身份进行安装nvm安装,您需要注销,为了重新登录激活nvm因此,我创建了一个非sudo用户,名为meteor,并希望在下载和安装时切换到该用户nvm

随后,我想切换回root并立即以身份登录gain meteor,以便开始使用它nvm来安装Node.js。

您会在下面找到一个评论严重的脚本。每次我打电话时,Vagrant都会运行此脚本vagrant reload --provision

我应该使用什么命令代替sudo -u node bash


echo "# whoami" && whoami && echo "^^^^ root expected"
echo "As root, create non-sudo user meteor:"
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass meteor
echo "User meteor created. ls -al /home/meteor:"
ls -al /home/meteor
echo "Install curl as root:"
apt-get install -y curl
echo "Trying sudo -u meteor bash"
sudo -u meteor bash #### THIS IS THE LINE THAT FAILS ###

echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
echo "ls -al /home/meteor/.nvm # should be populated"
ls -al /home/meteor/.nvm

echo "ls -al /root/.nvm # should not exist"
ls -al /root/.nvm

echo "command -v nvm will fail silently until we log out and back in again"
#command -v nvm
exit

#### Because the script is still running as root, it halts here ####

echo "# whoami" && whoami && echo "^^^^ should be root"
sudo -u meteor bash
echo "$ whoami" && whoami && echo "^^^^^^ should be meteor"
echo "command -v nvm should work now"
command -v nvm
甜点

如果您以root权限启动脚本,但需要以特定的非root用户身份运行某些命令,则可以sudo通过以下-u选项使用选项运行单个命令:

sudo -u USERNAME whoami # outputs USERNAME's user name

或启动一个子shell并在其中运行命令,例如:

sudo -u USERNAME bash -c 'whoami;echo $USER' # outputs USERNAME's user name twice

脚本中的行实际上并不会失败,您只能bash以usermeteor身份运行,而bash无济于事,它只会退出而原始的根外壳程序将运行脚本的其余部分。您实际上想做的(我想)是:

…
echo "Trying sudo -u meteor bash"
sudo -u meteor bash -c '\
  echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh |\
  bash
'
echo "ls -al /home/meteor/.nvm # should be populated"
…

实现此目的的另一种方法是here文档

…
echo "Trying sudo -u meteor bash"
sudo -u meteor bash <<EOF
  echo "$ whoami" && whoami && echo "^^^^^^ meteor expected"
  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh |\
  bash
EOF
echo "ls -al /home/meteor/.nvm # should be populated"
…

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Ubuntu 中使用 python 以非 root 用户身份运行 root 用户命令

如何输入用户帐户并从以root用户身份运行的Shell脚本中运行命令?

如何在启动时以非root用户身份运行python脚本

如何从 Chef 食谱中以非 root 用户身份运行 `gpg`?

如何在Mac中以root用户身份从命令行运行Android Studio 3.0

如何在 Fargate 上的 Amazon ECS 中以非 root 用户身份运行 docker 容器

以root身份运行select shell命令而不给用户sudo权限?

如何在脚本中以root身份在后台运行OpenVPN?

如何在shell脚本中以root身份运行功能

如何以非root用户身份运行root别名?

以root用户身份运行bash脚本,该脚本中具有sudo命令

在Docker容器中以非root用户身份运行Nginx会导致权限被拒绝错误

如何以root用户身份执行脚本,以特定用户身份执行脚本中的某些命令,以root用户身份执行一个命令

非root用户可以root身份运行passwd命令,为什么不能更改root密码?

在root脚本中以普通用户身份运行python run命令

创建非root用户后如何在命令提示符下以root用户身份注销

允许用户以root用户身份运行命令

使非root用户使用需要root访问权限的命令来执行脚本的最佳方法?

SDDM:如何在登录和注销时以root用户身份运行脚本

如何使此deploy / init以非root用户身份运行?

如何以非root用户身份运行docker image?

如何以非root用户身份启动运行级别3?

以root用户身份在jenkins中运行shell命令吗?

以非 root 用户身份在 Gitlab CI 中运行 Elasticsearch

如何在官方docker php映像上以非root用户身份运行composer

运行某些脚本/命令以用户身份挂起,以root用户身份可以挂起

以非root用户身份运行docker作为root用户

Linux:以root用户身份运行特定命令

以非root用户身份运行monit