sudo 权限之危险的 bash 命令

2024-06-23 18:04
文章标签 命令 权限 bash 危险 sudo

本文主要是介绍sudo 权限之危险的 bash 命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
    • 事出有因
    • 干就完事了
      • 创建用户
      • 配置 sudo 权限
      • sudo 验证
        • 使用 bash 命令执行 chmod 命令
        • 使用 bash 命令执行删根

事出有因

使用普通用户安装 tidb 时,发现报错了,报错内容如下:

ERROR   SSHCommand      {"host": "172.17.133.182", "port": "22", "cmd": "export LANG=C; PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin; /usr/bin/sudo -H bash -c \"uname -m\"", "error": "Process exited with status 1", "stdout": "", "stderr": "We trust you have received the usual lecture from the local System\nAdministrator. It usually boils down to these three things:\n    #1) Respect the privacy of others.\n    #2) Think before you type.\n    #3) With great power comes great responsibility.\nsudo: no tty present and no askpass program specified\n"}

发现,tidb 在自动安装时,会用到 sudo bash 命令,当前环境只开放了指定的命令,不包含 bash 命令,导致 tidb 在创建集群的时候报错了,于是,临时修改了 sudo 的权限配置,增加了 bash 命令的权限,于是乎,引发了思考,是不是给了 bash 的 sudo 权限,有这个命令权限的用户也能删根跑路了?

干就完事了

为了图方便,我这边直接用 docker 的方式来验证,这个 docker 镜像并没有挂载任何目录,下面是 dockerfile,我需要安装一下 sudo 命令和一些方便自己习惯的工具,顺便拿 rockylinux 玩一玩

FROM rockylinux:8.9ENV PS1='\[\e[7;34m\]\u@\h\[\e[0m\]\[\e[0;35m\]:$(pwd) \[\e[0m\]\[\e[0;35m\]\t\[\e[0m\]\n\[\e[0;32m\]> \[\e[0m\]'
ENV LANG=en_US.UTF-8RUN yum install -y sudo vim && yum clean all && \echo '/usr/bin/sleep 315360000' > start.sh && \chmod +x start.shCMD ["/usr/bin/bash","start.sh"]

构建镜像

sudo docker build -t rockylinux:test-sudo .

镜像放后台启用

sudo docker run -d --name sudotest rockylinux:test-sudo

进入容器

sudo docker exec -it sudotest bash

创建用户

模拟一下,名字不重要

useradd testsudo

配置 sudo 权限

可以看到,这里我只给了一个 bash 命令的权限,看看后面可以有多么的无法无天

cat << EOF > /etc/sudoers.d/testbash
User_Alias SUDOMAN = testsudo
Cmnd_Alias SYSTEM = /usr/bin/bash
Defaults    log_host, log_year, logfile = /root/.sudo_sudoman.log
SUDOMAN ALL=(ALL) NOPASSWD: SYSTEM
EOF

给文件变个权限,等会先拿这个文件赋权来验证

chmod 400 /etc/sudoers.d/testbash

可以确认一下是不是修改成功了

ls -l /etc/sudoers.d/

那当然必须成功

-r-------- 1 root root 165 Jun 23 07:58 testbash

sudo 验证

先切换到前面创建的 testsudo 用户

su - testsudo
使用 bash 命令执行 chmod 命令

前面,我们使用 root 用户把 /etc/sudoers.d/testbash 这个文件的权限改成 400,现在我们用 sudo bash 命令改回来

sudo bash -c "chmod 644 /etc/sudoers.d/testbash"

验证一下结果(因为咱们只给了 bash 命令,所以直接执行 ls -l /etc/sudoers.d/命令就会返回 Permission denied

sudo bash -c "ls -l /etc/sudoers.d/"

可以看到,权限被改成 644 了

-rw-r--r-- 1 root root 165 Jun 23 07:58 testbash

在这里插入图片描述

使用 bash 命令执行删根

家人们,这一步是在容器环境执行的,只是为了告诉大家风险有多高,别去生产玩,会去提篮桥的

  • 保险起见,我拆解解释一下 rm -rf /* 这个命令的含义,不要成为张三(法外狂徒)
    • rm 是 linux 删除文件的命令,类似于 windows 的 delete 键和删除这个选项(不过 windows 有回收站,删了还能找回,linux 就没有这么幸运了,回收站需要自己创建,可以看我之前的博客:linux 大工程 - 我要一个属于自己的回收站)
    • -r 是 rm 命令的参数,用户删除目录和目录下的所有内容
    • -f 是 rm 命令的参数,表示不需要用户同意,直接删除,类似于 windows 的 shift + delete 组合键,就不会进入回收站了(linux 如果按照上面的方法创建了回收站,还是会进入到回收站的,除非使用绝对路径的 rm 命令去删除的)
    • / 是 linux 的根目录,也是所有目录和文件的起始目录,只要根删的够快,牢房就吃的越快
    • * 是 linux 中的通配符,表示匹配所有,当然,这个命令下,这个通配符加不加都是一样的结果
sudo bash -c "rm -rf /*"

然后就会看到一堆的刷屏,就问你刺不刺激

在这里插入图片描述

愿大家都不会误删根目录,另外 tidb 你太狠了,普通用户创建完之后,直接给 tidb 用户加了所有命令的 sudo 免密配置,这真的不危险吗???

这篇关于sudo 权限之危险的 bash 命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1087875

相关文章

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs

交换机救命命令手册! 思科交换机排障命令汇总指南

《交换机救命命令手册!思科交换机排障命令汇总指南》在交换机配置与故障排查过程中,总会遇到那些“关键时刻靠得住的命令”,今天我们就来分享一份思科双实战命令手册... 目录1. 基础系统诊断2. 接口与链路诊断3. L2切换排障4. L3路由与转发5. 高级调试与日志6. 性能与QoS7. 安全与DHCP8.

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订