Linux特权组全解析:识别GID带来的权限提升风险

组ID(Group ID,简称 GID)是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID,通过 GID,系统能够区分并管理不同的用户组。

在Linux系统中,系统用户和组的配置文件通常包括以下内容:

  • /etc/passwd 文件:存储用户账户信息(包括 UID 和 GID)。
  • /etc/group 文件:存储用户组的信息(包括组名、GID、组成员等)。

如何查看系统中的组和 GID

1. 查看所有组信息

使用 cat 命令查看 /etc/group 文件,它列出了系统中所有组的名称、GID 和成员信息:

cat /etc/group

输出示例:

root:x:0:root
adm:x:4:syslog,john
docker:x:999:jane,root
sudo:x:27:root,john
wheel:x:10:admin
disk:x:6:root,john
tty:x:5:root

2. 查看特定用户的组信息

使用 groups 命令可以查看当前用户属于哪些组:

groups username

输出示例:

john : john adm sudo docker

这表示 john 用户属于 john、adm、sudo 和 docker 组。

3. 查看特定用户的 UID 和 GID

使用 id 命令可以查看特定用户的 UID 和 GID:

id john

输出示例:

uid=1000(john) gid=1000(john) groups=1000(john),4(adm),27(sudo),999(docker)

常见的系统组及其 GID

以下是一些常见的 Linux 系统用户组及其默认的 GID。

组名描述默认 GID
root系统超级用户组,具有最高权限0
dockerDocker 容器运行组,赋予用户 Docker 容器访问权限999
wheel允许通过 su 或 sudo 执行特权命令的用户组10
adm系统日志组,通常有权限查看日志文件4
disk允许用户访问磁盘设备的组6
sys系统管理组,通常与硬件设备操作相关3
staff用于有管理员权限的普通用户组,通常用于安装软件50
users默认的用户组100
games游戏相关的用户组60
mail邮件相关用户组8
tty与终端设备相关的用户组,通常用于控制台操作5
input输入设备相关的组14
audio音频设备访问权限组63
video视频设备访问权限组44
plugdev外部设备访问权限组46
netdev网络设备访问权限组101

组ID与权限提升

docker(GID: 999)

GID 999 是 Docker 用户组的默认组 ID。加入 docker 组的用户可以无需 sudo 执行 Docker 命令,这种特权可能导致容器逃逸(container escape)。

提权途径:如果攻击者能够加入 docker 组,他们可以直接控制 Docker 容器。若容器以特权模式运行,攻击者可以通过容器访问宿主机文件系统,甚至执行恶意操作,进而提权至宿主机的 root 用户,获取完全控制权限。

例如,攻击者可以通过以下命令将容器挂载宿主机的根文件系统,进而访问宿主机所有文件:

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

disk(GID: 6)

GID 6 是 disk 组的默认 GID。属于 disk 组的用户有权限访问磁盘设备,包括硬盘分区、挂载设备等。

提权途径:攻击者可以利用 disk 组的权限直接操作磁盘设备。通过工具如 fdisk 或 parted 修改磁盘分区表,攻击者可能绕过权限限制,访问本应受到保护的文件或设备。攻击者甚至能够通过修改启动分区来控制系统。

例如,攻击者可以执行以下操作来查看磁盘分区信息:

df -h

然后,使用 debugfs 获取磁盘分区的详细信息:

debugfs /dev/sda3

通过该方式,攻击者可对整个磁盘进行读写操作,包括读取 /root/.ssh/id_rsa(私钥)或 /etc/shadow(用户密码哈希),进而破解系统账户密码,获取更高权限。

adm(GID: 4)

GID 4 是 adm 组的默认 GID。该组的用户通常具有查看系统日志文件的权限,常见的日志文件包括 /var/log/auth.log 和 /var/log/syslog,这些文件可能包含系统的敏感信息,如用户登录记录和身份验证信息。

提权途径:攻击者若能访问 adm 组的权限,便可以读取日志文件,从中提取有用的信息,例如用户名、密码哈希等。结合暴力破解工具(如 John the Ripper),攻击者可以破解密码,从而进一步提升权限。

例如,攻击者可以通过查看 /var/log/auth.log 中的记录,获得用户登录信息。

tty(GID: 5)

GID 5 是 tty 组的默认 GID。该组的用户拥有对终端设备的访问权限,能够进行输入和输出操作。

提权途径:攻击者可以利用 tty 组的权限伪装终端设备,从而捕获用户的输入,甚至干扰其他用户的会话,获取更多的控制权。通过对终端的控制,攻击者可能会获取其他用户的凭证或执行恶意操作,进一步提升自己的权限。

wheel(GID: 10)

GID 10 是 wheel 组的默认 GID。该组标识可以通过 sudo 或 su 获得 root 权限的用户。

提权途径:加入 wheel 组的用户能够使用 sudo 执行任意命令,如果 sudo 配置不当,攻击者可能通过 sudo 提权至 root 用户,执行恶意命令并完全控制系统。通过此途径,攻击者可以绕过普通用户的权限限制,进行任意操作,如安装恶意软件、修改系统配置或删除日志等。


总结

Linux系统中的组ID(GID)是区分用户组和管理权限的重要手段。了解每个组及其对应的 GID,有助于管理员在系统配置和权限控制中做出更加合理的选择。然而,不当的组配置或权限分配可能为攻击者提供潜在的攻击面,导致系统安全风险。因此,在进行系统配置和渗透测试时,必须特别关注具有特殊权限的用户组,确保系统能够在最小权限原则下正常运行,并及时发现并修复安全漏洞。

系统中的某些特权组(如 docker、disk、adm、tty 和 wheel)具有较高的权限,若攻击者能够成功加入这些组,便能通过相应的权限提升手段对系统进行攻击。因此,管理员需要确保这些组的权限配置严格控制,定期审查用户组的成员,并确保敏感命令和文件的访问权限得到适当限制,从而降低潜在的安全风险。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/diannao/69110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间对象管理相关

在SpringBoot项目中,这段时间感觉对于时间的处理是个比较繁琐的问题,现将一些常用的时间处理记录下。 一般来说,在MySQL数据库中时间字段选择DateTime,java中实体类时间字段使用Date类型,为了转换方便,使用…

mybatisgenerator接入

1、引入plugin <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.mybatis.generator</groupId>&l…

NacosRce到docker逃逸实战

NacosRce到docker逃逸实战 1、Nacos Derby Rce打入内存马 这个漏洞的原理大家应该都知道&#xff0c; 2.3.2 < Nacos < 2.4.0版本默认derby接口未授权访问&#xff0c;攻击者可利用未授权访问执行SQL语句加载构造恶意的JAR包导致出现远程代码执行漏洞。 在日常的漏洞挖…

SpringCloud速通教程

视频地址 文档地址 3. SpringCloud - 快速通关

mini-lsm通关笔记Week2Day6

项目地址&#xff1a;https://github.com/skyzh/mini-lsm 个人实现地址&#xff1a;https://gitee.com/cnyuyang/mini-lsm Summary 在本章中&#xff0c;您将&#xff1a; 实现WAL日志文件的编解码 系统重启时使用WAL日志恢复memtable 要将测试用例复制到启动器代码中并运行…

《手札·开源篇》基于开源Odoo软件与Deepseek的智能企业管理系统集成方案

一、方案背景 随着企业数字化转型的深入&#xff0c;传统ERP系统需要结合AI技术实现智能化升级。本方案将开源ERP系统Odoo与深度求索&#xff08;Deepseek&#xff09;大模型能力深度整合&#xff0c;构建具备智能决策支持、自然语言交互和数据分析增强的企业管理平台。 二、…

【DeepSeek背后的技术】系列三:强化学习(Reinforcement Learning, RL)

目录 1 简介1.1 强化学习&#xff08;RL&#xff09;简介1.2 基于人类反馈的强化学习 (RLHF) 简介1.2.1 四个重要角色1.2.2 三个步骤 2 强化算法2.1 PPO&#xff08;Proximal Policy Optimization&#xff09;2.1.1 核心思想2.1.2 算法步骤2.1.3 优点2.1.4 缺点2.1.5 应用场景 …

LabVIEW的智能电源远程监控系统开发

