sudo 有多通用?

sudo 有多通用?

我正在写一些关于如何安装某些东西的说明(与 TeX 相关的 - 如果你不问,我不会通过提供更多细节来破坏你的一天)并用于在sudo系统范围内安装。有人评论说他们认为这并不sudo适用于所有 Linux(或 Unix)发行版。

是否有 Unix 发行版没有sudo,如果有,它们是什么?是否有一个普遍认可的“获取超级用户权限”命令在所有系统上?

答案1

sudo不能被认为是普遍的:

  • 红帽企业 Linuxsudo默认安装在 Red Hat Enterprise Linux 及其衍生版本上,1但它仅在 RHEL 7 及更高版本中安装即用型。

    红帽企业 Linux 7 添加了一个新选项您创建第一个非 root 用户的安装屏幕,一个标记为“使该用户成为管理员”的复选框。它的用途没有记录在安装指南的该页面上,但它的作用之一是允许该用户通过sudo.它通过将该用户添加到组中来实现这一点wheel,该组可以在库存sudo包配置下运行任何命令。

    Red Hat Enterprise Linux 3 到 6 也sudo默认安装,2但在 RHEL 7 之前,它的出厂配置是只能root通过它运行命令。解决此问题的最简单方法是将一个或多个用户添加到wheel组中,然后visudo以 root 身份运行并取消注释该%wheel ALL=(ALL)...行。

  • 德班:从 Debian 9 开始,最小安装包括sudo.

    在 Debian 7 和 8 中,您必须选择“标准系统实用程序" 安装过程中将软件包设置为 get sudo。如果您以sudo这种方式安装,操作系统安装程序会自动将您之前在安装过程中创建的非管理用户添加到该sudo组中,该用户有权运行所有命令。

    在 Debian 6 及更早版本中,您必须在安装后安装sudoviaapt-get并手动配置它,以授予非 root 用户使用它的能力。

  • 自由BSD: sudoFreeBSD 中默认不安装。你必须从 Ports 构建它。

  • 网络BSD: 与 FreeBSD 相同。

  • 开放BSDsudo曾经在 OpenBSD 中默认安装,但他们已经切换doas作为5.8,2015 年 10 月发布doas默认情况下禁用。

    要获取sudo当前版本,您必须从软件包存储库安装它。 OpenBSD 的sudo软件包的配置与 RHEL 3 到 6 中的配置非常相似,因此只能root通过它运行命令,这违背了sudo.如果您在安装过程中添加了非root用户,则会将其添加到组中,因此在 OpenBSD 系统上发挥作用的wheel最简单方法是通过取消注释该行。sudo%wheel ALL=(ALL)...visudo

  • 索拉里斯sudo在 Solaris 11 中默认安装,但 Solaris 10 及更早版本使用类似但不完全相同的pfexec

    您可以sudo使用较旧的系统,但默认值很重要。 Solaris 10 及更早版本将伴随我们多年,因此,如果您的环境中有 Solaris,并且您无法亲自控制这些系统,因此无法确保这些系统的sudo存在,那么您就不能指望它。

系统越旧,没有的机会就越大sudo。虽然sudo很老了,直到 2000 年代中期才开始流行起来。比这更老的系统不太可能有sudo。Unix 机器的寿命往往很长,所以今天你仍然会遇到这样的系统,这并不令人难以置信。

我只依赖于sudo我个人管理的系统,或者像 Ubuntu、macOS 或 openSuSE 这样的系统仅有的默认情况下,获取 root 权限的方法。

su比 更接近通用的“获取超级用户权限”命令sudo,但是您有像 Ubuntu 和 macOS 这样的系统,默认情况下 root 帐户被锁定,专门强制您使用sudo而不是su.所以,你也不能称之为su通用。


脚注:

  1. CentOS、Oracle Linux、科学 Linux...

  2. 是的,即使是最小安装。

答案2

sudo是一个几乎所有 Linux 系统上都可用的实用程序。
但是,并非所有发行版都默认捆绑它。所有主要发行版都默认捆绑它。

像 Arch Linux、Gentoo、LFS 等允许用户完全定制的 Linux 发行版默认情况下没有 sudo。

在 Arch Linux 上,基本系统并未sudo安装。用户必须手动下载sudo并编辑 sudoers 文件。
Gentoo 和 LFS 也是如此。我不知道还有哪个主要发行版没有 sudo。

不,我认为没有什么比sudo授予超级用户权限更普遍的了。也就是说,除了实际以 root 身份登录之外。

答案3

使用最广泛的发行版 Ubuntusudo作为推荐的方法来成为 root(使用命令行时 - 坚持使用 GUI 的用户将收到密码提示,而不了解或关心幕后发生的情况)。其他发行版可能会或可能不会鼓励设置 sudo,并且可能会也可能不会发布它。另一方面,su它随处可用,并且可在大多数系统上使用,但sudo由于用户没有 root 密码而仅可用的系统除外。

su和之间sudo,您将覆盖几乎所有用户。少数需要califeop已经pfexec知道该做什么的异国人。即使他们不这样做,一个既不使用susudo不可能在不熟悉的地方有文件的系统以及足够多你没有想到的东西你的指令可能无论如何也不会起作用。

答案4

要回答你的问题,最准确地说,“否”sudo并不被认为是普遍的。事实上,“普遍”的整个概念常常是一种转移注意力的东西。就跨发行版兼容性而言尤其如此。一旦您投入多种不同的软件版本,通用性就变得半不现实。脚本本质上是务实的,如果它是迂腐的,那么编写可移植的脚本实际上是不可能的。

通常我会衡量我想要的执行环境,一个半现代的 Linux 发行版,我期望一个带有通用 GNU Utils 的 POSIX shell。对于可以在 Linux 之外运行的脚本,我只期望完整的 POSIX 标准。显然,许多脚本是特定于 Linux 或特定于发行版的,因此这通常会缩小可移植范围。

为了解决您的特定脚本案例,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

粘贴的脚本是 POSIX shell 的补充,我总是编写 Dash 兼容的脚本。

相关内容