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

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

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

我假设root用户和root用户所拥有的需要root程序将不具有OtherExecutable位,这将阻止非root用户执行这些操作。 但是在/bin/sbin目录中,我看到所有文件都具有-rwxr-xr-x等权限

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

有时,它在代码中。 例如,在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程序世界……