- 当您运行可执行文件时,有时操作系统会拒绝您的权限。例如,
make install
需要使用系统路径的前缀来运行sudo
,而使用非系统路径的前缀则不需要sudo
。即使在程序执行某些操作之前,操作系统如何决定运行可执行文件需要比用户拥有更多的权限? - 有时,运行程序不会被拒绝权限,但如果使用
sudo
.例如,当运行du
在某个系统目录上时,只有通过sudo
它才能访问某个目录。为什么操作系统在程序运行之前不拒绝运行此类程序的权限,或者友好地通知更多权限是首选? - 是不是只要
sudo
有效su
就一定有效,无论何时su
有效sudo
就一定有效?或者 withsu
,用户可以做比 with 更多的事情sudo
?操作系统如何决定何时sudo
工作以及何时su
需要?
答案1
出于您所描述的目的,操作系统不会决定您最初是否需要 sudo跑步该程序。相反,在程序开始运行并尝试执行当前用户不允许的操作(例如写入文件以/usr/bin
安装新命令)后,操作系统会阻止文件访问。在此情况下采取的操作取决于程序;make
停止运行,但du
在打印消息后将继续到下一个文件/目录。
su
和命令sudo
是使用 root 权限运行程序的两种不同方式。它们可能在一些小细节上有所不同,例如启动新程序时的环境内容,具体取决于所使用的选项。操作系统不需要决定其中之一何时可以工作。
答案2
- 例如,有时“权限被拒绝”消息是由于文件系统权限拒绝您的写入访问权限造成的。可执行文件/工具只是检查文件系统是否授予您足够的权限来执行您即将执行的操作,如果文件系统拒绝则抛出错误。其他时候,该工具本身会检查您的用户 ID,然后才允许您继续使用它。
- 当您运行一个程序时,
sudo
您正在以其他用户的名称运行它。如果该用户比您的用户“能够做更多的事情”,并且配置sudo
允许您代表其他用户做这些事情,那么是的,sudo
将允许您做更多的事情。但这不是必需的。如果你只是sudo
在命令行的开头添加,你实际上是sudo
ing asroot
,所以通常你能够比普通人做更多的事情。 - 绝对不是。要使用,
sudo
您需要提供自己的用户密码,然后您就可以代表目标用户执行一些操作。要使用su
,您需要目标用户的密码如果你拥有它,就系统而言,你就成为目标用户,并且可以做用户可以做的任何事情。
也可以看看
答案3
su
并且sudo
是特权程序。 su
将(身份验证成功后)真实有效的用户和组 ID 更改为您su
要访问的用户的 ID。因此,su
类似于login
。请注意,su
可用于更改为任何用户,而不仅仅是 root。 sudo
还更改真实有效的用户和组 ID。到目前为止su
, 和sudo
是相似的(但不相关),除此之外它们是非常不同的。
使用 时su
,您需要知道目标的密码,并且一旦通过身份验证,您就可以作为该用户执行您想做的任何操作。su
可以通过设置来限制SU_WHEEL_ONLY
的使用/etc/login.defs
。如果设置了,则只有该组内的用户wheel
可以使用su
,否则不受限制。除此之外,su
要么全有,要么全无。
sudo
与此完全不同。您sudo
可以定义相当复杂的策略来/etc/sudoers
限制 sudoer(调用 的用户sudo
)可以执行的操作。例如,您可以定义策略,其中某些用户只能以特定权限运行某些程序,而其他用户可以以其他权限运行其他程序。
的显着特征sudo
之一是您可以将其配置为用户必须通过以下方式验证自己的身份:他自己的密码(而不是目标)。因此,它sudo
在管理员中非常受欢迎,因为它允许授权用户仅执行定义的特权操作,而无需处理超级用户密码,而且您还可以获得一定程度的责任。
答案4
还没有人打 ✓,所以我整理了一个包含我能想到的所有内容的答案。
1 当您运行可执行文件时,有时操作系统会拒绝您的权限。例如,运行 make install 时前缀为系统路径将需要 sudo,而前缀为非系统路径时则不需要 sudo。即使在程序执行某些操作之前,操作系统如何决定运行可执行文件需要比用户拥有更多的权限?
不,当可执行文件启动时,它还没有完成。当可执行文件尝试做某事时,它就完成了。
操作系统将检查文件系统权限和功能(这些不包含在文件系统权限中,包括降低良好级别、mknode、一些低级网络内容、终止其他进程、重新启动、设置时间等)。如果您没有权限,则无法执行此操作。 Root 具有全套功能,包括 CAP_DAC_OVERRIDE(忽略文件权限)。
2 有时,运行一个程序不会被拒绝权限,但如果用sudo运行程序将能够做更多的事情。例如,当在某个系统目录上运行 du 时,只有使用 sudo 才能访问某个目录。为什么操作系统在程序运行之前不拒绝运行此类程序的权限,或者友好地通知更多权限是首选?
操作系统无法知道程序将做什么。因此,由程序在启动之前检查权限,并决定要做什么。但它不必这样做。
注意:在 Android 上有一个清单,应用程序在其中声明它可以使用哪些权限。操作系统将终止任何尝试使用其未声明的特权的应用程序,并且操作系统并不总是保证可以遵守特权。例如,网络访问可能不可用。
2 是不是每当 sudo 起作用时,su 也会起作用,每当 su 起作用时,sudo 也会起作用?或者使用 su,用户可以比使用 sudo 做更多的事情?操作系统如何决定何时 sudo 起作用以及何时需要 su ?
sudo
并su
做大致相同的事情。一些区别在于环境变量处理和其他此类安全问题的避免。然而,它们都是允许您成为另一个用户的工具,并且都有一个默认用户 root。
su
是原始工具,它要求您输入要更改的用户/组的密码。
sudo
较新,默认情况下要求您输入自己的密码,但可以配置为接受您要切换到的用户/组的密码,或者根本不需要密码。它还允许进行大量配置,包括它将使用哪些命令、为谁工作以及如何通过该程序为该计算机上的该用户进行身份验证。这也是sudoedit
其一部分sudo
,可用于允许以不同用户身份进行编辑,并避免从编辑器中进行子 shell 的安全问题(从编辑器中调用 exec 来运行具有升级权限的任意进程)。