如何在 bash 脚本中维护 sudo?

如何在 bash 脚本中维护 sudo?

如果我运行这个脚本,如何将超级用户权限传递给它?我写这篇文章只是为了用基础知识来设置新机器。我不想以提升的权限运行每个命令,但sudo我想用它们运行那些确实具有提升权限的命令。

如何让某些命令以普通用户身份运行sudo,而另一些命令以普通用户身份运行?

#!/bin/sh

# If Linux, install nodeJS
if $(uname) = 'Linux';
then
    export IS_LINUX=1
    # Does it have aptitude?
    if  -x "which apt-get";
    then
        export HAS_APT=1
        # Install NodeJS
        sudo apt-get install --yes nodejs
    fi
    # Does it have yum?
    if  -x "which yum" ;
    then
        export HAS_YUM=1
        # Install NodeJS
        sudo yum install nodejs npm
    fi
    # Does it have pacman?
    if  -x "which pacman" ;
    then
        export HAS_PACMAN=1
        # Install NodeJS
        pacman -S nodejs npm
    fi
fi

# If OSx, install Homebrew and NodeJS
if  $(uname) = 'Darwin' ;
then
    export IS_MAC=1
    if test ! "$(which brew)"
    then
      echo "================================"
      echo "  Installing Homebrew for you."
      echo "================================"
      ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      export HAS_BREW=1
    elif  -x 'which brew' ;
    then
      export HAS_BREW=1
      brew update
    fi
    # Install NodeJS
    brew install --quiet node
fi

# Does it have python?
if  -x "which python" ;
then
    export HAS_PYTHON=1
    if  -x "which pip" ;
    then
      pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
      export HAS_PIP=1
    fi
fi
# Does it have node package manager?
if  -x "which npm" ;
then
    export HAS_NPM=1
else
    echo "NPM install failed, please do manually"
fi
# Does it have ruby gems?
if  -x "which gem" ;
then
    export HAS_GEM=1
fi

bash 脚本的其余部分(我没有详细介绍)使用 npm、apt、yum、brew 或 pacman 从数组安装软件包,具体取决于计算机。它只安装简单的东西,比如gitwget等等。

答案1

第一次调用时sudo会提示输入密码。然后,根据配置,如果在 N 分钟(默认 5 分钟 IIRC)内调用,则不需要再次输入密码。

你可以这样做:

sudo echo >/dev/null || exit 1

或者也许是这样的:

sudo -p "Become Super: " printf "" || exit 1

在脚本开始时。

如果你想阻止任何人这样做,sudo ./your_script你也应该检查 EUID (巴什):

if [[ $EUID -eq 0 ]]
then
    printf "Please run as normal user.\n" >&2
    exit 1
fi

或类似的东西:

if [ "$(id -u)" = "0" ]
   ...

无论如何,还要检查您的目标是哪个 shell。 IE

ETC。


“让它活着”一个人可以做就像是:

while true; do
  sleep 300
  sudo -n true
  kill -0 "$$" 2>/dev/null || exit
done &

相关内容