su和sudo命令都允许用户执行非特权用户不允许执行的系统管理任务,即只有root用户才能执行的命令。有些人更喜欢sudo命令:比如SethKenlon最近的帖子《??在 Linux 上使用 sudo 的 5 个理由???》,他详细阐述了sudo命令的诸多优点。不过相比sudo命令,我更喜欢su命令来进行系统管理。在本文中,我比较了这两个命令之间的差异,并解释了为什么我更喜欢su而不是sudo但我仍然同时使用这两个命令。过去的系统管理员主要使用su命令。su和sudo命令是为不同的世界设计的。早期的Unix计算机需要全职系统管理员,他们使用root用户作为他们唯一的管理帐户。在过去,拥有管理员密码的人会以root身份登录电传打字机或CRT终端(例如DECVT100),然后执行一些操作来管理Unix计算机。管理员还拥有用于非根任务的非根帐户,例如编写文档和管理电子邮件。这些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命令也有一些副作用,例如为非根用户及其ID使用的命令生成日志条目。这些日志以后可以用来检查问题,给用户更多的操作培训。(您以为我要说“负责任的”用户,对吗?)su命令su命令可以将非root用户升级为root权限——事实上,使非root用户成为root用户。唯一的要求是用户知道root密码。因为用户已经以root权限登录,所以后续操作没有任何限制。su命令提供的权限提升没有时间限制。用户可以以root身份执行命令,不需要重新验证是否有root权限。完成任务后,用户可以执行退出命令exit,从root用户恢复到他原来的非root账户。su和sudo使用的争议和变化最近对su和sudo的使用存在一些分歧。真正的系统管理员不使用sudo。-PaulVeneziaVenezia在他的InfoWorld文章中指出,对于许多担任系统管理员的人来说,sudo是一个不必要的工具。他没有花太多时间解释这一点,他只是把它变成事实。我同意他关于系统管理员的看法,因为我们不需要sudo来完成我们的工作。事实上,sudo使事情变得更复杂。然而,时代在“改变”。——鲍勃·迪伦鲍勃·迪伦说得对,虽然他唱的歌不是指电脑自个人计算机时代来临以来,计算机的管理方式发生了巨大变化。在许多环境中,计算机的用户也是它的管理员,因此有必要为这些用户提供一些root权限。一些现代发行版,例如Ubuntu及其衍生版本,只能使用sudo命令执行特权命令。在这些发行版中,用户不能直接以root身份登录,甚至不能通过su切换到root,所以需要sudo命令让非root用户获得root权限。在此环境中,所有系统管理任务均使用sudo执行。这种配置可以通过锁定根账户并将普通用户账户添加到“wheel”组(wheel)来实现,但这种配置很容易被绕过。接下来,让我们在Ubuntu主机或虚拟机上尝试一些小实验。我在这里说明了我的一些设置,因此您可以根据需要重现它。我安装了Ubuntu16.04LTS1并使用VirtualBox将其安装在虚拟机中。在安装过程中,我创建了一个非root用户student,为了简单起见,我给了一个简单的密码。以学生用户身份登录Ubuntu,然后打开一个终端。查看/etc/shadow文件中的根条目,其中存储了散列密码。student@ubuntu1:~$cat/etc/shadowcat:/etc/shadow:Permissiondenied可以看到终端拒绝了我们访问/etc/shadow,所以我们无法查看/etc/shadow文件。所有发行版都是如此,以防止非特权用户看到和访问可能被非特权用户使用普通黑客工具破解的加密密码。现在,让我们使用su-命令成为root用户。student@ubuntu1:~$su-Password:
