所有基于 debian 的 Linux 发行版都使用 sudo 作为能够在系统上执行任何操作的用户吗?

所有基于 debian 的 Linux 发行版都使用 sudo 作为能够在系统上执行任何操作的用户吗?

具体来说,我们正在为 Debian 版本 9 或 10 创建此 Nodejs 脚本,但它需要以sudo与 root 具有相同权限的用户身份运行。下面是示例代码:

exec('iptables -S',
    function (err, stdout, stderr) {
        resolve(stdout)
        if (err !== null) {
          reject(err.toString('utf8'));
        }
    })

所以我们的问题是所有基于 debian 的 Linux 发行版都使用 sudo 吗?如果是,则结案。但如果答案是否定的,那么还有什么其他选择,以便其他用户组或任何其他始终存在于 Debian 发行版中且不使用 的用户可以使用和运行此命令sudo

答案1

我见过处理此类问题的最常见方法是,程序将简单地检查它是否由有效 UID 为 的用户运行0,该用户是 root 用户的用户 ID。例如,如果我正在编写一个只能以 root 身份运行的 shell 脚本,我会这样做:

#!/bin/sh
uid=$(id -u)
if [ $uid != 0 ]; then
    echo "This must be run as root!"
    exit
else
    echo "You are root, proceed!"
fi

(好吧,实际上,如果我正在编写 shell 脚本,我只会使用该$UID变量,但可能这在 Node.js 中不适用于您或者可能很复杂,所以我正在使用该id -u变量。)

如果我们现在以不同的方式运行脚本,我们会看到:

$ foo.sh
This must be run as root!

$ sudo foo.sh
You are root, proceed!

$ sudo -i ## open a root shell
# ~terdon/scripts/foo.sh
You are root, proceed!

换句话说,忘记sudo(不,你不能 100% 确定它总是会安装在 Debian 系统上,请参阅为什么 Debian 中没有默认安装 sudo?)并简单地检查用户 ID,如果不是则退出root。编写一条错误消息,通知用户需要以 root 身份运行,然后就可以了。如果您需要自动执行此操作,则无论如何都无法使用,sudo因为您需要手动输入密码。

答案2

简短回答:是的,他们都是使用sudo,但您不能假设它已安装。

更长的答案:任何发行版——不仅仅是 Debian——使用sudosudo是在系统上以 root(以及其他用户)身份执行操作的首选方式。根据经验,sudo通常是不是在 Debian 安装中默认安装,除非它被依赖于它的其他软件包拉入。一些继承自 Debian 的发行版(例如 Ubuntu)是sudo预安装的。您的应用程序不应以 root 身份运行,并且使用sudo类似的命令运行命令iptables是一个不错的计划。我建议在应用程序初始化阶段检查可用性,sudo如果不可用则出错。

相关内容