Ubuntu 18.04下普通用户的一次提权过程

2024-06-16 00:12

本文主要是介绍Ubuntu 18.04下普通用户的一次提权过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Ubuntu 18.04下普通用户的一次提权过程

  • 一.背景介绍:
  • 二.主要调试过程:
  • 三.相关命令:
    • 1.设置BMC密码,获取BMC IP
    • 2.找一台ubuntu搭建TFTP服务,用来替换grub.cfg文件
    • 3.从调试服务器的/boot/grub/grub.cfg中提取出recovery mode的配置,简化并生成新的配置文件grub.cfg,放在tftp服务的目录下/srv/tftp/grub.cfg
    • 4.UEFI Shell中操作步骤
  • 四.截图

本文介绍了Ubuntu 18.04下普通用户的一次提权过程

一.背景介绍:

  • 1.OS为Ubuntu 18.04.6 LTS
  • 2.docker服务非开机自启动,需要管理员手动启动(之前并不知道)
  • 3.重启后,数据盘也需要管理员手动挂载(之前并不知道)
  • 4.目前给我的帐号为普通用户
  • 5.我需要测试关掉IOMMU的效果,得进BIOS设置,服务器在远程,又遇到周末没人支持
  • 6.万幸我的帐号有–privileged启动容器的权限

二.主要调试过程:

  • 1.以–privileged创建容器,安装ipmitool,设置BMC密码(不需要知道原始密码也能设置)
  • 2.通过BMC的控制台进入BIOS设置,关掉IOMMU,重启服务器
  • 3.进入OS发现docker服务没有启动,我又没有root权限,仅有BMC的权限
  • 4.通过BMC的控制台,重启服务器,发现选择不了ubuntu的启动项,不能借此进入恢复模式
  • 5.再次通过BMC的控制台,重启服务器,按F11,选择UEFI Shell
  • 6.在UEFI Shell中,备份grub.cfg,修改grub.cfg文件(设置为恢复模式)
    执行grubx64.efi,进入恢复模式,将我的用户名加入/etc/sudoers
    恢复grub.cfg,重启OS,我的帐号即可享有root权限

三.相关命令:

1.设置BMC密码,获取BMC IP

docker run --gpus all --shm-size=32g -ti -e NVIDIA_VISIBLE_DEVICES=all \--privileged --net=host --rm nvcr.io/nvidia/pytorch:23.07-py3 /bin/bash# 1.安装ipmitool工具
apt update
apt install ipmitool  -y	# 2.查询BMC用户列表
ipmitool user list 1# 3.修改admin的密码(admin用户对应的ID为2)
ipmitool user set password 2 Hello@123# 4.获取BMC IP
ipmitool lan print | grep "IP Address"

输出

ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
1                    true    false      false      Unknown (0x00)
2   admin            false   false      true       ADMINISTRATORSet User Password command successful (user 2)IP Address Source       : Static Address
IP Address              : xxx.xxx.xxx.xxx

2.找一台ubuntu搭建TFTP服务,用来替换grub.cfg文件

apt install tftpd-hpa tftp-hpatee /etc/default/tftpd-hpa <<-'EOF'
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
EOF
mkdir -p /srv/tftp
chown -R tftp:tftp /srv/tftp
chmod -R 755 /srv/tftp
systemctl restart tftpd-hpa
systemctl enable tftpd-hpa

3.从调试服务器的/boot/grub/grub.cfg中提取出recovery mode的配置,简化并生成新的配置文件grub.cfg,放在tftp服务的目录下/srv/tftp/grub.cfg

普通用户有权限读取/boot/grub/grub.cfg,但无法修改

tee /srv/tftp/grub.cfg <<-'EOF'
set timeout=30
function load_video {if [ x$feature_all_video_module = xy ]; theninsmod all_videoelseinsmod efi_gopinsmod efi_ugainsmod ieee1275_fbinsmod vbeinsmod vgainsmod video_bochsinsmod video_cirrusfi
}menuentry "start" {load_videoinsmod gzioif [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fiinsmod part_gptinsmod ext2set root='hd0,gpt2'if [ x$feature_platform_search_hint = xy ]; thensearch --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  115cd86a-146b-4c35-8c00-59c537ec34a0elsesearch --no-floppy --fs-uuid --set=root 115cd86a-146b-4c35-8c00-59c537ec34a0fiecho    'Loading Linux 5.4.0-120-generic ...'linux   /boot/vmlinuz-5.4.0-120-generic root=UUID=115cd86a-146b-4c35-8c00-59c537ec34a0 ro recovery nomodeset dis_ucode_ldrecho    'Loading initial ramdisk ...'initrd  /boot/initrd.img-5.4.0-120-generic
}
EOF

4.UEFI Shell中操作步骤

# 1.通过BMC的控制台,F11选择,进入恢复模式# 2.配置IP
ifconfig -s eth1 static 192.168.1.100 255.255.255.0 192.168.1.1# 3.Ping上面的tftp服务器,确认网络通畅
ping 192.168.1.200# 4.进入grub目录
FS0:
cd EFI\ubuntu# 5.备份grub.cfg
cp grub.cfg grub.cfg.bk# 6.从tftp下载新的grub.cfg,并替换
rm grub.cfg
tftp 192.168.1.200 grub.cfg# 7.启动grub,进入恢复模式
grubx64.efi# 8.选择root模式# 9.vim /etc/sudoers,把自己的用户名加进去# 10.恢复grub.cfg
mv /boot/efi/EFI/ubuntu/grub.cfg.bk /boot/efi/EFI/ubuntu/grub.cfg# 11.reboot

四.截图

在这里插入图片描述
在这里插入图片描述!

这篇关于Ubuntu 18.04下普通用户的一次提权过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了