Answers:
sudo
不能被认为是通用的:
红帽企业Linux:sudo
默认情况下已安装在红帽企业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用户使用它的能力。
FreeBSD:sudo
FreeBSD默认不安装。您必须从Ports构建它。
NetBSD:与FreeBSD相同。
OpenBSD系统:sudo
用于默认OpenBSD中进行安装,但他们已经切换到doas
为5.8,2015年10月发布。doas
默认情况下禁用。
要获得sudo
最新版本,您必须从软件包存储库中安装它。OpenBSD的sudo
软件包的配置与RHEL 3至6中的配置非常相似,因此只能root
通过它运行命令,这违反了的目的sudo
。如果您root
在安装过程中添加了非用户,则将其添加到wheel
组中,因此在sudo
OpenBSD系统上有用的最简单方法是通过取消注释该%wheel ALL=(ALL)...
行visudo
。
Solaris:sudo
在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
通用。
脚注:
CentOS,Oracle Linux,科学Linux ...
是的,即使安装量最少。
sudo
是几乎所有Linux系统上都可用的实用程序。
但是,默认情况下,不是所有发行版中都捆绑了它。所有主要发行版都默认捆绑了该软件包。
允许用户完全自定义的Linux发行版(例如Arch Linux,Gentoo,LFS等)默认情况下没有sudo。
在Arch Linux上,未sudo
安装基本系统。用户必须手动下载sudo
和编辑sudoers文件。
Gentoo和LFS的同上。我不知道没有sudo的其他主要发行版。
不,我认为没有比sudo
授予超级用户特权更通用的功能。也就是说,除了以root用户实际登录之外。
推荐使用最广泛的发行版Ubuntu sudo
来成为root用户(使用命令行时-坚持使用GUI的用户将收到密码提示,而无需了解或关注幕后情况)。其他发行版可能会或可能不会鼓励设置sudo,甚至可能会也可能不会发货。另一方面,su
它可在任何地方使用,并且可在大多数系统上使用,但仅那些可使用的系统除外,sudo
因为用户没有root密码。
在su
和之间sudo
,您将覆盖几乎所有用户。异国情调的少数谁需要calife
或op
或pfexec
知道该怎么做的已经。即使它们不使用,也su
不会使用也sudo
不可能在不熟悉的地方存储文件的系统,而您没有想到的足够多的事情可能根本无法使用您的指令。
要回答您的问题,最准确地说,不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
在可用的情况下使用。如果sudo
不可用,则该脚本必须以root用户身份运行,否则它将以die
。
sudo -l
。不幸的是,在这种情况下它不可用,因为可能需要输入密码。更仔细地考虑这一点,我实际上认为通过每个发行版测试可以最好地实现整个概念。使用,su -c
除非运行su
默认的禁用发行版,否则使用sudo su -c
。就像其他人提到的那样,最好将超级用户的权限留给用户,我会考虑使用任何临时操作都是一种方便。
sudo
。这应该在大多数发行版的正确执行,假设默认su
/ sudo
配置。我确实知道需要解决过时的Ubuntu,lsb_release
……,但这确实只是一个例子,显然可以扩展。
sudo
可能捆绑在大多数发行版上,但并非所有发行版都将每个用户都配置为能够运行它。