您怎么知道执行程序是否需要root用户?


10

我知道这是一个基本问题,可能是一个愚蠢的问题,但我一直无法找到答案。

我知道每个文件都"Executable"有点。

我认为需要的程序root是由拥有,root用户和root组不会有Executable对位Other,并且将防止非root用户执行这些。但是在/bin/sbin目录中,我看到所有文件都具有如下权限:-rwxr-xr-x

那么,什么真正决定了用户是否需要拥有root权限才能执行某些操作?


1
默认情况下,您或任何用户都可以从/bin/sbin目录执行任何程序。问题在于某些程序运行的不同,具体取决于哪个用户运行它们。
RaduRădeanu2014年

Answers:


13

有时,它在代码中。例如,在中途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可以设置),但也有数百人(killrmcat...)

然后是setuid程序的相关且有趣的世界...


因此,基本上内核由“负责”吗?如果程序进行系统调用,则内核会确定运行该程序的用户是否必须是root用户并强制执行该操作?
教务长

2
基本上是。该程序可以进行其他测试,但是权限检查在内核级别。Setuid根程序是一个例外。它们始终以root用户身份运行,因此他们需要自己检查权限(并且是安全漏洞的一种很好的字体...)
Rmano 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.