为什么运行 CLI 安装脚本时会丢失 sudo 权限?

为什么运行 CLI 安装脚本时会丢失 sudo 权限?

注意:我最终让一切正常运转起来 - 即安装一个 CLI(Tenderly),但我想知道为什么它不能正常工作,从而防止将来在压力下出现挫败感。

规定的方式: curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-macos.sh | sh

错误

➜  ~ sudo curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-linux.sh | sh 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1151  100  1151    0     0   1859      0 --:--:-- --:--:-- --:--:--  1856
Installing version 1.4.5
Moving CLI to /usr/local/bin/
mv: cannot move 'tenderly' to '/usr/local/bin/tenderly': Permission denied
Tenderly CLI installed to: 
sh: 41: tenderly: not found
New Tenderly version installed: 
➜  ~ ls /usr/local/bin/tenderly
ls: cannot access '/usr/local/bin/tenderly': No such file or directory

这包括使用或不使用 sudo 调用 curl。

然后我运行了以下命令:

➜  ~ touch temp
➜  ~ mv temp /usr/local/bin
mv: cannot move 'temp' to '/usr/local/bin/temp': Permission denied
➜  ~ sudo mv temp /usr/local/bin #okay

为什么 sudo 在一种情况下有效,而在另一种情况下无效? curl 或该脚本是否会产生失去 sudo 权限的新进程?

我通过将脚本下载为文件并运行它来安装它。

> curl https://raw.githubusercontent.com/Tenderly/tenderly-cli/master/scripts/install-macos.sh > install.sh
> sudo install.sh

答案1

当执行已弃用的、不安全的、不安全的命令时:

sudo somecommand | sh

somecommand作为 运行root,其STDOUT通过管道传输到sh,后者作为 运行$USER
这可能是过去的复制错误。虽然不安全且不可靠,但有效的方法是:

somecommand | sudo sh

更安全、更可靠的方法是:

somecommand >install.sh
# Read the file, figure out what it does
less -Mersj4 install.sh
# if you like what install.sh does 
# Maybe`sudo apt install watchinstall` 
# and run this under `installwatch`
sudo ./install.sh

信任但要验证。

相关内容