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

相关文章

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]