百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux su与sudo有何区别?(linux的sudo是什么意思)

nanshan 2024-10-21 06:13 30 浏览 0 评论

su命令和sudo命令都让用户可以执行非特权用户(除root用户之外的所有人)无权执行的系统管理任务。一些人偏爱sudo命令,比如Seth Kenlon最近发表了《在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,是由于它需要输入比运行基本命令所需的更多内容。这些工具都可以提升权限,但方式大不相同。这种差异归因于它们最初面向不同的用例。

sudo

sudo的初衷是让root用户能够向一两个非root用户授予这一权限:访问他们经常需要的一两个特定命令。sudo命令使非root用户可以临时访问执行任务所需的提升权限,比如添加和删除用户、删除属于其他用户的文件、安装新软件以及通常管理现代Linux主机所需的任何任务。

允许用户访问需要提升权限的一两个常用命令可以让系统管理员避免用户的大量请求,并消除等待时间。sudo命令并不将用户帐户切换成root;大多数非root用户永远不应该拥有全面的root访问权。在大多数情况下,sudo让用户可以发出一两个命令,然后允许权限提升到期失效。在这个短暂的间隔(通常设置为5分钟),用户可以执行任何需要提升权限的必要管理任务。如果用户需要继续使用提升的权限,但尚未准备好发出另一个与任务相关的命令,可以运行sudo -v命令,重新验证登录信息,并将间隔时间再延长5分钟。

使用sudo命令确实有这个副作用:生成非root用户使用的命令的日志条目及其ID。日志便于事后分析问题,以确定用户何时需要加强培训。

su

su命令旨在允许非root用户将权限级别提升到root——实际上就是非root用户成为root用户。唯一的要求是用户需要知道root密码。这方面没有任何限制,因为用户现在以root身份登录。su命令提供的权限提升没有时间限制。用户以root身份想工作多久就可以多久,无需重新验证身份。完成工作后,用户可以发出exit命令,从root恢复到自己的非root帐户。

争议和变化

最近su与sudo的使用存在一些分歧。“真正的[系统管理员]不使用sudo”——Paul Venezia

Venezia在其文章中称,对于许多充当系统管理员的人来说,sudo被用作不必要的道具。他没有用太多的篇幅来捍卫或解释这一立场,只是声称这是事实。我同意他的看法,对于系统管理员来说是这样。我们不需要辅助轮来完成我们的工作。实际上,辅助轮很碍事。

然而,时代在“变化” ——美国民谣之父Bob Dylan是对的。自单人单机时代问世以来,管理计算机的方式发生了显著变化。在许多环境中,计算机的用户也是管理员。因此有必要为那些用户提供root的部分权限。一些现代发行版(比如Ubuntu及衍生版)经配置后,可将sudo命令专门用于特权任务。在那些发行版中,不可能以root用户身份直接登录或者甚至使用su成为root,因此需要sudo命令允许非root用户访问root权限。在这种环境下,所有系统管理任务都使用sudo来执行。

如果锁定root帐户,并将常规用户帐户添加到wheel组,可以进行这种配置。这种配置很容易被规避。

不妨在任何Ubuntu主机或虚拟机上先进行试验。我安装了Ubuntu 16.04 LTS1,并使用VirtualBox将它安装在虚拟机中。我在安装过程中为这个试验创建了一个非root用户student,并使用了一个简单的密码。

以用户student身份登录,打开终端会话。查看/etc/shadow文件中root对应的条目,加密的密码存储在该文件中。

student@ubuntu1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied1.2.

权限被拒绝,因此我们无法查看/etc/shadow文件。这对所有发行版都很常见,旨在防止非特权用户查看和访问加密的密码,不然可以使用常见的黑客工具破解这些密码。现在不妨尝试使用su –成为root。

student@ubuntu1:~$ su -
Password: <Enter root password – but there isn't one>
su: Authentication failure1.2.3.

