当前位置: 首页 > 科技观察

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

时间:2023-03-14 17:24:06 科技观察

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:su:Authenticationfailure认证失败的原因是root账号没有密码,被锁了。接下来使用sudo命令查看/etc/shadow文件。student@ubuntu1:~$sudocat/etc/shadow[sudo]学生密码:<输入学生密码>root:!:17595:0:99999:7:::student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::这里我只截取了部分结果,只展示了root和student用户的条目。我还缩短了加密密码,使条目占一行。字段之间用冒号(:)隔开,第二个字段是密码。注意root的密码字段是感叹号(!),表示root账号被锁定,无法使用。现在,要将root帐户变成一个合适的系统管理员,您只需要为root帐户设置一个密码。student@ubuntu1:~$sudosu-[sudo]passwordforstudent:root@ubuntu1:~#passwdroot输入新的UNIX密码:RetypenewUNIXpassword:passwd:passwordupdatedsuccessfullyroot@ubuntu1:~#现在可以root直接登录控制台,也可以用su直接登录root,不用在每条命令前加一个sudo.当然,你也可以每次想以root身份登录时都使用sudosu-,但何必呢?请不要误会我的意思。像Ubuntu及其衍生产品这样的发行版非常好,多年来我已经使用了其中的几个。在使用Ubuntu和相关发行版时,我做的第一件事就是设置一个root密码,这样我就可以直接以root身份登录。其他发行版,如Fedora及其相关发行版,现在在安装过程中提供了一些有趣的选项。我注意到的第一个Fedora版本是Fedora34,我在写我即将出版的书时安装了很多次。在安装页面,可以找到其中一个安装选项来设置root密码。这个新选项允许用户选择“锁定根帐户”,就像Ubuntu锁定根帐户的方式一样。此页面上还有一个选项允许使用密码以root身份远程SSH登录此主机,但这仅在root帐户解锁时有效。第二个选项位于允许创建非根帐户的页面上。此页面上的选项之一是“让此用户成为管理员”。勾选此选项后,用户ID将被添加到一个名为wheel组的特殊组中,该组授权该组成员使用sudo命令。Fedora36甚至在复选框的描述中提到了wheel组。可以将多个非根用户设置为管理员。使用此方法指定为管理员的任何人都可以使用sudo命令在Linux计算机上执行所有管理任务。Linux只允许在安装时创建一个非root用户,因此其他新用户可以在创建时添加到wheel组。root用户或其他管理员可以使用文本编辑器或usermod命令直接将现有用户添加到wheel组。在大多数情况下,如今的管理员只需执行基本任务,例如添加新打印机、安装更新或新软件,或者删除不再需要的软件。这些GUI工具需要root或管理密码,并将接受来自管理员用户的密码。我如何在Linux上使用su和sudo?我同时使用su和sudo。它们都是我使用的非常重要的系统管理工具。我没有锁定root帐户,因为我需要root来运行我的Ansible脚本和我编写的rsbuBash程序来执行备份。这两个程序都需要以root身份运行,就像我为管理Bash编写的其他几个脚本一样。我使用su命令切换到root,这样我就可以执行这些脚本和许多其他常用命令。当我需要识别问题并修复它们时,使用su命令将我的特权提升到root非常有用,因为我不希望sudo带来的特权升级会话超时。当非root用户需要执行这些任务时,我使用sudo命令来执行需要root权限的任务。我在sudoers文件中设置了非根帐户,只允许访问完成任务所需的一两个命令。当我只需要运行一个或两个需要提升权限的快速命令时,我自己使用sudo命令。结论只要能完成工作,使用什么工具并不重要。您使用的是Vim还是Emacs、systemd还是SystemV、RPM还是DEB、sudo还是su,结果有何不同?这里的关键是您应该使用最适合您的工具。Linux和开源软件的最大优势之一是通常有许多选项可用于我们需要完成的任务。su和sudo各有长处,如果使用得当,都非常安全。基于它们的历史功能,我选择同时使用su和sudo命令,因为它对我有用。对于我自己的大部分工作,我更喜欢su命令,因为它最适合我的工作流程。本文节选自我的书《系统管理员的 Linux 哲学The Linux Philosophy for Sysadmins(Apress,2018 年)》第19章,经授权转载。