Jam*_*ton 15 bash sudo scripts
问题
在 bash 脚本中,我正在使用命令...
sudo -u node bash
Run Code Online (Sandbox Code Playgroud)
.. 从 root 切换到非 sudo 用户,这是失败的。
上下文
我写一个provision.sh为流浪脚本,建立运行Ubuntu 16.04.3的所有包的服务器需要与流星1.6提供的应用程序。
一个必需的步骤是以nvm非 root 用户身份安装。nvm安装完成后,您需要注销并重新登录才能激活nvm。因此,我创建了一个名为 的非 sudo 用户meteor,并希望在下载和安装nvm.
随后,我想切换回 beroot并立即登录为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
Run Code Online (Sandbox Code Playgroud)
des*_*ert 15
如果用root权限,但需要运行某些命令,你可以使用特定的非root用户启动脚本sudo与-u选项要么运行带有例如一个命令
sudo -u USERNAME whoami # outputs USERNAME's user name
Run Code Online (Sandbox Code Playgroud)
或启动一个子shell并在其中运行您的命令,例如:
sudo -u USERNAME bash -c 'whoami;echo $USER' # outputs USERNAME's user name twice
Run Code Online (Sandbox Code Playgroud)
您的脚本中的行实际上并没有失败,您只是bash以 usermeteor身份运行,并且bash无关紧要,它只是退出,原始 root shell 运行脚本的其余部分。你真正想做的(我想)是:
sudo -u USERNAME whoami # outputs USERNAME's user name
Run Code Online (Sandbox Code Playgroud)
实现相同目的的另一种方法是这里的文档:
sudo -u USERNAME bash -c 'whoami;echo $USER' # outputs USERNAME's user name twice
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50399 次 |
| 最近记录: |