提示输入 sudo 密码并在 bash 脚本中以编程方式提升权限?

提示输入 sudo 密码并在 bash 脚本中以编程方式提升权限?

我目前正在编写一个 bash 脚本,用于在现有的 Linux 系统(当前为 Ubuntu)上安装和设置各种程序。因为它安装程序并将许多文件复制到需要提升权限的各个文件夹,所以我已经完成了标准的“我需要提升权限”并退出。

但是,如果可能的话,我希望能够提示用户输入 sudo 密码,并在用户不使用 sudo 运行脚本命令(例如从 GUI 文件管理器启动它)时自动提升脚本的权限,用户无需重新启动脚本。

由于它被设计为在原生 Linux 安装上运行,因此任何修改系统的选项都无法满足我的目的。所有选项都需要包含在脚本本身中。

这在 Bash 中可能吗?如果是这样,最好的(安全但简洁)方法是什么?

答案1

sudo直接从脚本运行:

if [ $EUID != 0 ]; then
    sudo "$0" "$@"
    exit $?
fi

答案2

将其添加为脚本的第一行:

[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

如果您更喜欢图形提示,请更改sudogksu或。gksudo

答案3

我建议:

#!/bin/bash

if (($EUID != 0)); then
  if [[ -t 1 ]]; then
    sudo "$0" "$@"
  else
    exec 1>output_file
    gksu "$0 $@"
  fi
  exit
fi

# some example stuff
ls -l /root
echo "app: $0"
for f; do
  echo ">$f<"
done

答案4

我用来visudo编辑sudoers文件如下:

  • 在您的用户行中,将其添加到用户名旁边:
    ALL=(ALL)       NOPASSWD: ALL
    
    然后保存。
  • 当该用户
    sudo su -
    
    他将以 root 身份登录,无需输入密码。

相关内容