当前位置: 首页 > article >正文

Linux内核 命名空间机制

Linux Namespace 是内核提供的轻量级资源隔离机制核心是让不同进程组看到独立的系统资源视图是容器Docker、K8s的底层基石。它隔离的是进程对资源的可见性而非物理资源本身因此比虚拟机更轻量化本质为全局系统资源PID、网络、挂载等划分独立作用域进程只能访问所属命名空间内的资源对其他空间不可见。内核实现每个进程通过task_struct中的nsproxy指针关联一组命名空间实例内核在系统调用与资源访问时按当前进程的命名空间做过滤与映射。生命周期命名空间由引用计数管理最后一个进程退出时自动销毁子进程默认继承父进程的所有命名空间。内核核心数据结构1. struct nsproxy命名空间代理所有命名空间的统一入口每个进程的task_struct持有一个nsproxy指针指向当前所属的命名空间集合struct nsproxy { atomic_t count; // 引用计数 struct uts_namespace *uts_ns; // UTS命名空间 struct ipc_namespace *ipc_ns; // IPC命名空间 struct mnt_namespace *mnt_ns; // 挂载命名空间 struct pid_namespace *pid_ns_for_children; // PID命名空间子进程用 struct net *net_ns; // 网络命名空间 struct cgroup_namespace *cgroup_ns; // Cgroup命名空间 struct user_namespace *user_ns; // 用户命名空间基础 struct time_namespace *time_ns; // 时间命名空间 };2. 各类型命名空间结构体每种隔离资源对应独立内核结构维护该空间的资源状态与映射PIDstruct pid_namespace维护 PID 分配、层级、init 进程Mountstruct mnt_namespace维护独立挂载树Netstruct net独立网络栈、设备、路由Userstruct user_namespaceUID/GID 映射表IPCstruct ipc_namespace独立 System V IPC 对象UTSstruct uts_namespace独立 hostname/domainname关键机制详解1. PID 命名空间分层架构每个空间有独立 PID 号段首个进程为PID 1init负责回收僵尸进程。嵌套子空间进程在父空间有全局 PID如子空间 PID1 → 父空间 PID1234 → 根空间 PID5678/proc/[pid]/status中NSpid字段可见。销毁init 进程退出时内核终止该空间所有进程。让一组进程看到独立的进程号空间容器里看到 PID 从 1 开始宿主机看到容器进程是正常全局 PID容器内部看不见宿主机其他进程一句话给进程套一层 PID 映射表。内核基本结构每个 PID namespace 在内核里是一个独立结构struct pid_namespace { struct kref kref; // 引用计数 struct pidmap pidmap[PIDMAP_ENTRIES];// PID 分配位图 int last_pid; // 上次分配的 PID struct task_struct *child_reaper; // 本空间的 init 进程PID 1 struct pid_namespace *parent; // 父 namespace // ... };关键点每个 namespace 有自己的 PID 分配器有层级关系子 → 父 → 根 namespace有固定的init 进程PID 1PID分配与存储内核并不只存一个 PID而是给每个进程在所有祖先 namespace 中各分配一个 PID。结构struct pid保存一个数字而struct upid保存每个层级的编号struct pid { rwlock_t lock; unsigned int level; // 命名空间深度 struct upid numbers[]; // 每个 ns 对应的 PID };例如根 nsPID 1234父 nsPID 100子 nsPID 1内核会完整保存整条链。可见性规则最重要子 namespace 完全看不见父 / 兄弟父 namespace 可以看见子看到的 PID 是当前 ns 对应的编号这就是为什么容器里 ps 只能看到自己宿主机 ps 能看到容器。嵌套层级原理PID namespace 是树状结构根 NS (level 0) ├─ 容器A NS (level 1) │ └─ 容器A内嵌套容器 (level 2) └─ 容器B NS (level 1)一个进程在每一层都有一个 PID/proc/[pid]/status里的NSpid字段会列出所有层级 PID示例NSpid: 14528 42 1表示根 ns14528父 ns42本 ns1内核关键逻辑内核在遍历进程、分配 PID、发送信号时都会获取当前进程的task_struct-nsproxy-pid_ns用这个 ns 去查找 / 分配 / 展示 PID本质就是所有涉及 PID 的内核行为都以当前进程所在 PID namespace 为基准。2. User 命名空间权限隔离核心User NamespaceCLONE_NEWUSER是所有容器隔离的权限基石是 Linux 安全容器的核心实现UID/GID 隔离、权限映射、Capability 隔离、安全边界隔离让容器内root ≠ 宿主机 root。是其他命名空间的基础允许非特权用户创建命名空间。通过/proc/[pid]/uid_map/gid_map做内外 UID 映射如0 1000 1表示容器内 root (0) 映射到宿主机 uid1000。权限进程在空间内的能力capabilities受限于映射后的真实权限。核心作用独立的UID / GID 编号空间内外 ID 映射容器内0(root)→ 宿主机普通非特权用户Capability 能力隔离容器内即使是 root也只拥有受限权限允许普通非特权用户创建其他所有命名空间mnt/pid/net/ipc 等隔离安全 KEY、LSM、资源限额、用户组体系关键结论没有 User NS容器就是弱隔离容器 root 极易提权击穿宿主机。进程关联task_struct └→ nsproxy └→ user_ns // struct user_namespace每个进程都绑定一个user_namespace是权限检查的最高上下文。关键结构体struct user_namespace { struct uid_gid_map uid_map; // UID 映射表 struct uid_gid_map gid_map; // GID 映射表 struct user_namespace *parent;// 父 user ns树状层级 struct cap_set inheritable; // 权限能力集 // 安全、LSM、proc、cgroup 关联 bool ns_capable_setid; // ... };映射单元struct uid_gid_map { u32 nr_extents; struct uid_gid_extent extent[UID_GID_MAP_MAX_EXTENTS]; }; // 一段映射规则 struct uid_gid_extent { u32 first; // 容器内起始ID u32 lower; // 宿主机起始ID u32 count; // 映射数量 };UID/GID 映射机制核心1. 双向映射From 容器 → 宿主机内核做ns uid → 全局 uid转换读写文件、权限检查、磁盘持久化用宿主机真实 IDFrom 宿主机 → 容器全局 ID 反向翻译为容器内 IDps、ls -n展示容器内编号2. 映射文件/proc 接口/proc/[pid]/uid_map /proc/[pid]/gid_map标准容器映射示例# uid_map 0 1000 65536含义容器内 UID065535映射到宿主机 UID1000100065535 容器里的 root (0)在宿主机上就是普通用户 1000。3. 无映射 nobody如果不配置 map容器内所有未映射 ID 都会被内核强制映射为65534(nobody)天然防越权。Capability 权限隔离Linux 不再靠传统 root/sudo而是拆分细粒度 Capability。User NS 会裁剪、隔离 Cap新 user ns 内的进程默认不继承父命名空间的高权限 Cap只被授予一组受限安全 Cap如 CAP_CHOWN、CAP_SETUID 等容器内 root在当前 user ns 内拥有完整 Cap但对父 user ns / 宿主机资源无任何特权举例容器内执行mount只能在自己的 mnt ns 里生效无法挂载宿主机真实磁盘、无法修改宿主机文件权限。层级模型树状User NS 天然层级化根 User NS宿主机顶层真实权限 ├─ 容器A User NS子级权限受限 │ └─ 嵌套容器 User NS孙子级 └─ 容器B User NS权限规则子 ns 不能修改父 ns 资源父 ns 可以管控、限制子 ns 权限权限检查逐级向上校验3. Network 命名空间隔离完整网络协议栈是容器网络、虚拟化网络、多租户网络隔离的底座每个 NetNS 拥有独立网卡、IP、路由、ARP、iptables、TCP/UDP 栈、端口、socket默认完全隔离互不监听、互不路由、互不冲突底层内核协议栈代码全局共用只是网络资源实例隔离新空间默认仅含lo 回环接口DOWN 状态需手动启用与配置。跨空间通信用veth pair虚拟以太网对连接两个空间一端在宿主机、一端在容器空间。隔离范围全栈隔离网络设备lo、物理网卡、虚拟网卡veth、tap、macvlan、ipvlan三层网络IP 地址、路由表、网关、ARP、邻居表四层传输TCP/UDP/ICMP 独立端口空间不同 netns 可重复占用同一端口防火墙 / 转发独立 iptables、nftables、netfilter 规则网络配置/proc/sys/net内核参数隔离tcp_tw_reuse、ip_forward 等Socket 连接每个 ns 的 socket 完全隔离不能直接跨 ns 通信默认行为新建net ns只自动创建独立 lo 设备默认 DOWN无任何物理网卡、无路由、无防火墙规则必须手动启用 loip link set lo up挂载虚拟网卡、配置 IP / 路由端口隔离宿主机 80 端口 和 容器 80 端口 互不冲突跨 NetNS 通信核心方案1. veth pair容器默认一对虚拟以太网卡像一根网线两端一端留在宿主机 root netns一端移入容器 netns实现容器 ↔ 宿主机 二层互通2. macvlan / ipvlan让容器直接复用物理网卡独立 MAC/IP直连局域网3. 网桥 bridge宿主机创建虚拟网桥多个容器 veth 接入网桥实现容器之间互通4. SDN/OverlayVXLAN、Geneve跨主机容器网络5. 本地 UNIX 域套接字unix socket不受 netns 隔离可跨 ns 通信4. Mount 命名空间新空间复制父空间挂载树后续 mount/umount 仅影响当前空间。挂载传播支持shared/slave/private/unbindable控制挂载事件在父子空间的传播。隔离文件系统挂载视图核心每个 ns 拥有独立挂载树新的mount/umount仅作用于当前 ns不影响宿主机 / 其他容器是容器隔离根目录、OverlayFS、只读挂载、临时文件系统隔离的底层基础内核标识CLONE_NEWNS最早、最基础的命名空间。进程维度task_struct→nsproxy→mnt_nsstruct nsproxy { struct mnt_namespace *mnt_ns; // 当前进程所属挂载命名空间 // ...其他ns };挂载命名空间本体struct mnt_namespace { struct mount *root; // 该ns的根挂载节点 struct list_head list; // 所有挂载项链表 struct mount_event event; unsigned int mount_seq; // 挂载序列每次mount1 enum mnt_propagation_type propagation; // 挂载传播默认属性 // 引用计数、用户ns关联、生命周期 };关键挂载对象struct vfsmount文件系统挂载实例struct mount挂载点实体维护父子挂载层级、挂载传播标记全局不再只有一棵统一挂载树每个 mnt_ns 一棵独立挂载树挂载树复制机制Copy-on-Write 思想通过clone(CLONE_NEWNS)创建新挂载 ns 时复制父进程完整挂载树初始视图完全一致复制是浅拷贝底层文件系统、超级块、inode 全局共享后续当前 ns 内执行mount/umount/bind mount只会修改自己这棵树完全隔离。区别物理资源磁盘、块设备全局共享挂载视图、挂载点列表、目录覆盖关系完全隔离。视图隔离效果容器内挂载/tmp、/dev/shm、临时磁盘宿主机看不到宿主机挂载硬盘默认不会自动穿透到容器容器内umount /sys不会影响宿主机系统。、挂载传播Mount Propagation—— 重中之重Mount ns 不是完全隔绝内核提供挂载传播属性控制挂载事件跨 ns 传递是容器、systemd 关键机制。四种传播类型类型宏作用MS_PRIVATE私有完全隔离挂载变更不互通容器默认MS_SHARED共享挂载事件双向同步父子 ns 互相传递MS_SLAVE从属只能接收父 ns 挂载事件自身变更不向外扩散MS_UNBINDABLE不可绑定不允许 bind mount禁止跨目录挂载典型场景容器默认private容器内部挂载、卸载完全隔离是安全隔离基础。宿主机 /run/media 等shared/slaveU 盘插入、自动挂载能被所有需要的 ns 感知。bind 挂载、容器目录映射依赖传播属性控制是否泄露宿主机目录。修改传播属性命令# 设置目录为私有容器标准做法 mount --make-private /挂载层级 根目录隔离原理新 mnt ns 继承父的/根挂载容器通过pivot_root/chroot结合独立挂载树先在私有挂载 ns 内挂载 OverlayFS读写层 镜像只读层用pivot_root切换根目录替换为容器文件系统再挂载独立/proc /sys /dev实现完整环境隔离。关键区别chroot只是目录视图限制无法隔离挂载、无法隐藏宿主机挂载点Mount NS pivot_root真正隔离完整文件系统挂载拓扑。生命周期mnt_namespace基于引用计数管理当所有绑定该 ns 的进程全部退出、无文件句柄引用时内核自动销毁该挂载树销毁不会卸载全局真实文件系统仅销毁当前 ns 的挂载拓扑。Mount NS 与其他容器组件配合 User NS非特权用户也能创建私有挂载、绑定挂载提升容器安全性。 PID NS独立进程视图 独立 /proc 挂载彻底隔离进程信息。 Cgroup隔离视图 资源限制构成完整容器底座。OverlayFS Mount NS每层镜像只读挂载 容器私有读写层实现容器镜像分层。全局挂载树 与 NS 挂载树 关系1. 初始状态根命名空间init_ns系统启动后只有根 Mount NS全局只有一棵唯一挂载树所有进程默认共享这棵树所有/ /home /tmp /sys /proc都在这棵树上2. 创建新 Mount NSCLONE_NEWNSclone(CLONE_NEWNS) / unshare(CLONE_NEWNS)内核关键动作浅拷贝根 NS / 父 NS 的整棵挂载树复制所有mount节点的拓扑关系底层super_block、dentry、inode完全共享不复制数据生成一个全新mnt_namespace新进程 / 当前进程绑定到新 mnt_ns3. 隔离本质✅ 底层资源全局共享磁盘、inode、sb✅ 挂载对象多个 NS 可以引用同一个mount❌ 挂载操作隔离新 NS 内执行mount / umount / bind mount只修改当前 NS 自己的挂载树不影响父 NS、其他容器挂载树的「覆盖」机制关键Linux 挂载是覆盖式原目录存在原有 dentry 与内容在该目录执行 mount → 新文件系统覆盖该目录上层原目录内容被隐藏仅在卸载后恢复结合 NS容器内单独挂载/etc覆盖宿主机同目录完全不受影响因为二者挂载树拓扑独立挂载传播多 NS 挂载树的联动规则如果完全隔离U 盘自动挂载、容器挂载宿主机目录会失效内核引入挂载传播控制挂载事件是否跨 NS 同步。四种类型MS_PRIVATE 私有容器默认挂载树完全隔离双向不通容器安全基础。MS_SHARED 共享父子 NS 挂载树双向同步一方 mount另一方自动看到。MS_SLAVE 从属只能继承父 NS 挂载自身修改不会往外扩散。MS_UNBINDABLE禁止 bind 挂载防止目录穿透泄露。典型流程宿主机/media设为shared→ U 盘插入自动挂载到/media/usb→ 所有 shared/slave 的子 NS 自动看到该挂载→ 私有容器看不到隔离生效多 Mount NS 整体架构图示[根Mount NS 挂载树] 全局原始挂载拓扑 │ ├─ 复制生成 → [容器A mnt_ns 挂载树]私有 └─ 复制生成 → [容器B mnt_ns 挂载树]私有 底层super_block / inode / dentry 全局共用 上层每棵挂载树 挂载点、覆盖关系、卸载、新增挂载 完全独立内核关键执行逻辑用户访问文件当进程 open (/tmp/file)取当前进程 →nsproxy-mnt_ns以当前 NS 的挂载树为基准做路径解析逐级匹配挂载点应用挂载覆盖规则最终找到对应 super_block inode核心结论路径解析、挂载可见性全部绑定在当前进程的 Mount 命名空间上创建与管理的三大系统调用1. clone ()创建新进程 新命名空间创建子进程并指定新命名空间是容器启动的核心调用// 创建新UTSPID命名空间的子进程 pid clone(child_func, stack, CLONE_NEWUTS | CLONE_NEWPID | SIGCHLD, arg);2. unshare ()当前进程脱离旧空间创建新空间不创建新进程直接为当前进程切换到新命名空间unshare命令底层unshare(CLONE_NEWNET | CLONE_NEWNS); // 脱离当前网络与挂载空间3. setns ()加入已存在的命名空间通过命名空间文件描述符/proc/[pid]/ns/xxx将进程加入指定空间nsenter命令底层int fd open(/proc/1234/ns/net, O_RDONLY); setns(fd, CLONE_NEWNET); // 加入PID1234的网络空间

相关文章:

Linux内核 命名空间机制

Linux Namespace 是内核提供的轻量级资源隔离机制,核心是让不同进程组看到独立的系统资源视图,是容器(Docker、K8s)的底层基石。它隔离的是进程对资源的可见性,而非物理资源本身,因此比虚拟机更轻量化本质&…...

PRBS(伪随机码)如何驱动现代通信与测试?

1. 为什么PRBS是现代通信的"黄金测试信号"? 第一次接触PRBS时,我和大多数工程师一样疑惑:为什么不用真正的随机信号做测试?直到在25G光模块测试现场看到PRBS31的测试报告才恍然大悟。想象你正在检查高速公路的承重能力—…...

MIPI存储

MIPI 存储核心是基于 MIPI M‑PHY UniPro 协议栈,为 UFS(通用闪存存储) 提供高速、低功耗的物理与链路层,是移动 / 嵌入式主流高速存储接口;同时 MIPI 也定义了 MIPI RAW 紧凑打包格式用于图像数据存储 / 传输。MIPI …...

【架构实战】六边形架构与整洁架构实战

一、架构演进概述 随着业务复杂度增加,软件架构也在不断演进: 架构演进历程: 分层架构 → 六边形架构 → 整洁架构 → 微服务架构核心目标:实现高内聚、低耦合 架构质量评估: 独立性:框架、数据库、UI的可替…...

神经机器翻译数据集构建:Europarl语料处理与优化

1. 神经机器翻译数据集构建实战:从Europarl语料到模型训练在自然语言处理领域,机器翻译一直是最具挑战性的任务之一。2014年,随着神经机器翻译(Neural Machine Translation, NMT)技术的突破,基于编码器-解码…...

电话号码精确定位:免费开源工具的实用指南与深度解析

电话号码精确定位:免费开源工具的实用指南与深度解析 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirro…...

AI 英语教学智能体开发

AI 英语教学智能体开发已进入“认知模拟”与“超低延迟交互”的深水区。技术栈的构建不再仅仅是调用 API,而是涉及从底层推理到上层教学法编排的整套国产化生态。以下是国内开发 AI 英语教学智能体的核心技术维度:1. 基座模型与国产化适配国内开发者目前…...

Elasticsearch架构核心:Node节点详解与角色功能全解析

Elasticsearch架构核心:Node节点详解与角色功能全解析一、前言二、什么是 Elasticsearch Node(节点)?1. 官方定义2. 通俗理解3. 节点核心特点三、节点角色与功能流程图四、Elasticsearch 节点的 5 种核心角色与功能1. 主节点&…...

保姆级教程:在Gazebo 11中为WAM-V无人艇模型添加AprilTag(Ubuntu 20.04环境)

深度解析:在Gazebo 11中为WAM-V无人艇集成AprilTag的完整实践指南(Ubuntu 20.04环境) 当你在ROS/Gazebo仿真环境中需要对现有机器人模型进行功能扩展时,往往会遇到模型文件嵌套复杂、修改位置不明确的困扰。本文将以WAM-V无人艇为…...

批量给文件改名的方法有哪些?这5个实用技巧新手也能秒会

在日常办公和学习中,我们常常需要处理大量文件,杂乱的文件名不仅影响工作效率,还可能导致文件查找困难。无论是学生整理作业、职场人士归档资料,还是摄影爱好者管理照片,批量给文件改名都是必备技能。本文将详细介绍5种…...

别再只跑Demo了!手把手教你用DINOv2的Patch特征做简单的图像前景分割

解锁DINOv2的实战潜力:用Patch特征实现零样本图像分割 在计算机视觉领域,我们常常陷入一个怪圈:花费大量时间跑通各种模型的Demo,却很少思考这些预训练特征在实际任务中的真正价值。DINOv2作为Meta开源的视觉大模型,其…...

从市场调研到用户画像:因子分析如何帮你发现隐藏的‘消费者因子’?

解码消费者心智:如何用因子分析从海量问卷中提炼黄金洞察 当市场部同事将一份包含87个问题的用户满意度问卷扔到你桌上时,那些密密麻麻的评分数据就像未经处理的矿石——价值连城却难以直接利用。这正是因子分析大显身手的时刻。想象一下,你不…...

从编码原理到实战:彻底搞懂QT中文乱码,让你的应用告别“火星文”(UTF-8/GBK转换详解)

从编码原理到实战:彻底搞懂QT中文乱码,让你的应用告别“火星文”(UTF-8/GBK转换详解) 在QT开发中,中文乱码问题就像一位不请自来的“老朋友”,总会在你最意想不到的时候出现。无论是控件显示、文件读写还是…...

2025年MLOps必备的10个Python库解析

1. 为什么2025年的MLOps需要这10个Python库?三年前部署一个机器学习模型还需要手动编写数百行部署脚本,现在MLOps工具链的成熟度已经让模型部署变得像调用API一样简单。作为经历过完整MLOps演进周期的从业者,我亲历了从手工运维到自动化管道的…...

用E4A中文编程,30分钟搞定一个能远程控制STM32的安卓APP(基于OneNET MQTT)

用E4A中文编程30分钟构建OneNET物联网控制APP全指南 当第一次听说能用中文编写安卓APP控制硬件设备时,我的反应和多数嵌入式开发者一样——这要么是夸大其词,要么功能极其有限。直到在某个智能家居项目截止日前48小时,因Java界面卡死而被迫尝…...

C++26反射让constexpr容器成为现实?揭秘编译期JSON Schema校验器的7层元编程架构(含完整Doxygen生成的反射依赖图)

更多请点击: https://intelliparadigm.com 第一章:C26反射核心机制与constexpr容器的范式突破 C26 将首次在标准中引入原生、零开销的编译期反射(std::reflect)设施,配合全面 constexpr 化的容器(如 std::…...

【收藏备用】2026年Java程序员必看:不用弃坑,靠大模型轻松涨薪(小白/在职通用)

说真的,2025到2026这一年,看着身边一群搞Java的兄弟纷纷转型大模型,心里挺有感触的。我们当初入门的时候,都是从写接口、搭Spring Boot、连MySQL、配Redis开始,一天天稳扎稳打,以为凭着这些硬技能就能安安稳…...

STC8H8K64U vs. 新唐MS51:硬件PWM库函数生态与开发效率深度对比

STC8H8K64U与新唐MS51硬件PWM开发体验全维度对比 1. 开发环境与生态支持差异 在嵌入式开发领域,芯片厂商提供的开发工具链和软件支持往往决定了实际开发效率。STC8H8K64U和新唐MS51在硬件PWM模块的支持上呈现出截然不同的开发体验。 STC8H8K64U的库函数现状&#xf…...

(十二)Scanner 输入校验、if 嵌套、逻辑运算符 (并且)、||(或者)综合练习

package dey5; import java.util.Scanner; public class Test06 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 第一步:输入第一个运算数System.out.println("输入第一个运算数");if (scanner.hasNextInt()) {in…...

NodeMCU PyFlasher:零门槛ESP8266固件烧录完全指南

NodeMCU PyFlasher:零门槛ESP8266固件烧录完全指南 【免费下载链接】nodemcu-pyflasher Self-contained NodeMCU flasher with GUI based on esptool.py and wxPython. 项目地址: https://gitcode.com/gh_mirrors/no/nodemcu-pyflasher NodeMCU PyFlasher是一…...

3个场景告诉你:为什么Mac用户需要桌面歌词显示工具LyricsX

3个场景告诉你:为什么Mac用户需要桌面歌词显示工具LyricsX 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 如果你正在使用Mac听音乐,是否曾有过这…...

PACS系统选型与部署避坑指南:医院影像科技术负责人必看的架构解析

PACS系统选型与部署避坑指南:医院影像科技术负责人必看的架构解析 在数字化医疗快速发展的今天,医学影像存储与传输系统(PACS)已成为医院信息化建设的核心支柱。作为连接影像设备、临床科室和放射科医生的"神经中枢",一套设计合理…...

抖音批量下载终极指南:如何免费高效获取无水印视频内容

抖音批量下载终极指南:如何免费高效获取无水印视频内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

从一次内部攻防演练说起:我是如何利用CVE-2017-1000028漏洞“捡到”GlassFish管理员密码的

实战复盘:GlassFish任意文件读取漏洞的深度利用链 那是一个普通的周二下午,我正在为客户做内部网络的安全评估。按照惯例,我先用Nmap对目标网段进行扫描,突然在扫描结果中发现了一台开放4848端口的服务器——这个端口号让我瞬间警…...

你的MCP4725 DAC输出不准?可能是这3个硬件坑和2个软件误区(附STM32 F4实测排查指南)

MCP4725 DAC精度问题全解析:从硬件设计到软件优化的实战指南 在嵌入式系统开发中,数字模拟转换器(DAC)的精度问题常常让工程师们头疼不已。MCP4725作为一款性价比较高的12位DAC芯片,广泛应用于各种需要精确电压输出的场景。然而,很…...

Python实战:用PyCryptodome构建你的数据安全防线

1. PyCryptodome:Python开发者的加密利器 当你需要为Python应用添加加密功能时,PyCryptodome绝对是个绕不开的名字。这个库的前身是著名的PyCrypto,现在已经成为Python生态中最强大的密码学工具之一。我在多个实际项目中使用过它,…...

96个公共Tracker终极配置指南:让BT下载速度提升300%

96个公共Tracker终极配置指南:让BT下载速度提升300% 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 还在为BT下载速度慢而烦恼吗?🤔 今天…...

3步解锁加密音乐:浏览器本地解密完全指南

3步解锁加密音乐:浏览器本地解密完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcode.c…...

用STM32G431玩超级玛丽!CubeMX+HAL库移植NES模拟器保姆级教程(附蓝桥杯板子适配)

用STM32G431玩超级玛丽!CubeMXHAL库移植NES模拟器保姆级教程(附蓝桥杯板子适配) 还记得小时候抱着红白机玩《超级玛丽》的快乐吗?现在,你可以亲手把这份童年回忆"塞进"一块STM32开发板里。本文将带你用STM32…...

RWKV-7 (1.5B World)镜像部署:腾讯云TI-ONE平台GPU容器配置

RWKV-7 (1.5B World)镜像部署:腾讯云TI-ONE平台GPU容器配置 1. 项目概述 RWKV-7 (1.5B World)是一款专为单卡GPU优化的轻量级对话模型,基于RWKV架构开发。这个1.5B参数的模型虽然体积小巧,却具备出色的多语言理解能力,特别适合在…...