你怎么知道执行一个程序是否需要root?

Dea*_*ean 10 permissions root

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

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

我假设需要的程序,rootroot用户和root组拥有的不会有Executable位 forOther并且会阻止非 root 用户执行这些。但是在/bin/sbin目录中,我看到所有文件都具有类似的权限-rwxr-xr-x

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

Rma*_*ano 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."));
[...]
Run Code Online (Sandbox Code Playgroud)

无论您是否是 root,这都会改变程序的行为。

在大多数其他情况下,它是隐式的;委托给内核。例如,如果程序调用让您重新启动系统的系统调用,则它只有在您是 root 时才能工作。如果您不是 root,您将有一个“权限被拒绝”错误,应用程序(如果编写得很好)只是向您报告。或者您正在尝试删除文件;如果您对该文件有正确的权限,它就会成功;如果不是,则取决于您是否是 root 用户 ---rm调用时unlink()内核会检查权限。

所以不,原则上你不能说只查看可执行文件的权限,如果程序需要 root 权限。很多程序只会在某些操作中需要它们,所以做这样的事情真的很困难。的情况hwclock是一个(任何人都可以读取时钟,但只有 root 可以设置它),但有数百个(kill, rm, cat... )

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

  • 基本上,是的。该程序*可以*进行额外的测试,但权限检查是在内核级别进行的。Setuid-root 程序是个例外;他们总是以 root 身份运行,所以他们需要自己检查权限(并且是一种很好的安全漏洞字体......) (2认同)