Linux系统中掩耳盗铃的sudo配置

简介:

 今天在这里讨论Linux系统中一个非常滑稽的系统配置失误,就是sudo,为什么说是滑稽的配置呢,就是因为如果配置不当的话,普通用户非常容易就可以提权到root用户,而且没有一点技术含量,系统管理员自己以为已经做好了权限管理,其实如果配置不当,权限漏洞已经出现。

  很多公司Linux系统都会用到sudo来配置普通用户可以执行的超级用户权限,一是为了系统管理员更安全的操作系统,二是可以为研发人员提供可控的权限范围,下面就看一下我们在系统中常见的sudo配置文件。

admin ALL=(ALL) NOPASSWD: /app/nginx/sbin/nginx

  这一段配置文件显示admin用户可以通过sudo来调用root权限启动nginx,相信这也是经常使用sudo的功能之一,因为如果nginx启动的是80端口的话,普通用户是无法启动的,因为系统限制了1024以下的端口监听只有root权限才可以操作,问题大多出现在这个sbin目录下的nginx可执行文件上,因为我们既然要将nginx的管理权限交付给普通用户admin,那么大部分情况是nginx的所有文件权限所属用户及组也都为admin,就像下面显示的这样。

[admin@localhost sbin]$ ll
总用量 3004-rwxr-xr-x 1 admin admin 3066035 9月  10 2014 nginx

  但是如果sbin目录下的nginx文件权限也为admin用户,而此时该文件还在sudo权限配置中,那么问题就来了,admin用户可以将系统任意命令copy过来变成nginx文件,到这里大家应该知道潜在的风险是有多大了,只要是任何命令文件admin用户有只读权限,那么就可以把文件变成nginx,随意以root身份执行该命令,因为sudo只关心执行的文件名,而不关心文件内容本身,如果此时admin用户需要提权到root用户下也很简单,只要将系统的vi命令copy到sbin目录下并重命名为nginx,当文件替换后,此时的nginx文件就变成了系统的vi命令,如果admin用户此时运行sudo nginx时就是以root用户的权限来执行vi动作了,例如用户执行sudo nginx /etc/sudoers,他就可以用root身份来编辑这个文件,从而给自己开放一个NO PASSWORD ALL的权限,只要保存sudo配置文件,执行sudo su -就可以轻松切换到root权限中来了,而后再将被替换的nginx文件复原,此时用root权限就可以轻松留下系统后门,同时再清空操作记录,完成整个操作而不留痕迹,下面来总结一下admin提权需要的几步操作。

[admin@localhost ~]$ sudo -l用户 admin 可以在该主机上运行以下命令:
    (ALL) NOPASSWD: /app/nginx/sbin/nginx
[admin@localhost ~]$ which vi
/bin/vi
[admin@localhost ~]$ cp /bin/vi /app/nginx/sbin/nginx
[admin@localhost ~]$ sudo /app/nginx/sbin/nginx /etc/sudoers   //注意此时已经是调用root权限vi编辑sudoers文件了
[admin@localhost ~]$ sudo -l用户 admin 可以在该主机上运行以下命令:
    (ALL) NOPASSWD: ALL
[admin@localhost ~]$ sudo su - root
[root@localhost ~]#   //用户成功切换到root权限

  避免这样的问题发生其实也很简单,就是将我们需要执行的文件所属权限都改为root即可,这样普通用户就没有办法用copy的方法来改写这个文件,因为他对于该文件已经没有操作权限了,从而也就规避了这种提权风险。

  最后提一下发现这个配置问题的过程,在很早刚开始负责运维工作时,那个时候还是在一家传统互联网企业,甲方对于权限的控制非常严格,对于系统操作人员只提供普通用户权限,如果普通用户需要操作apache或者是nginx等就需要配置sudo,由于申请root权限的流程非常繁琐,在一次非常紧急的系统故障处理中就发现了这个方法,而当时的sudo可执行文件就存在权限所属的问题,最终提权成功了,不过这种方法还是不鼓励大家去做哈,如果在生产系统中发现有这样的问题,应该及时更新修复,避免由于权限泄漏导致的更多问题。

原创文章首发自阿布的博客,本文地址:http://www.abuve.com/article/16



     本文转自阿布ve 51CTO博客,原文链接:http://blog.51cto.com/abuve/1695199,如需转载请自行联系原作者





相关文章
|
9天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
36 3
|
9天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
26 2
|
3天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
11 3
|
11天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
38 9
|
9天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
31 3
|
12天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
30 6
|
12天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
41 6
|
13天前
|
机器学习/深度学习 自然语言处理 Linux
Linux 中的机器学习:Whisper——自动语音识别系统
本文介绍了先进的自动语音识别系统 Whisper 在 Linux 环境中的应用。Whisper 基于深度学习和神经网络技术,支持多语言识别,具有高准确性和实时处理能力。文章详细讲解了在 Linux 中安装、配置和使用 Whisper 的步骤,以及其在语音助手、语音识别软件等领域的应用场景。
43 5
|
13天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
13天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####