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

Linuxsu和sudo有什么区别?

时间:2023-03-20 16:15:24 科技观察

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: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的密码字段是感叹号(!)。这表明该帐户已被锁定,无法使用。现在,要使用root帐户成为真正的系统管理员,您需要为root帐户设置密码。student@ubuntu1:~$sudosu-[sudo]passwordforstudent:root@ubuntu1:~#passwdrootEnternewUNIXpassword:RetypenewUNIXpassword:<重新输入新密码rootpassword>passwd:passwordupdatedsuccessfullyroot@ubuntu1:~#左右滑动查看完整代码现在可以直接在控制台以root身份登录,或者直接使用su成为root,而不是每条命令都使用sudo。当然,您可以只使用sudosu-只要您想以root身份登录,但何必呢?请不要误会我的意思。像Ubuntu及其衍生产品这样的发行版非常好,这些年来我已经使用了其中的几个。我在使用Ubuntu和相关发行版时做的第一件事就是设置一个root密码,这样我就可以直接以root身份登录。其他发行版(例如Fedora及其衍生产品)现在在安装过程中提供了几个有趣的选项。我注意到的第一个Fedora版本是Fedora34。这些安装选项之一可以在设置root密码的页面上找到。一个新选项允许用户以与锁定Ubuntu根帐户相同的方式选择“锁定根帐户”。该页面上还有一个选项允许使用密码以root身份远程SSH登录到该主机,但前提是root帐户已解锁。页面上的第二个选项允许创建非根用户帐户。该页面上的选项之一是“使该用户成为管理员”。选中此选项后,用户ID将被添加到一个名为wheel组的特殊组中,该组的成员被授权使用sudo命令。Fedora36甚至在复选框的描述中提到了wheel组。可以将多个非root用户设置为管理员。使用此方法指定为管理员的任何人都可以使用sudo命令在Linux计算机上执行所有管理任务。Linux在安装时只允许创建一个非root用户,因此其他新用户可以在创建时添加到wheel组中。root用户或其他管理员可以使用文本编辑器或usermod命令将现有用户直接添加到wheel组。在大多数情况下,如今的管理员只需执行一些基本任务,例如添加新打印机、安装更新或新软件,或者删除不再需要的软件。这些GUI工具需要root或管理员密码,接受指定为管理员的用户输入的密码。我如何在Linux上使用su和sudo?我同时使用su和sudo。它们在我的系统管理员工具箱中都占有重要位置。我无法锁定根帐户,因为我需要用它来运行我的Ansible剧本和我编写的rsbuBash程序来执行备份。这两个命令都需要以root身份运行,就像我编写的其他几个管理Bash脚本一样。我使用su命令将用户切换到root,这样我就可以执行这些和许多其他常见任务。使用su将我的权限提升到root对识别和解决问题特别有帮助。当非root用户需要执行需要root权限的任务时,我会为这些任务使用sudo命令。我在sudoers文件中设置了非根帐户,以便只能访问完成任务所需的一两个命令。当我只需要以提升的权限运行一两个快速命令时,我自己使用sudo。结论您使用哪种工具并不重要,重要的是完成工作。使用vim或Emacs、systemd或SystemV、RPM或DEB、sudo或su,并没有太大区别。归根结底,您应该使用最方便、最适合您的工具。Linux和开源的一大优点是我们通常可以选择工具来帮助我们完成工作。su和sudo都有其优点,并且在针对其预期用例适当使用时都表现良好。对于我的大部分工作,我更喜欢su,因为它最适合我和我的工作流程。参考链接:ps://opensource.com/article/22/6/linux-su-vs-sudo-sysadmin