“谁能告诉我这是什么sudo
意思吗?”我正在学习Linux。我用谷歌搜索但有人可以给我一个视窗比较一下我想这会对我有一点帮助。我知道su
意味着切换用户。sudo
是另一个用户,但是如何以及为什么?为什么你不能只在你的用户名下授予自己权限?
答案1
默认情况下,在大多数 Unices 上,只能谨慎使用“管理员”帐户 root。普通 Unix 系统上只有两个级别的管理员或“超级用户”权限:您要么完全控制一切,或者你不这么做。
“完全控制”包括绕过大多数权限检查并通过简单的错误输入彻底搞乱系统。作为普通用户,你最多只能删除自己的文件。
较旧的su
实用程序与 root 密码一起使用来假定 root 身份,但也可以用于假定其他用户身份,或者作为他们执行单个命令,前提是您属于正确的用户组并且知道他们的密码。
su
常用的是经过root 用户(在某些 Unix 系统上)启动需要在特定用户身份下运行的守护进程(服务进程),以防止他们访问他们不应该访问的区域(通常是 Web 服务器、SSH 服务器等)。这可以在系统引导时在启动脚本中完成。
su
很少以交互方式使用(在命令行上)。
该sudo
实用程序需要更多配置,因为它允许用户使用另一个用户身份执行命令他们自己的密码(例如,这意味着不需要共享 root 密码),并且还可以对允许谁执行哪些操作进行细粒度控制。例如,可以为单个用户或整个用户组提供安装某个磁盘的能力,但不能卸载它或安装任何其他磁盘,或使用特定命令安装软件等。同样,该实用sudo
程序允许假设其他用户的身份(不仅仅是 root)进行交互式会话,或执行单个命令(如果配置已由具有 root 权限的其他人以这种方式设置)。
通常,人们会使用以下命令运行单个命令sudo
(因此称为“超级用户执行”):
$ sudo apt-get install vim
或者
$ sudo shutdown -ph now
以这种方式使用sudo
优于使用sudo -s
交互式 root shell,因为您执行的命令会被记录下来。人们稍后可以追溯日志文件中的操作,以查看在哪里(以及谁)做了某件事,以进行调试或审计。
如果您发现自己长时间在交互式 root 提示符下打字,那么您应该重新考虑您正在做什么以及这是否确实需要 root 权限。
举个例子,唯一一次我当我在新安装的计算机上为自己添加普通用户时,或者当我确实遇到一些严重问题甚至阻止我以普通用户身份登录时,会出现交互式 root 提示。
OpenBSD(自版本 5.8 起)有一个名为的实用程序doas
,它取代了sudo
默认的系统安装。当人们发现 OpenBSDsudo
变得过于复杂而无法满足 OpenBSD 开发人员制定的目标时,就开发了它。它的使用类似于sudo
,但配置起来更容易。
答案2
sudo
允许你以 root 超级用户身份运行程序。用它代替su
,
- 您不需要知道 root 密码,因为它会要求您输入密码,
- 您明确知道哪些命令将以 root 身份运行,哪些命令将以您的身份运行。如果您使用
su
,您将获得一个 shell 并且可以无意中运行一些(危险)程序,并且 - 您的所有操作都会记录到
auth.log
文件中。 shell 中的操作,例如由su
通常不记录。
为什么你不能只在你的用户名下授予自己权限?
出于安全原因,root 帐户很少用于日常目的。通常,包括管理员在内的所有用户都使用“普通”用户,并且仅在需要时以 root 身份执行命令。这可以防止 (1) 对其他用户的文件进行未经授权的访问,(2) 未记录的 root 操作,以及 (3) 执行“危险”程序引起的问题。
有一个类比维基百科你可以考虑:
- 使用 root 帐户就像是超人一样;管理员的普通用户更像是 Clark Kent。克拉克·肯特只有在必要时才会成为超人,以拯救人们。然后他又恢复了“伪装”。根访问应该以相同的方式使用。克拉克·肯特的伪装并没有真正限制他,因为他仍然能够使用他的超能力。这类似于使用 sudo 程序。
答案3
在 Unix 的早期版本中,最常见的情况是通过没有窗口系统的终端登录。 su 命令(替代用户)是无需注销即可更改当前权限的便捷方法。请记住,如果没有窗口系统注销,则意味着停止正在运行的任何内容。
使用 su 成为 root 有一些恼人的问题。人们有时会忘记退出会话并意外地以 root 身份运行命令。更改管理密码很复杂,因为您需要将其分发给每个需要它的人。大多数系统不会记录每个命令,因此很难判断谁以 root 身份执行了哪些操作。等等。
sudo 通过让人们以 root 身份运行一个命令来解决这些问题。它提供了更好的审核和控制,同时对于一次性命令来说更加方便。
答案4
sudo 允许您根据一组可配置的预定义规则以不同用户(包括 root)身份运行程序。
在 Unix/POSIX/Linux 系统上 root 就是上帝。 root 用户也是单一的。
在许多环境中,有多个管理员可能需要完全 root 访问权限,但也可能有人需要访问权限来执行通常为 root 保留的某些特定功能; DBA需要停止和启动DB服务、编辑DB配置文件,网络管理员需要配置网络设备和路由,安全管理员需要管理证书和配置防火墙。
通过限制一个人可以运行的命令,sudo 应用了最小权限原则 - 用户无法获得不需要的访问权限。但这不仅仅是限制用户运行的二进制文件。许多管理任务都是从命令行执行的 - 并且传递给该命令的参数也可以通过 sudo 约束(或在具有 sudo 提供的访问权限的 shell 脚本中捕获),因此可以限制这些专门的数据/设备管理员可以访问。
为什么你不能只在你的用户名下授予自己权限?
1)这会很糟糕。
我经常可以访问系统上的 root 帐户 - 但我会设置一个命名帐户用于登录,并且当我想明确调用我的超能力时,只能使用“su”或“sudo”。除了避免愚蠢的错误之外,我的命名帐户还为任何行为不当的组件提供了一个沙箱。
如果有 5 个人需要特权访问权限,我是否向每个人授予特权访问权限呢?那20个呢? 200个怎么样?
2)这会很困难
- 这不是 Unix 安全模型。当然,您可以更改某些可执行文件的权限(请参阅前面有关参数的注释)。但是,如果您具有安全意识,则可以定期应用补丁 - 这可能会破坏自定义的权限模型(sudo OTOH 独立于命令本身维护其权限)。