左右滑动查看完整代码这会失败,因为root帐户没有密码,被锁在外面。使用sudo命令查看/etc/shadow文件。

student@ubuntu1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the student password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>1.2.3.4.5.6.

左右滑动查看完整代码我截断了输出结果,只显示root和student用户对应的条目。我还缩短了加密的密码,因此条目将放在一行中。字段由冒号(:)隔开,第二个字段是密码。请注意,root的密码字段是bang,即是个感叹号(!)。这表明该帐户已被锁住,无法使用。

现在,要使用root帐户成为真正的系统管理员,就需要为root帐户设置密码。

student@ubuntu1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@ubuntu1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@ubuntu1:~#1.2.3.4.5.6.7.

左右滑动查看完整代码现在您可以直接在控制台上以root身份登录,或者直接使用su成为root,而不是对每个命令使用sudo。当然,每当您想以root身份登录,完全可以就使用sudo su -,但何必劳这个神?

请别误解我的意思。Ubuntu及上下游衍生版之类的发行版非常好,这些年来我就用过其中几个。在使用Ubuntu及相关发行版时,我最先做的事情之一是设置root密码,以便我可以直接以root身份登录。

其他发行版(如Fedora及衍生版)如今在安装过程中提供几个有意思的选择。我注意到这点的第一个Fedora版本是Fedora 34。可以在页面上找到这些安装选项之一,以设置root密码。新选项允许用户以锁定Ubuntu root帐户的方式选择“锁定root帐户”。该页面上还有一个选项,允许使用密码,以root身份远程SSH登录到该主机,但仅当root帐户被解锁时才适用。

页面上的第二个选项允许创建非root用户帐户。该页面上的选项之一是“将该用户设为管理员”。选中该选项后,用户ID被添加到名为wheel组的特殊组中,授权该组成员可以使用sudo命令。Fedora 36甚至在该复选框的描述中提到了wheel组。

可以将多个非root用户设为管理员。使用该方法指定为管理员的任何人都可以使用sudo命令,在Linux计算机上执行所有管理任务。

Linux只允许在安装过程中创建一个非root用户,因此其他新用户可以在创建时添加到wheel组中。root用户或另一个管理员可以使用文本编辑器或usermod命令,将现有用户直接添加到wheel组。在大多数情况下,今天的管理员只需要执行几项基本任务,比如添加新打印机、安装更新或新软件,或者删除不再需要的软件。这些GUI工具需要root或管理员密码,接受指定为管理员的用户输入的密码。

我如何在Linux上使用su和sudo?

我既使用su又使用sudo。它们在我的系统管理员工具箱中都有重要的位置。

我无法锁定root帐户,因为我需要使用它来运行我的Ansible剧本和为执行备份而编写的rsbu Bash程序。这两个命令都需要以root身份运行,我编写的另外几个管理Bash脚本也是如此。我使用su命令将用户切换成root用户,那样我就可以执行这些任务和其他许多常见任务。在确定和解决问题时,使用su将我的权限提升到root尤其有用。

当非root用户需要执行需要root权限的任务时,我将sudo命令用于这些任务。我在sudoers文件中设置了非root帐户,以便只访问完成任务所需的一两个命令。当我只需要运行一两个拥有升级权限的快速命令时,我自己也会使用sudo。

结论

使用哪种工具其实不如完成工作那么重要。使用vim或Emacs、systemd或SystemV、RPM或DEB、sudo或su,并没有那么大的区别。

归根到底,应该使用最顺手、最适合自己的工具。Linux和开源的最大优点之一便是,我们通常都有许多可供选择工具帮助我们完成任务。su和sudo各有优点,适当用于预期的用例时,两者都表现不俗。我偏爱用su处理自己的大部分工作,因为它最适合我和我的工作流程。

参考链接:

ps://opensource.com/article/22/6/linux-su-vs-sudo-sysadmin

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: