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 |
docker | Docker 容器运行组,赋予用户 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)具有较高的权限,若攻击者能够成功加入这些组,便能通过相应的权限提升手段对系统进行攻击。因此,管理员需要确保这些组的权限配置严格控制,定期审查用户组的成员,并确保敏感命令和文件的访问权限得到适当限制,从而降低潜在的安全风险。
相关文章:
Linux特权组全解析:识别GID带来的权限提升风险
组ID(Group ID,简称 GID)是Linux系统中用来标识不同用户组的唯一数字标识符。每个用户组都有一个对应的 GID,通过 GID,系统能够区分并管理不同的用户组。 在Linux系统中,系统用户和组的配置文件通常包括以…...
RTMP 和 WebRTC
WebRTC(Web Real-Time Communication)和 RTMP(Real-Time Messaging Protocol)是两种完全不同的流媒体协议,设计目标、协议栈、交互流程和应用场景均有显著差异。以下是两者的详细对比,涵盖协议字段、交互流程及核心设计思想。 一、协议栈与设计目标对比 特性RTMPWebRTC传…...
系统通解:超多视角理解
在科学研究和工程应用中,我们常常面临各种复杂系统,需要精确描述其行为和变化规律。从物理世界的运动现象,到化学反应的进程,再到材料在受力时的响应,这些系统的行为往往由一系列数学方程来刻画。通解,正是…...
11.享元模式 (Flyweight)
定义 Flyweight 模式(享元模式) 是一种结构型设计模式,它旨在通过共享对象来有效支持大量细粒度对象的复用。该模式主要通过共享细节来减少内存使用,提升性能,尤其在需要大量对象时非常有效。 基本思想: …...
Python 自学秘籍:开启编程之旅,人生苦短,我用python。
从2009年,用了几次python后就放弃了,一直用的php,现在人工智能时代,完全没php什么事情。必须搞python了,虽然已经40多岁了。死磕python了。让滔滔陪着你一起学python 吧。 开启新世界 在当今人工智能化的时代ÿ…...
验证工具:SVN版本控制
1-SVN概念 SVN(Subversion)是一种集中式版本控制系统,它用于文件和目录的版本管理,允许多个用户协同工作,同时追踪每个文件和目录的历史修改记录。以下是关于SVN版本控制的详细介绍: 一、SVN的基本概念 仓库(Repository):SVN的仓库是一个集中存储所有文件和目录的地…...
每日一题洛谷P5721 【深基4.例6】数字直角三角形c++
#include<iostream> using namespace std; int main() {int n;cin >> n;int t 1;for (int i 0; i < n; i) {for (int j 0; j < n - i; j) {printf("%02d",t);t;}cout << endl;}return 0; }...
React开发中箭头函数返回值陷阱的深度解析
React开发中箭头函数返回值陷阱的深度解析 一、箭头函数的隐式返回机制:简洁背后的规则二、块函数体中的显式返回要求:容易被忽视的细节三、真实场景下的案例分析案例1:忘记return导致组件渲染失败案例2:异步操作中的返回值陷阱 四…...
解决每次打开终端都需要source ~/.bashrc的问题(记录)
新服务器或者电脑通常需要设置一些环境变量,例如新电脑安装了Anaconda等软件,在配置环境变量后发现每次都需要重新source,非常麻烦,执行下面添加脚本实现一劳永逸 vim .bash_profile# .bash_profileif [ -f ~/.bashrc ]; then. ~…...
解决DeepSeek服务器繁忙问题:本地部署与优化方案
deepseek服务器崩了,手把手教你如何在手机端部署一个VIP通道! 引言 随着人工智能技术的快速发展,DeepSeek等大语言模型的应用越来越广泛。然而,许多用户在使用过程中遇到了服务器繁忙、响应缓慢等问题。本文将探讨如何通过本地部…...
【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图详解)
【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图) 文章目录 1、通信协议通信协议REST API 对比 GraphQL(前端-web服务)grpc如何工作&#x…...
Java基础——分层解耦——IOC和DI入门
目录 三层架构 Controller Service Dao 编辑 调用过程 面向接口编程 分层解耦 耦合 内聚 软件设计原则 控制反转 依赖注入 Bean对象 如何将类产生的对象交给IOC容器管理? 容器怎样才能提供依赖的bean对象呢? 三层架构 Controller 控制…...
武汉火影数字|VR虚拟现实:内容制作与互动科技的奇妙碰撞
VR虚拟现实是一种利用计算机技术生产三维虚拟世界的技术,通过头戴式显示器、手柄等设备,用户可以身临其境地感受虚拟世界,与其中的物体进行自然交互。 当内容制作遇上 VR,会发生什么? 当内容制作遇上VR,就像…...
一文了解性能优化的方法
背景 在应用上线后,用户感知较明显的,除了功能满足需求之外,再者就是程序的性能了。因此,在日常开发中,我们除了满足基本的功能之外,还应该考虑性能因素。关注并可以优化程序性能,也是体现开发能…...
SpringBoot扩展篇:@Scope和@Lazy源码解析
SpringBoot扩展篇:Scope和Lazy源码解析 1. 研究主题及Demo2. 注册BeanDefinition3. 初始化属性3.1 解决依赖注入3.2 创建代理 ContextAnnotationAutowireCandidateResolver#getLazyResolutionProxyIfNecessary3.3 代理拦截处理3.4 单例bean与原型bean创建的区别 4. …...
tkvue 入门,像写html一样写tkinter
介绍 没有官网,只有例子 安装 像写vue 一样写tkinter 代码 pip install tkvue作者博客 修改样式 import tkvue import tkinter.ttk as ttktkvue.configure_tk(theme"clam")class RootDialog(tkvue.Component):template """ <Top…...
c++ stl 遍历算法和查找算法
概述: 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个,提供了超过 90 个支持各种各样算法的函数,包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…...
Hackmyvm Connection
基本信息 难度:简单 靶机:192.168.194.11 kali:192.168.194.9 扫描 常规nmap扫描起手 nmap -sT -sV -A -T4 192.168.194.11 -p- 查看smb服务开启目录 139和445端口的smb服务直接以访客账号登录,无需密码验证成功。对应的ht…...
内置渲染管线和通用渲染管线的区别
内置渲染管线和通用渲染管线(URP)有以下区别: 功能特性 内置渲染管线:提供了一套较为基础的渲染功能,包括几何渲染、光照计算、阴影生成和后期处理等基本环节。但自定义选项相对有限,渲染次序基本是固…...
Unity 2D实战小游戏开发跳跳鸟 - 记录显示最高分
上一篇文章中我们实现了游戏的开始界面,在开始界面中有一个最高分数的UI,本文将接着实现记录最高分数以及在开始界面中显示最高分数的功能。 添加跳跳鸟死亡事件 要记录最高分,则需要在跳跳鸟死亡时去进行判断当前的分数是否是最高分,如果是最高分则进行记录,如果低于之前…...
算法随笔_40: 爬楼梯
上一篇:算法随笔_39: 最多能完成排序的块_方法2-CSDN博客 题目描述如下: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释&am…...
数据结构(2)——线性表与顺序表实现
目录 前言 一、线性表 二、顺序表 2.1概念 2.2类型的选择 2.3实现 1.初始化 2.检查是否需要扩容 3.尾插 4.尾删 5.头插 6.头删 7.某一个位置添加 8.某一个位置删除 9.基于某一位置的尾插删 10.查找 11.修改 12.销毁 总结 前言 今天对顺序表进行学习…...
全面解析机器学习优化算法中的进化策略
全面解析机器学习优化算法中的进化策略 全面解析机器学习优化算法中的进化策略引言什么是进化策略?基本概念核心组件算法流程数学基础高斯扰动期望值更新与其他优化方法的比较梯度下降法(Gradient Descent, GD)遗传算法(Genetic Algorithm, GA)Python案例基本实现改进版:…...
【LeetCode】5. 贪心算法:买卖股票时机
太久没更了,抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…...
软件测试丨PyTorch 图像目标检测
随着人工智能和机器学习的飞速发展,图像目标检测技术在各个领域扮演着越来越重要的角色。无论是在安防监控、自动驾驶车辆,还是在医疗影像分析和智能家居中,图像目标检测都发挥着不可或缺的作用。今天,我们将深入探讨其中一种热门…...
SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器
1、Spring Security 密码编码器 Spring Security 作为一个功能完备的安全性框架,一方面提供用于完成加密操作的 PasswordEncoder 组件,另一方面提供一个可以在应用程序中独立使用的密码模块。 1.1 PasswordEncoder 抽象接口 在 Spring Security 中,PasswordEncoder 接口代…...
FastReport.NET控件篇之交叉表控件
认识交叉表 上面是交叉表的原型,关键的三个单元格。 单元格①:用于扩展行数据,譬如打印学生成绩表时,每个学生一行,那么这个地方就是以学生姓名列进行打印。 单元格②:用于扩展列数据,譬如打印…...
互联网医院开发|互联网医院成品|互联网医院系统定制
互联网医院开发设计风格需综合考量多方面因素,以确保其专业性、易用性与高效性。在界面设计上,应遵循简洁直观的原则。避免过于繁杂的布局,确保关键功能模块清晰呈现,方便用户快速定位与操作。色彩搭配要注重视觉舒适度与专业性&a…...
17.3.4 颜色矩阵
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.3.4.1 矩阵基本概念 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,类似于数组。 由…...
【C++】多态详细讲解
本篇来聊聊C面向对象的第三大特性-多态。 1.多态的概念 多态通俗来说就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 编译时多态:主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的函数,通…...
