我知道这个问题有点基础,甚至可能有点愚蠢,但我一直没能找到答案。
我知道每个文件都有"Executable"
位。
我假设需要 的程序,这些程序由用户和组root
拥有,不会有和 的位,这将阻止非 root 用户执行这些程序。但在和目录中,我看到所有文件都具有如下权限root
root
Executable
Other
/bin
/sbin
-rwxr-xr-x
那么,真正决定用户是否需要具有 root 权限才能执行某些操作的因素是什么呢?
答案1
有时,它就在代码中。例如,在 的中间hwclock.c
,你会发现:
if (getuid() == 0)
permitted = TRUE;
else {
/* program is designed to run setuid (in some situations) */
if (set || systohc || adjust) {
warnx(_("Sorry, only the superuser can change "
"the Hardware Clock."));
[...]
无论您是否是root用户,这都会改变程序的行为。
在大多数其他情况下,它是隐式的;委托给内核。例如,如果程序调用系统调用允许您重新启动系统,但只有您是 root 时它才会起作用。如果您不是 root,您将收到“权限被拒绝”错误,应用程序(如果编写良好)只会向您报告该错误。或者您正在尝试删除文件;如果您对文件有正确的权限,它将成功;如果没有,则取决于您是否是 root --- 当rm
调用unlink()
内核将检查权限。
因此,原则上,您不能仅通过查看可执行文件的权限来判断程序是否需要 root 权限。许多程序仅在某些操作中才需要它们,因此这样做确实很困难。这种情况就是hwclock
其中一种(任何人都可以读取时钟,但只有 root 可以设置它),但还有数百种(,,kill
... )rm
cat
然后还有相关而有趣的世界设置用户标识程式...