作为sudo的符号链接,sudoedit为何会表现出不同的运行行为?
sudoedit 作为sudo的软链接却行为不同的原因与实现原理
类Unix系统下,进程启动时会收到父进程传入的argv[0]参数,这个参数记录的是用户调用程序时输入的命令名称,而非二进制文件的真实存储路径。大量单二进制支撑多命令的工具,都是靠判断这个参数值切换默认运行模式,不需要额外写包装脚本。
sudo程序启动后的第一步就会校验argv[0]的值:如果识别到调用命令名为sudoedit,就会自动启用等价于sudo -e的文件编辑模式,不需要用户手动传入-e参数。你查到的软链接属性:
lrwxrwxrwx 1 root root 4 Jun 22 04:49 sudoedit -> sudo
就是这种设计的典型实现,和BusyBox靠一个二进制加一堆对应软链接提供上百个系统工具的逻辑完全一致,既减少了重复的二进制文件占用,也方便后续版本统一维护升级。
sudoedit 编辑模式的具体运行逻辑
它和sudo 编辑器名 目标文件这种直接提权运行编辑器的模式有本质区别,全程不会给编辑器本身授予root权限,这也是它能加载你个人编辑器配置的核心原因,运行流程如下:
- 首先sudo校验当前用户是否有对应文件的编辑权限,校验通过后,在
/tmp类临时目录下创建目标文件的临时副本,副本归属为当前普通用户 - 以当前普通用户身份,加载当前用户的所有shell环境变量、编辑器配置(包括你自定义的快捷键、主题、插件等),启动
$VISUAL或$EDITOR环境变量指定的编辑器打开临时副本,这一阶段编辑器进程完全没有root权限 - 等你完成编辑退出编辑器后,sudo才会临时提权,把临时副本的内容原子性覆盖回原目标文件,同时保留原文件的权限、属主属性
这种设计除了能保留用户的编辑器使用习惯,还能避免直接提权运行编辑器带来的安全风险——比如编辑器内执行shell命令、恶意插件借root权限执行高危操作的问题。
内容的提问来源于stack exchange,提问作者huibosa
相关产品推荐
相关产品推荐

