操作系统如何知道命令需要 sudo?

Tim*_*Tim 17 permissions sudo

  1. 当您运行可执行文件时,有时操作系统会拒绝您的许可。例如make install,在前缀为系统路径的情况下运行将需要sudo,而在前缀为非系统路径的情况下将不会要求sudo。即使在程序执行某些操作之前,操作系统如何决定运行可执行文件需要比用户拥有的权限更多的权限?
  2. 有时,运行程序不会被拒绝权限,但如果使用sudo. 例如,当du在某个系统目录上运行时,只有用 sudo它才能访问某个目录。为什么操作系统不拒绝运行这样一个程序的权限,或者在程序可以运行之前友好通知更多权限?
  3. 是不是无论何时sudo有效,su也将有效,何时su有效,sudo也将有效?或者 with su,一个用户可以做的比 with 多sudo?操作系统如何决定何时sudo工作以及何时su需要?

Gre*_*ill 24

出于您描述的目的,操作系统不会决定您是否需要 sudo 来初始运行程序。相反,在程序开始运行并尝试执行当前用户不允许的操作(例如写入文件/usr/bin以安装新命令)后,操作系统会阻止文件访问。在这种情况下采取的行动取决于程序;make停止运行但du将在打印消息后继续下一个文件/目录。

susudo命令运行具有root权限的程序的两种不同的方式。根据所使用的选项,它们可能在细微的细节上有所不同,例如启动新程序时的环境内容。操作系统不需要决定其中一个何时可以工作。


Jos*_* R. 14

  1. 例如,有时“权限被拒绝”消息是由于文件系统权限拒绝您写访问。可执行文件/工具只是检查文件系统是否授予您足够的权限来执行您将要执行的操作,并在文件系统拒绝时抛出错误。其他时候,该工具本身会在允许您继续使用它之前检查您的用户 ID。
  2. 当您运行程序时,sudo您正在以其他用户的名称运行它。如果该用户比您的用户“能够做更多的事情”并且sudo配置允许您代表其他用户做这些事情,那么是的,sudo将允许您做更多的事情。不过,这不是必需的。如果你只是sudo在命令行的开头添加,你实际上是sudoing as root,所以通常你可以做更多的事情,而不仅仅是一个凡人。
  3. 绝对不是。要使用sudo您需要提供您自己的用户密码,然后您可以代表目标用户做一些事情。要使用su,您需要目标用户的密码,如果您拥有密码,就系统而言,您将成为该目标用户,并且可以执行用户可以执行的任何操作。

也可以看看


cou*_*ode 6

su并且sudo是特权程序。 su将(成功验证后)真实有效的用户和组 ID 更改为您su要访问的用户的 ID 。因此,su类似于login。请注意,su可用于更改为任何用户,而不仅仅是 root。 sudo还会更改真实有效的用户和组 ID。到目前为止susudo它们是相似的(但不相关),除此之外它们非常不同。

使用su,您需要知道目标的密码,一旦您通过身份验证,您就可以作为该用户做任何想做的事情。采用su可以通过设置限制SU_WHEEL_ONLY/etc/login.defs。如果设置,则只有组内的用户wheel可以使用su,否则不限制。除此之外,su要么全有,要么全无。

sudo在这方面完全不同。有了sudo你可以定义相当复杂的政策/etc/sudoers上什么sudoer(谁调用用户sudo)被允许做。例如,您可以定义策略,某些用户可以仅运行具有某些权限的某些程序,而其他用户可以运行具有其他权限的其他程序。

的显着特点之一sudo是您可以对其进行配置,以便用户必须使用自己的密码(而不是目标的密码)来验证自己。因此,sudo它在管理员中变得非常流行,因为它允许授权用户只执行定义的特权操作而无需处理超级用户密码,而且您可以获得一定程度的问责制。