如何知道执行某个程序是否需要 root 权限?

如何知道执行某个程序是否需要 root 权限?

我知道这个问题有点基础,甚至可能有点愚蠢,但我一直没能找到答案。

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

我假设需要 的程序,这些程序由用户和组root拥有,不会有和 的位,这将阻止非 root 用户执行这些程序。但在和目录中,我看到所有文件都具有如下权限rootrootExecutableOther/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... )rmcat

然后还有相关而有趣的世界设置用户标识程式...

相关内容