【发布时间】:2019-01-08 23:39:36
【问题描述】:
我的目标:
我想跑步:
- 一次多行
- 在另一个用户下
- 可以访问由我运行的用户设置的变量
所以从这里开始:
ROOT_VAR='var-set-from-root'
cmd="
echo $ROOT_VAR
echo `whoami`
echo $HOME
"
期望的结果是:
var-set-from-root
UserA
/home/UserA
到目前为止我所做的尝试:
1 使用 bash 运行;双引号中的命令:
cmd="
echo $ROOT_VAR
echo `whoami`
echo $HOME
"
sudo -u UserA bash -c "{$cmd}"
# result (has access to root var but still running as root):
var-set-from-root
root
/root
2 在 bash 中使用 heredoc 中的命令运行
sudo -u UserA bash -c<<EOF
echo $ROOT_VAR
echo `whoami`
echo $HOME
EOF
# result (error):
bash: -c: option requires an argument
3 使用 su 和 heredoc 中的命令运行,带单引号
su UserA <<'EOF'
echo $ROOT_VAR
echo `whoami`
echo $HOME
EOF
# result (no access to root var but running as correct user):
UserA
/home/UserA
4 在heredoc中使用su和命令运行,不带引号
su UserA <<EOF
echo $ROOT_VAR
echo `whoami`
echo $HOME
EOF
# result (has access to root var but still running as root):
var-set-from-root
root
/root
5 使用 bash 运行;双引号中的命令; root var 作为参数传递:
cmd="
echo $1
echo `whoami`
echo $HOME
"
sudo -u UserA bash -c "{$cmd}" $ROOT_VAR
# result (no access to root variable parameter):
root
/root
他们都不能从 root 用户访问变量集,同时在非 root 用户下运行。使用参数也可以吗?
【问题讨论】:
-
this 有帮助吗?
-
您的第一个示例实际上可以在 Ubuntu 18.04 下运行。我在 root 下尝试过,它成功了:
whoami && TEST="1" && sudo -u nav bash -c "echo $TEST && whoami && echo $HOME"输出为root 1 nav /home/nav -
@TheNavigat 奇怪....我在根目录下复制/粘贴/修改用户/运行您的命令,输出为:
root 1 UserA /root如果我su UserA和echo $HOME我得到/home/UserA这是在 Ubuntu 18.04.1 LTS 中 -
是的,你是对的。我的错。这解决了它:unix.stackexchange.com/a/177011/215614。这基本上是因为几件事:您需要
-i来包含用户的环境,并需要\$HOME来确保美元符号实际上正确传递给命令,而不是传递root 自己的HOME。
标签: linux bash multiline ubuntu-18.04