su命令和sudo命令都允许用户执行非特权用户(root用户除外)无权执行的系统管理任务。有些人更喜欢sudo命令,例如SethKenlon最近发表的《在Linux上使用sudo的五个理由》,其中颂扬了sudo的诸多优点。另一方面,我偏爱su命令,在我所做的大部分系统管理工作中,我更喜欢它而不是sudo。我在本文中比较了这两个命令,解释了为什么我更喜欢su而不是sudo并且仍然使用两者。系统管理员的历史观su命令和sudo命令是为不同的世界设计的。早期的Unix计算机需要全职系统管理员,他们使用root帐户作为他们唯一的管理帐户。在那些日子里,拥有root密码的人以root身份登录电传打字机或CRT终端,然后执行管理Unix计算机所需的管理任务。root用户还将拥有用于非root活动的非root帐户,例如编写文档和管理个人电子邮件。这些机器上通常有许多非root用户帐户,没有一个需要完全root访问权限。用户可能需要以root身份运行一两个命令,但很少。许多系统管理员以root身份登录,并在完成工作后退出root会话。有时需要整天以root身份登录。大多数系统管理员很少使用sudo的原因是它需要的输入比运行基本命令所需的更多。这些工具都可以提升权限,但方式截然不同。这种差异是由于它们最初针对的是不同的用例。sudosudo的初衷是让root能够授予一个或两个非root用户这种特权:访问他们经常需要的一两个特定命令。sudo命令为非root用户提供临时访问权限以执行任务所需的提升权限,例如添加和删除用户、删除属于其他用户的文件、安装新软件以及管理现代Linux主机所需的一般任务。允许用户访问一两个需要提升权限的常用命令可以让系统管理员避免向用户发送大量请求并消除等待时间。sudo命令不会将用户帐户切换为root;大多数非root用户永远不应该拥有完全的root访问权限。在大多数情况下,sudo允许用户在允许权限升级到期之前发出一两个命令。在此短时间间隔内(通常设置为5分钟),用户可以执行任何需要提升权限的必要管理任务。如果用户需要继续使用提升的权限,但还没有准备好发出另一个与任务相关的命令,可以运行sudo-v命令重新验证登录并将间隔再延长5分钟。使用sudo命令确实有这个副作用:为非root用户及其ID使用的命令生成日志条目。日志允许对问题进行事后分析以确定用户何时需要额外培训。susu命令旨在允许非root用户将他们的权限级别提升到root——实际上,非root用户成为root。唯一的要求是用户需要知道root密码。在这方面没有限制,因为用户现在以root身份登录。su命令提供的权限提升没有时间限制。用户可以根据需要以root用户身份工作多久,而无需重新进行身份验证。工作完成后,用户可以发出exit命令从root恢复到他们自己的非root帐户。争议和变化最近对su与sudo的使用存在一些分歧。“真正的[系统管理员]不使用sudo”-PaulVeneziaVenezia在他的文章中指出,对于许多充当系统管理员的人来说,sudo被用作不必要的道具。除了声称它是真实的之外,他没有花太多时间来捍卫或解释那个立场。对于系统管理员,我同意他的看法。我们不需要训练轮来完成我们的工作。事实上,训练轮挡住了路。然而,时代在“改变”——鲍勃·迪伦是对的。自单人计算机时代以来,计算机的管理方式发生了重大变化。在许多环境中,计算机的用户也是管理员。因此有必要为这些用户提供root的部分权限。一些现代发行版(例如Ubuntu及其衍生版)可以配置为专门针对特权任务使用sudo命令。在那些发行版上,无法直接以root身份登录,甚至无法使用su成为root,因此需要sudo命令来允许非root用户获得root权限。在此环境中,所有系统管理任务均使用sudo执行。如果您锁定root帐户并将常规用户帐户添加到wheel组,则可以进行此配置。这种配置很容易被绕过。请随意先在任何Ubuntu主机或虚拟机上进行试验。我安装了Ubuntu16.04LTS1并使用VirtualBox将其安装在虚拟机中。我在安装过程中为这个实验创建了一个非root用户student,并使用了一个简单的密码。以用户student身份登录并打开终端会话。查看/etc/shadow文件中root对应的条目,加密后的密码就存放在这里。student@ubuntu1:~$cat/etc/shadowcat:/etc/shadow:Permissiondenied权限被拒绝,所以我们无法查看/etc/shadow文件。这对所有发行版都是通用的,旨在防止非特权用户查看和访问加密密码,否则这些密码可能会被普通黑客工具破解。现在还不如试试用su–成为root。student@ubuntu1:~$su-Password:
