是什么决定了哪些Linux命令需要root访问权限?


23

是什么决定了哪些Linux命令需要root访问权限?我理解为什么apt-get需要root特权的理由。但是这些命令与其他命令有何区别?这仅仅是可执行文件的所有权和执行权限的问题吗?


2
这主要取决于他们触摸什么文件以及他们调用什么功能。
Federico klez Culloca

9
某些应用程序需要访问由root拥有的文件/目录。因此,他们只是打电话open获得“权限被拒绝”。getuid如果不是由root调用,则某些应用程序会检查并停止运行。有些是由root物理拥有的,只有所有者可以执行它们(请参阅参考资料chmod)。如果您询问应用程序标题中是否有“需要根”标记-答案是否定的。没有这样的东西afaik
user996142

1
ps:几个系统调用(例如绑定到<1024的知名端口)可能也需要root用户访问权限。
user996142

apt-get根本不需要root。它在/ usr / bin目录中,请参阅askubuntu.com/a/440791/169736
Braiam

您可能会在这里弄清楚“需要”的含义。您是说除非您是root用户(或具有sudo权限),否则该程序将不会执行,或者它需要是root用户才能正常执行其工作?
jamesqf

Answers:


15

在linux中,root的特权在某一时刻被分为“功能”,因此您可以通过查看该文档来获得root的特殊特权的完整列表man 7 capabilities

为了回答您的问题,命令在需要这些特权之一时将需要以root用户身份运行,并且其非脚本可执行文件的文件元数据中未设置相关功能(例如,如果python脚本需要该功能,则该功能将需要在shebang行中指定的python解释器中)。

请注意,某些需要root访问权限的命令不需要类似的命令,sudo因为它们的可执行文件中设置了SUID位。当具有执行访问权限的任何人执行该位时,该位将使可执行文件以所有者(通常是根)的身份运行。一个例子sudo本身就是更改用户是它需要执行的特权操作。

编辑:我从您的问题中注意到,您可能有一个想法,即可以确定命令在运行之前是否需要root用户访问权限。事实并非如此。程序有时可能需要root特权,而有时则不需要root特权,这可能是由于程序在运行时提供的数据而由程序做出的决定。例如,调用vim,就像没有参数一样,然后通过一系列按键和粘贴,告诉它将没有权限的文件写入文件,或者执行另一个本身需要root特权的命令。在执行之前,有关该命令的任何内容都无法表明它最终将需要root访问。那只能在它试图做需要它的事情时才能确定。

无论如何,以下是参考手册中有关root特权的很少几个示例:

  • 对进程UID(setuid(2),setreuid(2),setresuid(2),setfsuid(2))进行任意操作;
  • 绕过文件读取,写入和执行权限检查。(DAC是“自由访问控制”的缩写。)
  • 绕过许可检查以发送信号(请参阅kill(2))。这包括使用ioctl(2)KDSIGACCEPT操作。
  • 执行各种与网络相关的操作:
    • 接口配置;
    • IP防火墙的管理,伪装和计费;
    • 修改路由表;
  • 将套接字绑定到Internet域特权端口(端口号小于1024)。
  • 加载和卸载内核模块(请参阅init_module(2)和delete_module(2));
  • 设置系统时钟(settimeofday(2),stime(2),adjtimex(2)); 设置实时(硬件)时钟。
  • 执行一系列系统管理操作,包括:quotactl(2),mount(2),umount(2),swapon(2),swapoff(2),sethostname(2)和setdomainname(2);
  • 使用reboot(2)和kexec_load(2)。
  • 使用chroot(2)。
  • 提高进程的nice值(nice(2),setpriority(2))并为任意进程更改nice值;

32

这主要取决于工具或程序的功能。请记住,非超级用户只能触摸其拥有或有权访问的文件,因此任何需要能够深入了解所有内容的工具都需要超级用户访问权限才能执行其操作。可能需要超级用户访问权限的事物的快速样本包括但不限于:

  • 在低于1024的端口上打开侦听TCP套接字
  • 更改系统配置(例如中的任何内容/etc
  • 添加新的可全局访问的库(/lib/usr/lib)或二进制文件(/bin/usr/bin
  • 触摸正在进行触摸的用户不拥有的,没有足够许可模式的任何文件
  • 更改其他用户的文件所有权
  • 加快流程优先级(例如renice
  • 启动或停止大多数服务
  • 内核配置(例如,调整交换性)
  • 调整文件系统配额
  • 写入“完整”磁盘(大多数文件系统为root用户保留一些空间)
  • 与其他用户一样执行操作

4
非root用户可以“更改流程优先级”,从而变得更漂亮。他们唯一不能做的就是变得不那么友善。
布里亚姆'18

1
我知道此列表并不完整,但是我觉得只有超级用户才能完成的一个非常重要的任务是模拟(或简单地其他用户身份登录)。
phihag

我已经调整了有关流程优先级的要点,并添加了“以其他用户身份执行操作”。希望有足够的时间和评论,此列表将变得更加全面。
DopeGhoti

0

我认为这是根据用户的身份来验证权限,而不是根据顺序来划分权限。文件和用户具有特权,不应分割命令。


3
我并不是说听起来很粗鲁,我知道英语可能不是您的母语,但是我根本听不懂这个答案,就像它想说的那样。“协议”是指“协议”或“符合性”;我看不到它如何与“用户身份”一起使用。您是什么意思“命令划分权限”?“分开”是指“分开”。谁的“命令”?当文件不是可以使用任何特权的文件时,它们如何被“特权”?我想我可以在这个问题的背景下理解“命令不应该被分割”,仅此而已。实际上,这似乎是不可解析的。
JoL

@JoL我认为“命令”是一个错误的翻译,应该是“命令”,它允许对该句子进行不同的解析。措词有点尴尬,要尽可能多地使用此答案中的内容:“我认为这取决于用户身份用于验证权限的方式,权限不会根据命令进行拆分。权限是关于文件和用户的,应该存在不分命令。” 这仍然不太清楚,但是对我来说,它比对您有意义。我希望我的评论可以帮助某人完全理解该答案并将其编辑成形状
播出
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.