Sudo-ed 脚本似乎忽略了 sudo -u行前缀

Sudo-ed 脚本似乎忽略了 sudo -u行前缀

据我所知,sudo -u <user>可以在作为 sudo 运行的脚本中使用,以便“取消”继承的 sudo,因此以普通用户身份运行后面的行。只是在我看来,它并不是这样工作的,至少在下面的上下文中不是这样:它好像sudo -u <user>什么也没做!

为了说明这一点,使用两个简单的 Bash 脚本、一个master.sh脚本和一个slave.sh脚本:

master.sh:

#!/bin/bash

sudo -u dad /home/dad/Downloads/slave.sh

从属.sh:

#!/bin/bash

if [[ ! -v DOTNET_ROOT ]] # If variable is not set ...
then
  echo "DOTNET_ROOT needs to be set ..."
else
  echo "No need to set DOTNET_ROOT."
fi

以下是运行不同场景时会发生的情况:

dad@DadsGram~/Downloads $ echo $DOTNET_ROOT
/home/dad/.dotnet
dad@DadsGram~/Downloads $ ./slave.sh 
No need to set DOTNET_ROOT.
dad@DadsGram~/Downloads $ sudo ./master.sh 
DOTNET_ROOT needs to be set ...
dad@DadsGram~/Downloads $ sudo ./slave.sh 
DOTNET_ROOT needs to be set ...

请问我做错了什么?

答案1

第二个sudo不是“取消”前一个sudo,而是覆盖前一个。就像把假发戴在帽子上,而不是摘掉帽子一样。

我猜您知道这sudo会带来删除环境变量的副作用。 (旁注:因为那不是基本的的目的sudo,如果您能更清楚地解释您所理解的内容以及您想要实现的目标,那就太好了。)第二个sudo会覆盖第一个完成的 UID 设置。它无法将整个环境恢复到第一次之前的状态sudo;它无法神奇地恢复已删除的环境变量。

相关内容