sudo 有多普遍?

And*_*cey 31 distros root sudo portability

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

是否有没有没有的 Unix 发行版,如果有sudo,它们是什么?是否有一个举世公认的“给我超级用户权限”命令,该命令在所有系统上?

War*_*ung 38

sudo 不能被认为是普遍的:

  • Red Hat Enterprise Linuxsudo默认安装在 Red Hat Enterprise Linux 及其衍生产品1 上,但它仅安装在 RHEL 7 和更新版本中即可使用。

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

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

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

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

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

  • FreeBSD :sudo在 FreeBSD 中默认不安装。您必须从 Ports 构建它。

  • NetBSD:与 FreeBSD 相同。

  • OpenBSDsudo曾经默认安装在 OpenBSD 中,但它们已切换2015 年 10 月发布doas5.8doas默认情况下禁用船舶。

    要获得sudo当前版本,您必须从包存储库中安装它。OpenBSD 的sudo软件包配置与 RHEL 3 到 6 中的很相似,因此只能root通过它运行命令,这反而违背了sudo. 如果您root在安装过程中添加了一个非用户,它会被添加到wheel组中,因此在sudoOpenBSD 系统上有用的最简单方法是%wheel ALL=(ALL)...通过visudo.

  • Solarissudo默认安装在 Solaris 11 中,但 Solaris 10 及更早版本使用 similar-but-not-quite-the-same 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、Scientific Linux……

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


dar*_*nir 9

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

Linux 发行版,如 Arch Linux、Gentoo、LFS 等,允许用户完全自定义,默认情况下没有 sudo。

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

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

  • `sudo` 可能捆绑在大多数发行版中,但并非所有发行版都将每个用户配置为能够运行它。 (2认同)

Gil*_*il' 7

使用最广泛的发行版 Ubuntusudo用作成为 root 的推荐方法(使用命令行时——坚持使用 GUI 的用户将获得密码提示,而无需了解或关心幕后发生的事情)。其他发行版可能会也可能不会鼓励设置 sudo,甚至可能会也可能不会发布它。另一方面,su它在任何地方都可用,并且可以在大多数系统上使用,除了那些sudo因为用户没有 root 密码才可用的系统。

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


J. *_*ker 6

最准确地回答您的问题,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
Run Code Online (Sandbox Code Playgroud)

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