如果使用wget访问远程bash脚本,则用户不是root用户

时间:2016-04-28 12:05:20

标签: bash

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循环不会运行。问题是什么?

1 个答案:

答案 0 :(得分:4)

您的管道包含两个命令sudosh。只有在sudo的参数中指定的命令才能使用提升的权限运行。 (sudo不是适用于整个管道的shell关键字。)

执行从外部资源检索的代码是安全。首先将代码保存到文件中并检查它以确保它是您希望在运行之前执行的代码。

wget -qO- http://server-ip/install > script
less script
sudo sh script

理想情况下,远程服务器还会发布校验和,您可以使用该校验和来验证script,而无需手动读取。您仍然需要相信远程服务器正在提供您实际想要运行的代码,但这样您就可以确保攻击者不会拦截您的请求并提供与远程服务器发送的代码不同的代码。