在工业自动化与测试领域&#xff0c;电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作&#xff0c;存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网&#xff08;IIoT&#xff09;技术&#xff0c;实现电源设备…

SpringBoot开发(四)SpringBoot配置文件

1. SpringBoot配置文件 1.1. 配置端口号和路径 &#xff08;1&#xff09;在application.properties文件下配置端口号和路径。 server.port: 8081 server.servlet.context-path/demo&#xff08;2&#xff09;运行访问。 1.2. 自定义配置 1.2.1. 方式一 &#xff08;1&…

算法随笔_40: 爬楼梯

上一篇:算法随笔_39: 最多能完成排序的块_方法2-CSDN博客 题目描述如下: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&am…

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结 1、一个数组解决很麻烦引出的问题1.1、RAW 文件尾部数据如下:1.2、自定义标头 ADD 或 DEL 的数据结构如下&#xff1a; 2、程序 C# 源代码的编写和剖析2.1、使用 ref 关键字&#xff0c;通过引用将参数传递&#xff0c;以…

win32汇编环境,窗口程序中自定义工具栏的使用示例

;运行效果 ;win32汇编环境,窗口程序中自定义工具栏的使用示例 ;工具栏一般放在菜单下面&#xff0c;相当于一个个小的对话框&#xff0c;当然你放在其它地方也可以。 ;原理是&#xff0c;创建一张BMP位图&#xff0c;比如下例用一张168*24的图&#xff0c;平均分成7部分&#x…

机器学习专业毕设选题推荐合集 人工智能

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波

上一篇博客我们提到了定时器产生PWM波&#xff0c;现在&#xff0c;我们尝试的想要捕获我们的PWM波&#xff0c;测量它的频率&#xff0c;我们应该怎么做呢&#xff1f;答案还是回到我们的定时器上。 我们知道&#xff0c;定时器是一个高级的秒表&#xff08;参考笔者的比喻&a…

ArrayList 扩容机制的源码剖析

在 Java 编程中&#xff0c;ArrayList是一个常用的集合类&#xff0c;它实现了List接口&#xff0c;底层基于数组实现。与普通定长数组不同&#xff0c;ArrayList能够根据元素的添加情况动态调整数组的大小&#xff0c;这就是其扩容机制。下面我们将深入剖析ArrayList扩容机制的…

Java 面试之结束问答

技术优化 线程池优化 设置最大线程数设置最小核心线程数设置额外线程存活时间选择线程池队列选择合适的线程池选择合适的饱和策略 锁优化 尽量不要锁住方法缩小同步代码块&#xff0c;只锁数据锁中尽量不要再包含锁将锁私有化&#xff0c;在内部管理锁进行适当的锁分解 HT…

【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer 模型已经成为主流。然而&#xff0c;Transformer 本身并不具备处理序列顺序的能力。为了让模型理解文本中词语的相对位置&#xff0c;我们需要引入位置编码&#xff08;Positional Encoding&#xff09;…

【科研】 -- 医学图像处理方向,常用期刊链接

文章目录 文章目录 医学图像处理方向&#xff0c;期刊链接医学图像处理方向&#xff0c;会议 医学图像处理方向&#xff0c;期刊链接 Sicence https://www.science.org/ Nature https://www.nature.com/ Nature Communications https://www.nature.com/ncomms/ Nature Met…

The specified Gradle distribution ‘gradle-bin.zip‘ does not exist.

The specified Gradle distribution ‘https://services.gradle.org/distributions/gradle-bin.zip’ does not exist. distributionUrl不存在&#xff0c;关联不上&#xff0c;下载不了&#xff0c;那就匹配一个能下载的 distributionUrlhttps://services.gradle.org/distrib…

从零开始实现一个双向循环链表:C语言实战

文章目录 1链表的再次介绍2为什么选择双向循环链表&#xff1f;3代码实现&#xff1a;从初始化到销毁1. 定义链表节点2. 初始化链表3. 插入和删除节点4. 链表的其他操作5. 打印链表和判断链表是否为空6. 销毁链表 4测试代码5链表种类介绍6链表与顺序表的区别7存储金字塔L0: 寄存…