6

有一个需要 root 权限才能执行的 shell 脚本(/bin/sh,而不是 bash)。

如果它是由普通用户运行的,它应该要求用户输入密码以获取 root 访问权限并重新运行自己。

现在它使用以下代码:

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

这很好用,但是有些操作系统(例如 Ubuntu)根本没有 root 密码。另一方面,许多系统使用 sudo 来获得 root 权限。

问题是:脚本如何检测是否使用susudo不要求用户输入太多密码(例如,输入sudo密码,如果失败 - 运行su)。

4

6 回答 6

6

它不应该。如果脚本需要 root 权限,它应该以 root 身份运行。用户将如何完成该任务是用户的事——使用 su、sudo 或其他一些机制。

如果您担心安全问题并且不想从 root 执行所有操作,您可以删除这些部分的 root 权限。

于 2010-10-04T22:01:21.187 回答
3

没有一种万无一失的方法可以做到这一点,因为任何发行版都可以以任何它想要的方式放置文件。例如,Debian 和 Ubuntu 经常将系统文件放在 Red Hat 以外的目录中。为安装它的操作系统定制脚本要容易得多。

于 2010-10-04T15:13:08.003 回答
2

您可以在 /etc/sudoers 中设置不需要 sudo 密码的帐户:

yourusername ALL=(ALL) NOPASSWD: ALL

如果您不想这样做,可以强制他们以 root 身份运行脚本。在 shell 脚本的顶部添加类似这样的内容:

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

通过这种方式,用户可以通过他们的选择(su 或 sudo)成为 root。

于 2010-10-04T15:06:11.583 回答
1

从此文件再创建一个 .sh 文件,调用您的原始.sh文件,例如 -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh
于 2017-06-08T12:05:31.030 回答
0

检查是否sudo已安装

SU='su'
which sudo > /dev/null && SU='sudo'
于 2010-10-04T15:14:54.657 回答
0

虽然这并不能完全回答您的问题,但值得注意的是,您可以使用以下命令检查是否安装了 sudo 包:

基于 Debian 的系统:

dpkg -s sudo

基于 RPM 的系统:

rpm -q sudo
于 2010-10-04T15:29:53.570 回答