sudo 用户和 root 用户的区别

ran*_*cho 39 users root permissions sudo access-control

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

root 用户创建并修改/etc/sudoers文件。

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

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

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

请给我解释一下。

Edw*_*alk 57

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


长答案:

“root”(又名“超级用户”)是系统管理员帐户的名称。这个名字的起源有点过时,但这并不重要。

Root 用户的用户 ID 为 0,名义上拥有无限权限。Root 可以访问任何文件、运行任何程序、执行任何系统调用以及修改任何设置。(但见下文¹)。

在“sudo”命令发明之前,如果你想执行管理任务,你必须以 root 身份登录,或者通过某种方式获得登录提示²,或者使用su命令(“su”是替代用户的缩写。)³

这有点麻烦,而且也不允许您授予用户部分管理权力。所以发明了“sudo”命令(“substitute user do”的缩写)。

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

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

当然,sudo su会让你简单地成为root。结果与您以 root 身份登录或执行su命令相同,只是您不需要知道 root 密码,但您需要在 sudoers 文件中。

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

sudoers 文件是什么给你多个管理员?实际上,您的管理员是 root,以及 sudoers 文件中列出的每个人。没有 sudoers 文件,唯一的管理员是 root。

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

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


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

SELinux (Security Enhanced Linux) 下,有一个有效的访问控制列表来确定哪个程序可以做什么,甚至 root 也无法通过这些限制。

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

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

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

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

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

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

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

  • sudoers 文件是_给_您多个管理员的文件。实际上,您的管理员是 root,以及 sudoers 文件中列出的每个人。没有 sudoers 文件,唯一的管理员是 root。 (3认同)
  • 旧答案,这是迂腐,但`su`是“替代用户”的缩写;`sudo` 因此是“替代用户做”。您可以使用 `su` 以其他用户身份登录,而不仅仅是 `root`。您可以使用 `sudo` 以其他用户身份执行命令。 (3认同)
  • 为了澄清这一点:“实际上,您的管理员是 root,加上 sudoers 文件中列出的每个人。” sudoers 条目不一定意味着完全 root 甚至 root 级别访问权限;我可能会授予 Sven 重新启动作为 moniser 运行的监控代理的能力。 (2认同)