Brian Dobby Asked: 2018-05-12 06:23:16 +0800 CST2018-05-12 06:23:16 +0800 CST 2018-05-12 06:23:16 +0800 CST 什么决定了哪些 Linux 命令需要 root 访问权限? 772 什么决定了哪些 Linux 命令需要 root 访问权限?我理解为什么它是可取的,比如说,apt-get应该要求root特权;但是这些命令与其他命令有何区别?这仅仅是可执行文件的所有权和执行权限的问题吗? linux root 3 个回答 Voted DopeGhoti 2018-05-12T06:40:49+08:002018-05-12T06:40:49+08:00 这主要是工具或程序做什么的问题。请记住,非超级用户只能触摸它拥有或有权访问的文件,任何需要能够深入了解所有内容的工具都需要超级用户访问才能执行它所做的事情。可能需要超级用户访问权限的快速示例包括但不限于: 在低于 1024 的端口上打开侦听 TCP 套接字 更改系统配置(例如 中的任何内容/etc) 添加新的全局可访问的库 ( /liband /usr/lib) 或二进制文件 ( /bin, /usr/bin) 触摸任何不属于进行触摸的用户所有且没有足够许可模式的文件 更改其他用户文件的所有权 提升流程优先级(例如renice) 启动或停止大多数服务 内核配置(例如调整swappiness) 调整文件系统配额 写入“完整”磁盘(大多数文件系统为 root 用户保留一些空间) 以其他用户的身份执行操作 Best Answer JoL 2018-05-12T09:54:48+08:002018-05-12T09:54:48+08:00 在 linux 中,root 的特权在某一时刻被划分为“功能”,因此您可以通过查看该文档来获得 root 特权的完整列表:man 7 capabilities. 要回答您的问题,当命令需要这些权限之一时,它需要以 root 身份运行,并且它的非脚本可执行文件没有在其文件元数据中设置相关功能(例如,如果 python 脚本需要该功能,那么该功能需要在shebang行中指定的python解释器中)。 请注意,一些需要 root 访问权限的命令不需要类似的东西,sudo因为它们在其可执行文件中设置了 SUID 位。当任何具有执行访问权限的人执行时,该位会导致可执行文件以所有者(通常是 root)身份运行。一个例子就是sudo它本身,因为更改用户是它需要执行的特权操作。 编辑:我从您的问题中注意到,您可能有这样的想法,即您可以确定命令在运行之前是否需要 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值; Aldridge 2018-05-12T18:30:13+08:002018-05-12T18:30:13+08:00 我认为是按照用户的身份来验证权限,而不是按照顺序来划分权限。文件和用户具有特权,不应划分命令。
这主要是工具或程序做什么的问题。请记住,非超级用户只能触摸它拥有或有权访问的文件,任何需要能够深入了解所有内容的工具都需要超级用户访问才能执行它所做的事情。可能需要超级用户访问权限的快速示例包括但不限于:
/etc
)/lib
and/usr/lib
) 或二进制文件 (/bin
,/usr/bin
)renice
)在 linux 中,root 的特权在某一时刻被划分为“功能”,因此您可以通过查看该文档来获得 root 特权的完整列表:
man 7 capabilities
.要回答您的问题,当命令需要这些权限之一时,它需要以 root 身份运行,并且它的非脚本可执行文件没有在其文件元数据中设置相关功能(例如,如果 python 脚本需要该功能,那么该功能需要在shebang行中指定的python解释器中)。
请注意,一些需要 root 访问权限的命令不需要类似的东西,
sudo
因为它们在其可执行文件中设置了 SUID 位。当任何具有执行访问权限的人执行时,该位会导致可执行文件以所有者(通常是 root)身份运行。一个例子就是sudo
它本身,因为更改用户是它需要执行的特权操作。编辑:我从您的问题中注意到,您可能有这样的想法,即您可以确定命令在运行之前是否需要 root 访问权限。事实并非如此。程序有时可能需要 root 权限,有时则不需要,这可能是程序根据运行时提供的数据做出的决定。例如,调用
vim
,就像不带参数的那样,然后通过一系列按键和粘贴,告诉它向它没有写入权限的文件写入一些东西,或者执行另一个本身需要 root 权限的命令。该命令在执行之前没有任何信息表明它最终需要 root 访问权限。这只能在它试图做一些需要它的事情时才能确定。无论如何,这里是来自 root 权限的参考手册页中的极少数示例:
我认为是按照用户的身份来验证权限,而不是按照顺序来划分权限。文件和用户具有特权,不应划分命令。