Linux 中的 su 和 sudo 命令有什么区别?

您所在的位置:网站首页 linux切换主机 Linux 中的 su 和 sudo 命令有什么区别?

Linux 中的 su 和 sudo 命令有什么区别?

2023-04-14 01:58| 来源: 网络整理| 查看: 265

su 和 sudo 命令都允许用户执行非特权用户不允许做的系统管理任务,即只有 root 用户能执行的命令。有些人更喜欢 sudo 命令:例如 Seth Kenlon 近发布的一篇 《在 Linux 上使用 sudo 的 5 个理由》,他在其中详细阐述了 sudo 命令的许多优点。

但是,相较于 sudo 命令,我更偏好于 su 命令 来做系统管理工作。在本文中,我比较了这两个命令的区别,并解释了为什么我更喜欢 su 而不是 sudo,但我仍然同时使用这两个命令的原因。

过去的系统管理员主要使用 su 命令

su 和 sudo 命令是为不同的世界设计的。早期的 Unix 计算机需要全职系统管理员,他们使用 root 用户作为的管理帐户。在这个古老的世界里,有管理员密码的人会在电传打字机或 CRT 终端(例如 DEC VT100)上以 root 用户登录,然后执行一些管理 Unix 计算机的工作。

管理员还会有一些非 root 帐户,用于执行一些非 root 的任务,例如编写文档和管理电子邮件等。在这些 Unix 计算机上通常有许多非 root 帐户,他们都不需要完全的 root 访问权限,只需要以 root 权限运行很少的命令,大约 1 至 2 个就可以了。许多系统管理员以 root 用户登录,完成 root 工作,并在任务完成后,退出 root 会话。有时候,系统管理员需要整天以 root 用户来登录,因为 sudo 命令需要键入更多的内容才能运行必要的命令,因此大多数系统管理员很少使用 sudo 命令。

sudo 和 su 这两个命令都能够提权为 root 用户,但它们实现的方式大不相同。这种差异是由于它们初打算用于不同的情况

sudo 命令

sudo 命令的初衷是让 root 用户能够让几个非 root 用户访问他们经常需要的一两个特权命令。sudo 命令允许非 root 用户暂时地获得更高权限,来执行一些特权命令,例如添加和删除用户、删除属于其他用户的文件、安装新软件以及管理现代 Linux 主机所需的任何命令。

sudo 命令允许非 root 用户访问一两个 需要更高权限 的常用命令,这样可以帮助系统管理员节省来自用户的许多请求,并减少等待时间。sudo 命令不会将用户帐户切换为 root 用户,因为大多数非 root 用户永远不应该拥有完全的 root 访问权限。在大多数情况下,sudo 允许用户执行一两个命令,然后提权就会过期。在这个通常为 5 分钟的短暂的提权时间内,用户可以执行任何需要提权的管理命令。需要继续使用提权的用户可以运行 sudo -v 命令来重新验证 root 访问权限,并将提权时间再延长 5 分钟。

使用 sudo 命令还有一些副作用,例如生成非 root 用户使用命令的日志条目及其 ID。这些日志可以在之后作为出现问题的检验,来给用户更多的操作培训。(你以为我会说“问责”用户,对吧?)

su 命令

su 命令能够将非 root 用户提权到 root 权限 —— 事实上,能让非 root 用户成为 root 用户。的要求是用户知道 root 密码。因为用户已经以 root 权限登录,所以之后的操作就没有限制了。

su 命令所提供的提权没有时间限制。用户可以作为 root 执行命令,不需要进行重新验证是否有 root 权限。完成任务后,用户可以执行退出命令 exit,从 root 用户恢复到自己原来的非 root 帐户。

su 和 sudo 在使用上的争议和变化

近在 su 与 sudo 的使用上存在一些分歧。

真正的系统管理员不会使用 sudo。—— Paul Venezia

Venezia 在他的 InfoWorld 文章 中辩称,对于许多担任系统管理员的人来说,sudo 是一个不必要的工具。他没有花太多时间为这个观点进行解释,他只是把它说成了一个事实。我同意他对于系统管理员的观点,因为我们不需要 sudo 来完成我们的工作。事实上,sudo 使得事情变得更复杂了。

然而,

时代在“改变”。—— Bob Dylan

Bob Dylan 是对的,尽管他唱的歌不是指计算机(LCTT 译注:Bob Dylan 是美国创作歌手、艺术家和作家,这里指他不是针对于电脑而说的)。

自从人手一台的个人计算机时代到来,计算机的管理方式发生了重大变化。在许多环境中,计算机的使用者也是它的管理员,这使得为这些用户提供一些对 root 权限的访问是有必要的。

一些现代发行版,例如 Ubuntu 及其衍生版本,只能使用 sudo 命令来执行特权命令。在这些发行版中,用户无法直接以 root 用户身份登录,甚至无法通过 su 切换到 root,因此需要 sudo 命令来允许非 root 用户获得 root 权限。在这一环境中,所有系统管理任务均使用 sudo 来执行。

通过锁定 root 帐户并将常规用户帐户添加到“轮子”组(wheel),可以实现此配置,但是这种配置很容易被绕过。接下来,让我们在 Ubuntu 主机或虚拟机上尝试一些小实验吧。我在这里说明一些我的设置,以便你可以根据需要来重现它。我安装的是 Ubuntu 16.04 LTS1,并使用 VirtualBox 将其安装在虚拟机中。在安装过程中,我创建了一个非 root 用户 student,为了简便起见我给这个用户设置了一个简单的密码。

以 student 用户身份登录 Ubuntu,并打开终端。查看 /etc/shadow 文件中的 root 条目,其中存储了经哈希的密码。

student@ubuntu1:~$ cat /etc/shadow cat: /etc/shadow: Permission denied

可以看到终端拒绝了我们对 /etc/shadow 的访问,因此我们无法查看 /etc/shadow 文件。所有发行版都是如此,以防止非特权用户看到和访问加密的密码,因为非特权用户可能会使用常见的黑客工具来破解这些密码。

现在,让我们使用 su - 命令来成为 root 用户。

student@ubuntu1:~$ su - Password:


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3