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

相关文章

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列