sudo用户和root用户之间的区别[关闭]


21

/etc/sudoers文件列出了用户可以使用sudo命令执行的操作

超级用户创建和修改/etc/sudoers文件。

这个概念对我来说很难理解。

如果所有具有sudo特权的用户都属于该sudoers组,那么通过发出sudo su命令,所有这些用户都可以成为root用户。

那么,谁才是真正的root用户,他又如何控制sudoers组中用户的权限?

请给我解释一下。


4
我认为您需要扩展难以理解的部分。
garethTheRed

谁是root用户?这个问题我很难理解。因为卑鄙的用户只能屈服于sudoers组
rancho

@rancho更新问题,请
peterph'6


您的基本问题的简单答案(基于对答案的评论):的确,如果您允许运行,root访问和sudo权限之间的区别确实变得不相关sudo su。但是,您不必允许这样做。您只能允许一组特定的命令,例如,仅授予初级sysadmin sudo访问特定备份命令的权限。
通配符

Answers:


29

执行摘要:“ root”是管理员帐户的实际名称。“ sudo”是允许普通用户执行管理任务的命令。“ Sudo”不是用户。


长答案:

“ root”(又名“ superuser”)是系统管理员帐户的名称。名称的由来有点陈旧,但这没关系。

根用户的用户ID为0,并且名义上具有无限特权。根目录可以访问任何文件,运行任何程序,执行任何系统调用以及修改任何设置。(但请参见下面¹)。

在发明“ sudo”命令之前,如果要执行管理任务,则必须以root用户身份登录,要么以某种方式获得登录提示²,要么使用su命令(“ su”表示替代用户。)³

这有点麻烦,也不允许您授予用户部分管理权限。因此发明了“ sudo”命令(“替代用户”的缩写)。

只要您的用户ID在sudoers文件中,就可以使用“ sudo”命令以超级用户特权执行命令,从而为您提供必要的授权。

因此,例如,sudo vi /etc/hosts将允许您像以root用户身份运行一样编辑hosts文件。您甚至不需要root密码,只需您自己的登录密码。

当然,sudo su这会让您简单地扎根。结果与您以root用户身份登录或执行su命令的结果相同,只是您不需要知道root密码,但您确实需要将其保存在sudoers文件中。

sudoers文件确定谁可以使用sudo命令以及它们可以做什么。

sudoers文件为您提供了多个管理员。实际上,您的管理员是root,再加上sudoers文件中列出的所有人。没有sudoers文件,唯一的管理员是root。

实际上,在其他人为您管理计算机的组织中,不知道您自己计算机的root密码是很普遍的-只要您在sudoers文件中,就没有关系。

在一个为我服务的公司中,有一个巨大的服务器场,只有极少数人知道根密码。相反,有一个数据库允许谁在哪些服务器上工作。自动化过程会将您添加到被授权访问的那些服务器的sudoers文件中,并在您的授权到期时将您删除。


¹还有一件事:现代Unix版本现在甚至可以限制root用户的权限。

SELinux(安全性增强Linux)下,有效地存在一个访问控制列表,该列表确定哪个程序可以执行什么操作,甚至root也不能越过这些限制。

在Apple的系统完整性保护(SIP)(又名“无根”)系统下,某些文件和目录被锁定,因此只有相应白名单上的应用程序才能访问它们。

这些系统的存在是为了保护系统免受恶意用户设法获得根访问权限的情况的侵害。(或者在某些情况下,防止用户越狱其嵌入式设备。)出于明显的原因,即使具有root用户访问权限,也很难绕过这些限制。

²“ login:”提示是Unix历史上的另一段古老历史,可以追溯到我们都在串行线路而不是窗口系统上使用ascii终端时。您仍然可以通过简单地login在任何终端窗口中键入或通过从其他位置打开到计算机的ssh(或telnet或rsh)连接来获得“ login:”提示。如果需要,可以从那里以其他用户身份登录。(并且,如果您的计算机碰巧有串行端口,您仍然可以对其进行配置,以允许在其上登录。)

³也可以为单个程序授予root访问权限。即使由普通用户运行,这些程序也可以执行具有root用户访问权限的用户可以执行的任何操作。这些通常仅限于特定任务。例如,crontab程序具有root特权,因此它可以编辑cron表。显然,“ sudo”具有root特权,因此它可以执行其操作。

⁴我将再讲一遍我之前提到的问题。我一直在交替使用“管理员”和“根”,但是还有其他类型的管理员。这些帐户通常称为“角色帐户”,也就是说,这些帐户不属于实际的人,而是为了在系统上执行某些特定角色而存在。如果您查看系统上的/etc/passwd文件,将会发现数十个这样的帐户。

例如,如果您的系统上安装了mysql,则将有一个“ mysql”用户,并且所有数据库文件,配置文件等都将归该用户所有。只有该用户才具有访问文件和运行mysql服务器所需的权限。从某种意义上说,该用户将是管理员帐户,但仅适用于mysql。

如果您需要执行数据库管理任务,则可以使用该su mysql命令成为“ mysql” ,或者使用sudosudoers文件为这些特定命令赋予mysql特权的位置。


1
sudoers文件您提供了多个管理员。实际上,您的管理员是root,再加上sudoers文件中列出的所有人。没有sudoers文件,唯一的管理员是root。
爱德华·福尔克

1
“在SELinux(安全性增强Linux)下,有效地存在一个访问控制列表,该列表确定谁可以做什么,甚至root也不能超过这些限制。” -如果连root也无法通过这些限制,那么谁首先创建了这些限制?
兰乔

1
为了澄清这一点:“有效地,您的管理员是root,再加上sudoers文件中列出的所有人。” sudoers条目不必表示完整的root权限,甚至不必指根级别的访问权限;我可能会授予Sven重新启动作为监视程序运行的监视代理程序的功能。
杰夫·谢勒

1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]。在我的机器(Solus OS 3)上,这是错误的。我的用户名不在sudoers文件中。而且我仍然可以sudo
马丁·安德森

2
旧答案,这是学究,但是su是“替代用户”的缩写;sudo因此是“替代用户”。您不仅可以使用su来以其他用户身份登录root。您可以用来sudo以其他用户身份执行命令。
josaphatv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.