当前位置: 首页 > 编程笔记 >

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

颜德馨
2023-03-14
本文向大家介绍Linux系统中掩耳盗铃的sudo配置,包括了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可执行文件就存在权限所属的问题,最终提权成功了,不过这种方法还是不鼓励大家去做哈,如果在生产系统中发现有这样的问题,应该及时更新修复,避免由于权限泄漏导致的更多问题。

 类似资料:
  • 本文向大家介绍linux系统的初始化配置浅析,包括了linux系统的初始化配置浅析的使用技巧和注意事项,需要的朋友参考一下 一.网络的初始化   1.ip地址的修改(临时生效)   使用ifconfig命令   ifconfig 网卡名 ip地址 子网掩码   1.ip地址的修改(永久生效)   修改/etc/sysconfig/network-scripts 目录下的网卡文件 二.主机名的修改

  • 本文向大家介绍linux系统下的时间配置综述,包括了linux系统下的时间配置综述的使用技巧和注意事项,需要的朋友参考一下 一.时间类型分为: 1.网络时间(设置时区,ntp服务器同步的时间) 2.系统时间,当前系统所显示的时间 3.硬件(RTC)时间,主板上面Bios的时间 一般设置为:系统时间与网络时间同步,系统时间写入硬件时间。 二.时间的查看方式: 1.查看硬件时间 2.查看系统时间 3.

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的

  • 其实每个系统都是用 title 字段来表示的,如果在服务器中又多了一个 Windows 系统,那么在 GRUB 的配置文件中只不过就是多了一个 title 字段而已。 不过要注意,我们一般建议先安装 Windows 系统,后安装 Linux 系统。 原因是 Windows 系统的启动引导程序无法把启动过程转交到 Linux 系统的 GRUB 中,自然就不能启动 Linux 系统了。如果我们后安装

  • 2.2.Linux 系统 Android 是基于 Linux 系统构建的。 Linux 是一个伟大的操作系统,也是一个经典的开源项目。选择 Linux 作为 Andoird 系统基础的原因有很多,而最主要的因素,在于它的可移植性、安全性以及丰富的特性。

  • 本文向大家介绍linux系统下的ssh登录和配置方法,包括了linux系统下的ssh登录和配置方法的使用技巧和注意事项,需要的朋友参考一下 一 ssh的两种登录方式 1密码登录: 2公钥密钥登录 客户端连接服务器时候会生成.ssh目录,此时保证客户端下生成.ssh目录 第一步服务器端生成公钥和密钥 查看.ssh文件下的内容; 第二步:服务器添加认证 第四步:服务器分发私钥给客户端 完成之后就可以让