sudo有多普遍?


26

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

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

Answers:


34

sudo 不能被认为是通用的:

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

    红帽企业Linux 7 在安装屏幕上添加了一个新选项,您可以在其中创建第一个非root用户,即带有“使该用户成为管理员”复选框。它的用途未在安装指南的该页面上记录,但是其作用之一是允许该用户通过来运行任何命令sudo。通过将该用户添加到wheel组中来执行此操作,该组可以在常规sudo软件包配置下运行任何命令。

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

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

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

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

  • FreeBSDsudoFreeBSD默认不安装。您必须从Ports构建它。

  • NetBSD:与FreeBSD相同。

  • OpenBSD系统sudo用于默认OpenBSD中进行安装,但他们已经切换doas5.8,2015年10月发布doas默认情况下禁用。

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

  • Solarissudo在Solaris 11中默认安装了Solaris:,但Solaris 10和更早版本使用的是same-but-not-quit-the-same pfexec

    您可以sudo使用较旧的系统,但默认设置很重要。Solaris 10和更早的版本将在我们这里使用多年,因此,如果您的环境中装有Solaris,并且您本人并没有控制这些系统的权限,那么可以确保sudo存在该系统,那么您就无法依靠它。

系统越旧,它没有的机会就越大sudo。尽管sudo它很老,但直到2000年代中期才开始流行。早于此的系统极不可能拥有sudo。Unix盒通常可以使用很长时间,因此今天仍然可以在这样的系统上运行并不是不可想象的。

我只依靠sudo我亲自管理的系统,或者像Ubuntu,macOS或openSuSE这样的系统,这是默认情况下唯一获得root特权的方法。

su比通用的“获取我超级用户特权”命令更接近sudo,但是这样的系统就像Ubuntu和macOS一样,默认情况下根帐户被锁定,专门强迫您使用sudo而不是su。因此,您也不能称为su通用。


脚注

  1. CentOS,Oracle Linux,科学Linux ...

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


9

sudo是几乎所有Linux系统上都可用的实用程序。
但是,默认情况下,不是所有发行版中都捆绑了它。所有主要发行版都默认捆绑了该软件包。

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

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

不,我认为没有比sudo授予超级用户特权更通用的功能。也就是说,除了以root用户实际登录之外。


1
sudo可能捆绑在大多数发行版上,但并非所有发行版都将每个用户都配置为能够运行它。
jsbillings 2012年

另一个好点。取决于sudoers文件的内容。
darnir 2012年

7

推荐使用最广泛的发行版Ubuntu sudo来成为root用户(使用命令行时-坚持使用GUI的用户将收到密码提示,而无需了解或关注幕后情况)。其他发行版可能会或可能不会鼓励设置sudo,甚至可能会也可能不会发货。另一方面,su它可在任何地方使用,并且可在大多数系统上使用,但仅那些可使用的系统除外,sudo因为用户没有root密码。

su和之间sudo,您将覆盖几乎所有用户。异国情调的少数谁需要califeoppfexec知道该怎么做的已经。即使它们不使用,也su不会使用也sudo不可能在不熟悉的地方存储文件的系统,而您没有想到的足够多的事情可能根本无法使用您的指令。


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

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


但是您的脚本不要求安装sudo吗?不使用sudo,有什么方法可以获取超级用户访问权限?通过简单的脚本编写?
darnir 2012年

@darnir:否,不需要sudo安装粘贴的脚本。它需要超级用户执行,并且可以sudo在可用的情况下使用。如果sudo不可用,则该脚本必须以root用户身份运行,否则它将以die
JM Becker

@darnir:此外,真的没有所谓的“普通脚本”。除shell内置外,几乎所有内容都是通过常规二进制文件完成的。这就是shell的重点,它可以调用其他命令,无论是交互式的还是自动化的。正是这种定义性,将shell与通用编程语言区分开来。因此,无论您如何获取超级用户,都可以通过外部命令来实现……,前提是您不使用原始内核接口进行编码。
JM Becker 2012年

1
@varesa:有趣的是,Ubuntu与sudo / su默认配置完全相反。您可以通过执行来检查用户具有哪些sudo权限sudo -l。不幸的是,在这种情况下它不可用,因为可能需要输入密码。更仔细地考虑这一点,我实际上认为通过每个发行版测试可以最好地实现整个概念。使用,su -c除非运行su默认的禁用发行版,否则使用sudo su -c。就像其他人提到的那样,最好将超级用户的权限留给用户,我会考虑使用任何临时操作都是一种方便。
JM Becker 2012年

1
@varesa:我已经更新了粘贴脚本,以减少使用未配置的脚本的机会sudo。这应该在大多数发行版的正确执行,假设默认su/ sudo配置。我确实知道需要解决过时的Ubuntu,lsb_release……,但这确实只是一个例子,显然可以扩展。
JM Becker 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.