是什么决定了哪些Linux命令需要root访问权限?我理解为什么apt-get
需要root
特权的理由。但是这些命令与其他命令有何区别?这仅仅是可执行文件的所有权和执行权限的问题吗?
open
获得“权限被拒绝”。getuid
如果不是由root调用,则某些应用程序会检查并停止运行。有些是由root物理拥有的,只有所有者可以执行它们(请参阅参考资料chmod
)。如果您询问应用程序标题中是否有“需要根”标记-答案是否定的。没有这样的东西afaik
是什么决定了哪些Linux命令需要root访问权限?我理解为什么apt-get
需要root
特权的理由。但是这些命令与其他命令有何区别?这仅仅是可执行文件的所有权和执行权限的问题吗?
open
获得“权限被拒绝”。getuid
如果不是由root调用,则某些应用程序会检查并停止运行。有些是由root物理拥有的,只有所有者可以执行它们(请参阅参考资料chmod
)。如果您询问应用程序标题中是否有“需要根”标记-答案是否定的。没有这样的东西afaik
Answers:
在linux中,root的特权在某一时刻被分为“功能”,因此您可以通过查看该文档来获得root的特殊特权的完整列表man 7 capabilities
。
为了回答您的问题,命令在需要这些特权之一时将需要以root用户身份运行,并且其非脚本可执行文件的文件元数据中未设置相关功能(例如,如果python脚本需要该功能,则该功能将需要在shebang行中指定的python解释器中)。
请注意,某些需要root访问权限的命令不需要类似的命令,sudo
因为它们的可执行文件中设置了SUID位。当具有执行访问权限的任何人执行该位时,该位将使可执行文件以所有者(通常是根)的身份运行。一个例子sudo
本身就是更改用户是它需要执行的特权操作。
编辑:我从您的问题中注意到,您可能有一个想法,即可以确定命令在运行之前是否需要root用户访问权限。事实并非如此。程序有时可能需要root特权,而有时则不需要root特权,这可能是由于程序在运行时提供的数据而由程序做出的决定。例如,调用vim
,就像没有参数一样,然后通过一系列按键和粘贴,告诉它将没有权限的文件写入文件,或者执行另一个本身需要root特权的命令。在执行之前,有关该命令的任何内容都无法表明它最终将需要root访问。那只能在它试图做需要它的事情时才能确定。
无论如何,以下是参考手册中有关root特权的很少几个示例:
这主要取决于工具或程序的功能。请记住,非超级用户只能触摸其拥有或有权访问的文件,因此任何需要能够深入了解所有内容的工具都需要超级用户访问权限才能执行其操作。可能需要超级用户访问权限的事物的快速样本包括但不限于:
/etc
)/lib
和/usr/lib
)或二进制文件(/bin
,/usr/bin
)renice
)我认为这是根据用户的身份来验证权限,而不是根据顺序来划分权限。文件和用户具有特权,不应分割命令。