sudo中sudo怎么防止研发人员通过sudo vi等命令利用内置Shell逃逸漏洞逆向提权

舞夢輝影

舞夢輝影

2026-07-28

657人浏览

原创

应使用 sudoedit 替代 sudo vi,因其以普通用户身份编辑临时文件,保存后由 sudo 以 root 覆盖原文件,全程无 root shell;需在 /etc/sudoers 中授权 sudoedit、禁用 vi/vim 等高危命令,并启用 noexec、日志审计等加固措施。

sudo中sudo怎么防止研发人员通过sudo vi等命令利用内置shell逃逸漏洞逆向提权

防止研发人员通过 sudo vi 等命令利用编辑器内置 shell 功能(如 :!sh:set shell=/bin/sh)逃逸提权,核心不是禁止 vi,而是切断 root 权限下编辑器执行任意命令的能力。关键在于让编辑行为始终运行在非特权上下文中,同时阻断所有已知逃逸路径。

用 sudoedit 替代 sudo vi

sudo vi /etc/hosts 是高危操作:vi 以 root 身份运行,:! 可直接 spawn root shell,绕过 sudo 命令白名单。
sudoedit /etc/hosts 安全得多:它由 sudo 复制文件到临时目录(权限 0600),再以普通用户身份调用 $EDITOR 编辑,保存后 sudo 才以 root 覆盖原文件——全程无 root shell、无交互式命令执行能力。

  • ✅ 在 /etc/sudoers 中统一授权 sudoedit,禁用 sudo vi
    devteam ALL=(root) NOPASSWD: sudoedit /etc/nginx/*.conf, sudoedit /etc/systemd/system/*.service
  • ✅ 强制指定安全编辑器(避免用户设 EDITOR=vim 后启用危险插件):
    devteam ALL=(root) EDITOR=/usr/bin/nano sudoedit /etc/hosts
  • ✅ 检查当前可用权限:sudo -l -U devuser,确认输出中不含 vivimnano --help 等可滥用命令。

对编辑器本身做运行时限制

即使用了 sudoedit,若用户编辑器配置不当(如 vim 中 set shell=/bin/bash),仍可能带来风险。需从系统层面加固:

  • /etc/sudoers 中为编辑器启用 NOEXEC(需 vim 编译支持):

    devteam ALL=(root) NOEXEC: /usr/bin/vim.basic /etc/nginx/*.conf

    这会禁用 :!:shell 等子进程调用功能(但不阻止 :w !sudo tee % 类间接逃逸,故仍推荐优先用 sudoedit)。

  • 生产环境禁用完整版 vim,改用精简版:

    # Debian/Ubuntu
    apt-get install vim-tiny && update-alternatives --config editor

    vim.tiny 默认不编译 +job+terminal 特性,天然无法执行外部命令。

封堵其他编辑器类逃逸入口

less、nano、man、git 等工具同样支持 shell 调用:

一糖导航
一糖导航

一糖导航丨实用的上网导航资源网址导航

下载
  • less 中按 !shman 中按 !bashgitgit help !sh 都可能触发提权。
    解决方案是全局禁用交互式 shell 启动:
    Defaults    requiretty
    Defaults    env_delete += "SHELL PATH LD_PRELOAD"
    Defaults    !env_reset

    并显式拒绝高危命令:

    Cmnd_Alias EDITOR_ESCAPES = \
      /bin/sh, /bin/bash, /usr/bin/python3 -c *, \
      /usr/bin/less *, /usr/bin/man *, /usr/bin/git help *
    %devteam ALL=(ALL) !EDITOR_ESCAPES

日志与审计必须跟上

没有记录的防护等于没防护:

  • 启用输入输出日志:

    Defaults log_input, log_output
    Defaults iolog_dir=/var/log/sudo-io

    所有 sudoedit 的文件读写、命令执行都会被录制,便于回溯是否有人尝试 :r !id:w !curl ...

  • 每周运行一次检查:

    sudo -l -U devuser | grep -E "(vi|vim|less|nano|git)"

    发现未授权的编辑器路径立即清理。

不复杂但容易忽略。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

2669

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

1647

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

1293

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

2632

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

2393

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

1638

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

1229

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

1399

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

209

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习