你怎么知道执行程序是否需要root?
我知道这有点基础,也许是一个愚蠢的问题,但我一直无法找到答案。
我知道每个文件都有"Executable"
位。
我假设root
用户和root
用户所拥有的需要root
程序将不具有Other
的Executable
位,这将阻止非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可以设置它),但有数百个( kill
, rm
, cat
……)
然后是相关且有趣的setuid程序世界……