if [ "$(id -u)" != "0" ]; then
echo "Sorry, you are not root."
exit 1
fi
echo "You are root"
while true
do
read -s -p "Password of root for mysql, : " pass
echo
read -s -p "Password (again): " cpass
echo
[ "$pass" = "$cpass" ] && break
echo "Please try again"
done
当我使用sudo wget -qO- http://server-ip/install | sh
结果是Sorry you are not root
。
如果我下载脚本然后运行它,则while循环不会运行。问题是什么?
答案 0 :(得分:4)
您的管道包含两个命令sudo
和sh
。只有在sudo
的参数中指定的命令才能使用提升的权限运行。 (sudo
不是适用于整个管道的shell关键字。)
执行从外部资源检索的代码是不安全。首先将代码保存到文件中并检查它以确保它是您希望在运行之前执行的代码。
wget -qO- http://server-ip/install > script
less script
sudo sh script
理想情况下,远程服务器还会发布校验和,您可以使用该校验和来验证script
,而无需手动读取。您仍然需要相信远程服务器正在提供您实际想要运行的代码,但这样您就可以确保攻击者不会拦截您的请求并提供与远程服务器发送的代码不同的代码。