LFZ 的技术笔记

分类: Linux技术

Linux 系统配置、运维、技巧分享

  • 🔥 一个!符号让攻击者获得 root 权限 — CVE-2026-23111 Linux 内核漏洞深度解析

    🔥 一个!符号让攻击者获得 root 权限 — CVE-2026-23111 Linux 内核漏洞深度解析

    2026 年 6 月,安全研究人员披露了一个令人瞠目结舌的 Linux 内核漏洞:代码中一个多余的感叹号”!”,让任意普通用户可以直接提权到 root。更震撼的是,PoC 现已公开,稳定率超过 99%。本文将深入分析 CVE-2026-23111 的技术细节与应急方案。


    🔍 漏洞概览

    CVE-2026-23111 位于 Linux 内核的 nf_tables 子系统——这是现代 Linux 的包过滤框架,替代了传统的 iptables。漏洞类型为 Use-After-Free(UAF),CVSS 评分 7.8(High)

    • CVE 编号:CVE-2026-23111
    • 漏洞类型:Use-After-Free(释放后使用)→ 本地权限提升
    • 影响组件:Linux kernel nf_tables 包过滤子系统
    • 攻击前提:需要本地普通用户权限 + unprivileged user namespaces(默认开启)
    • 影响范围:Ubuntu 22.04/24.04/25.10、Debian Bookworm/Trixie、RHEL 10、SUSE、Amazon Linux 等主流发行版

    ⚙️ 技术根因:一个感叹号引发的”血案”

    漏洞函数是 nft_map_catchall_activate(),它在 nf_tables 事务回滚阶段(Abort Phase)负责重新激活 catchall 元素。问题出在一行代码的逻辑取反上:

    /* ❌ 错误的代码 - nft_map_catchall_activate() */
    if (!nft_set_elem_active(ext, genmask))
        continue;  /* 跳过非活跃的,处理活跃的 → 刚好反了!*/
    
    /* ✅ 修复后的代码 - 删掉那个 "!" */
    if (nft_set_elem_active(ext, genmask))
        continue;  /* 跳过活跃的,只处理非活跃的 → 正确!*/

    这个反逻辑导致了什么后果?当一条 nft 事务(比如删除一个规则集)失败触发回滚时:

    1. 引用计数不增反减:本该增加的 chain->use 引用计数未被正确恢复
    2. 每次回滚都扣一次:每触发一次 abort 周期,引用计数就永久减少 1
    3. 引用计数归零:当 chain->use 变为 0 时,DELCHAIN 操作可以成功删除这个 chain
    4. 释放后使用:chain 虽已被释放,但 catchall verdict 元素仍然指向它——UAF 条件达成

    攻击者随后通过 seq_operations spray、msg_msg 堆风水等经典内核利用技术,完成内核基址泄露 → 堆地址泄露 → ROP 链执行 → 禁用 SELinux → 替换 modprobe_path → 提权到 root 的完整攻击链。


    🎯 攻击场景:不止是本地提权

    虽然漏洞需要本地访问权限,但在以下场景中威胁尤为严峻:

    • 共享主机 / 跳板机 / CI 构建服务器:任意有 shell 的用户 → 直接 root
    • Kubernetes 容器逃逸:攻击者从被攻陷的 pod 内部突破到宿主机
    • 云 VM 横向移动:获得低权限账户后迅速提权控制整台实例

    据 Exodus Intelligence 的测试,该漏洞在空闲系统上的利用稳定率超过 99%——内核常见的 KASLR、SMEP/SMAP 等防护机制均被绕过。


    🛡️ 检测你的系统是否受影响

    立刻检查当前内核版本:

    # 查看内核版本和构建日期
    uname -r    # 如 6.8.0-50-generic
    uname -v    # 编译日期信息
    
    # 检查 nf_tables 模块是否加载
    lsmod | grep nf_tables
    
    # 检查 unprivileged user namespaces 是否启用(默认开启)
    sysctl kernel.unprivileged_userns_clone
    # 返回 1 表示开启

    各发行版已修复版本参考

    • Ubuntu:22.04 LTS → 5.15.0-134+ / 24.04 LTS → 6.8.0-52+
    • Debian:Bookworm → 6.1.129+ / Trixie → 6.12.20+
    • RHEL 10:kernel-10.0.0-55+
    • 上游主线:6.14+ 已包含修复(2026 年 2 月 5 日合入)

    更新后必须重启系统,内核热补丁需要重启才能生效:

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade linux-image-$(uname -r)
    sudo reboot
    
    # RHEL/CentOS
    sudo yum update kernel && sudo reboot

    🔒 无法立即更新?试试缓解措施

    如果因为业务连续性无法立刻重启,可以通过限制 user namespaces 阻断攻击路径:

    # 临时禁用 unprivileged user namespaces(立即生效)
    sudo sysctl -w kernel.unprivileged_userns_clone=0
    
    # 写入 sysctl 配置使其持久化
    echo "kernel.unprivileged_userns_clone=0" | sudo tee /etc/sysctl.d/99-disable-userns.conf
    
    # 注意:Docker/Podman 容器需要该特性,禁用后容器可能无法正常运行

    替代方案:如果必须保留容器能力,可以使用 apparmorseccomp 策略限制 nf_tables 的调用,但有效性不如直接修补内核。


    ⏱️ 时间线回顾

    • 2026 年 2 月 5 日:上游内核合入修复补丁(删掉一个”!”)
    • 2026 年 4 月 16 日:FuzzingLabs 发布独立 PoC
    • 2026 年 6 月 8 日:Exodus Intelligence 发布完整技术分析
    • 2026 年 6 月 10 日:Ars Technica / The Hacker News 等媒体报道,引起广泛关注

    💡 快速参考

    操作命令
    检查内核版本uname -r && uname -v
    检查 nf_tables 模块lsmod | grep nf_tables
    检查 user namespace 状态sysctl kernel.unprivileged_userns_clone
    临时禁用提权路径sudo sysctl -w kernel.unprivileged_userns_clone=0
    Ubuntu 更新内核sudo apt update && sudo apt upgrade linux-image-$(uname -r)
    Debian 更新内核sudo apt update && sudo apt upgrade linux-image-$(uname -r)
    RHEL 更新内核sudo yum update kernel
    查看 CVE 详情https://nvd.nist.gov/vuln/detail/CVE-2026-23111

    📝 结语

    CVE-2026-23111 再次印证了“差之毫厘,谬以千里”——一个字符的错误让 Linux 内核的防御体系形同虚设。所幸上游修复已在 2 月合入,所有主流发行版也已跟进。建议所有运维人员立即检查内核版本并安排重启。安全无小事,更何况只是一个”!”的距离。

    参考来源Ars Technica | The Hacker News | FuzzingLabs

  • 🔥 Linux 7.1-rc7 发布:最终候选版亮相,稳定版下周见

    🔥 Linux 7.1-rc7 发布:最终候选版亮相,稳定版下周见

    6月8日,Linus Torvalds 正式发布了 Linux 7.1 的第 7 个候选版本(rc7),并明确表示”就目前来看,这就是最后一个 RC 了”。这意味着 Linux 7.1 稳定版最早将于 6 月 14 日(下周日) 与用户见面。本文带你快速浏览 rc7 的核心变化,并回顾 7.1 整个周期的重磅新特性。


    🔧 rc7 的关键变化

    Linus 在发布公告中表示,本次 rc7 的补丁量虽然不算”小”,但整体收缩趋势明显——这是任何内核版本进入尾声的标志信号。最大变化集中在 GPU 驱动网络栈 两个领域,其余问题分布比较零散。

    🛡️ AMD ROCm CRIU 安全修复

    rc7 中最引人注目的变化是:AMD 开发的 DRM ioctl(用于 ROCm CRIU 功能)因为安全挑战被 禁用。ROCm CRIU 是 AMD 为 GPU 计算引入的 checkpoint/restore 功能,允许在 GPU 之间迁移计算任务。但由于该 ioctl 存在安全隐患,内核团队决定在修复方案完善前先行关闭。

    # 查看当前内核是否禁用了相关 ioctl
    # 如果内核已经应用 rc7 补丁,则此调用返回 ENOTTY
    dmesg | grep -i rocm
    
    # 检查内核配置
    zcat /proc/config.gz | grep CONFIG_DRM_AMD_ROCK

    🔍 更多 AMD Zen 6 CPU 检测支持

    rc7 扩展了对 AMD Zen 6 微架构的 CPU 检测能力。虽然 Zen 6 产品尚未大规模上市,但内核已开始为后续硬件铺路,确保发布即支持。

    其他值得注意的修复包括:

    • KVM:大量架构相关的修复,主要针对虚拟化场景
    • 文件系统:少量稳定性修复
    • 构建系统:修复了一些特殊配置下的编译失败问题

    📋 Linux 7.1 完整特性回顾

    Linux 7.1 开发周期从 4 月底持续至今,总计约 13,000 个非合并提交。以下是本周期最值得关注的新特性:

    🗂️ 全新内核级 NTFS 驱动

    Linux 7.1 引入了一个全新的内核原生 NTFS 驱动,这是从头重写的实现(并非旧的 ntfs-3g FUSE),支持完整的读写访问,性能远超传统方案。对于需要频繁与 Windows 系统交换数据的双系统用户来说,这是一个重大利好。

    # 确认新 NTFS 驱动已加载(内核 7.1+)
    lsmod | grep ntfs3
    
    # 挂载 NTFS 分区(新驱动自动匹配)
    sudo mount -t ntfs3 /dev/sdX1 /mnt/windows
    
    # 如果希望使用旧驱动,可强制指定
    sudo mount -t ntfs-3g /dev/sdX1 /mnt/windows  # 需安装 ntfs-3g 包

    🖥️ Intel & AMD 新硬件支持

    7.1 周期为以下新型号提供了 初步图形支持

    • Intel Nova Lake(新一代 GPU 图形支持)
    • AMD Zen 6(已在 rc7 中进一步扩展检测支持)

    ⚡ 性能优化与现代化

    此周期还包括了大量代码移除和现代化改造——内核团队在积极推进旧代码的清理工作。此外,Rust for Linux 项目持续推进,图形子系统维护者 Dave Airlie 公开表示支持引入 Rust,认为这有助于吸引年轻一代的开发者参与内核维护。


    🤖 LLM 时代的 Linux 内核开发

    Linus 在本周期多次提到,7.1 周期的补丁量比历史同期”更重”,部分原因可归因于 AI/LLM 编码助手的普及。这不仅带来了更多补丁,也引发了内核维护者对 AI 生成代码质量的讨论。

    与此同时,由 LLM 发现的 vmsplice/splice 系统调用漏洞洪流 正在推动内核社区考虑彻底移除这些历史悠久的零拷贝 API。这标志着 AI 正在从根本上改变开源基础设施的安全维护方式。


    💿 如何测试 rc7

    如果你运行的是滚动更新发行版(如 Arch Linux 或 openSUSE Tumbleweed),可以直接从官方仓库安装 rc7 内核。对于其他发行版,也可以手动编译体验:

    # 从 kernel.org 获取 rc7 源码
    wget https://git.kernel.org/torvalds/t/linux-7.1-rc7.tar.gz
    tar xf linux-7.1-rc7.tar.gz
    cd linux-7.1-rc7
    
    # 使用当前内核配置为基础
    zcat /proc/config.gz > .config
    make olddefconfig
    
    # 编译并安装(多核加速)
    make -j$(nproc)
    sudo make modules_install install
    
    # 重启后确认内核版本
    uname -r
    # 应输出: 7.1.0-rc7

    💡 快速参考

    操作命令/说明
    获取 rc7 源码wget https://git.kernel.org/torvalds/t/linux-7.1-rc7.tar.gz
    查看内核版本uname -r
    挂载 NTFS 分区(新驱动)mount -t ntfs3 /dev/sdX1 /mnt
    确认 NTFS 驱动状态lsmod | grep ntfs3
    检查 ROCm 相关日志dmesg | grep rocm
    官方发布公告Linus 邮件列表

    📌 总结

    Linux 7.1-rc7 的发布标志着 7.1 开发周期进入收官阶段。从全新 NTFS 驱动、新硬件支持到 AI 对内核开发流程的深刻影响,这个周期充满了引人注目的变化。如果你感兴趣,不妨在这最后一周给 rc7 一次测试跑,让 7.1 的最终发布更加稳健。

  • 🔒 Ubuntu 紧急安全更新:Linux 内核修复 Dirty Frag、Fragnesia 及 AppArmor 系列漏洞

    🔒 Ubuntu 紧急安全更新:Linux 内核修复 Dirty Frag、Fragnesia 及 AppArmor 系列漏洞

    6 月 2 日,Canonical 紧急发布了针对 Ubuntu 26.04 LTS 及多个 LTS 版本的 Linux 内核安全更新(USN-8370-1、USN-8371-1),修复了包括 Dirty FragFragnesia 以及 AppArmor 通知子系统 在内的数十个高危漏洞。这些漏洞可被本地攻击者用于提权至 root、逃逸容器,甚至导致内核崩溃。本文梳理受影响范围、漏洞机理与应急修复步骤。


    🔓 漏洞全景:三组高危漏洞链

    本次更新覆盖三大漏洞类别,总 CVE 数量超过 30 个。以下是分类梳理:

    1. Dirty Frag + Fragnesia — 网络子系统提权

    Dirty Frag(CVE-2026-43284、CVE-2026-43500 等)是 XFRM ESP-in-TCP 和 RxRPC 子系统中关于 共享页片段 的逻辑缺陷。攻击者可通过精心构造的网络操作触发该漏洞,实现 本地提权至 root,甚至 逃逸容器。与其高度关联的 Fragnesia(CVE-2026-43503、CVE-2026-46300)则是 XFRM ESP-in-TCP 处理 socket 缓冲区片段时的另一逻辑漏洞,影响同样严重。

    这两组漏洞自 5 月初披露以来已有多家机构发布 PoC,本次 Canonical 的补丁是对此前不完整修复的全面补充和加固。

    2. ptrace 退出竞争条件 — 敏感信息泄露

    CVE-2026-46333 是 ptrace 子系统中一个 exit-race 竞争条件漏洞。当特权进程退出时,非特权本地攻击者可利用时间窗口读取进程残留数据,泄露 SSH 主机密钥和 /etc/shadow 内容。该漏洞已在 CloudLinux 等发行版中确认影响。

    3. AppArmor 通知子系统 — 8 个独立漏洞

    由 Tristan Madani 和 Trevor Lawrence 发现的 AppArmor 系列漏洞(影响内核 6.8/6.17/7.0)涵盖了内存泄漏(CVE-2026-47326)、空指针解引用(CVE-2026-47327)、越界读取(CVE-2026-47332)、持有锁错误(CVE-2026-47334)等多种类型。攻击者可利用这些漏洞造成内核崩溃(oops)、资源耗尽、内存损坏,甚至绕过 AppArmor 策略限制。


    ⚠️ 特别注意:内核 ABI 变更

    本次更新涉及 不可避的 ABI 变更,更新后的内核版本号出现跳跃。这意味着:

    • 如果安装了 第三方内核模块(如 NVIDIA 专有驱动、VirtualBox 内核模块、ZFS 等),必须重新编译并重装
    • 标准 Ubuntu 安装(使用 linux-generic 等 meta 包)会在自动更新时处理此问题
    • 手动管理内核模块的用户需格外留意

    ⚙️ 修复步骤

    更新 & 重启

    标准两步操作,在终端中依次执行:

    # 第一步:更新内核包(Ubuntu 26.04 LTS / 24.04 LTS / 22.04 LTS 通用)
    sudo apt update && sudo apt upgrade -y
    
    # 第二步:重启系统加载新内核
    sudo reboot

    验证当前内核版本

    重启后,检查内核版本是否已更新至修复版本:

    # 查看当前运行的内核版本
    uname -r
    
    # Ubuntu 26.04 LTS 用户应看到 >= 7.0.0-22-generic
    # Ubuntu 24.04 LTS 用户应看到 >= 6.17.0-35-generic
    # Ubuntu 22.04 LTS 用户(USN-8373-1)应通过 apt 确认

    重新编译第三方模块

    如果有第三方内核模块,以 NVIDIA 驱动为例:

    # 重新安装 NVIDIA 驱动(会自动重新编译内核模块)
    sudo apt install --reinstall nvidia-driver-570
    
    # 或者使用 DKMS 自动重建
    sudo dkms autoinstall

    🎯 影响范围

    本次更新涉及的主要 Ubuntu 版本和内核风格:

    • Ubuntu 26.04 LTS (Resolute) — USN-8370-1(kernel 7.0.0-22)
    • Ubuntu 25.10 (Questing) — USN-8371-1(kernel 6.17.0-35)
    • Ubuntu 24.04 LTS (Noble) — USN-8371-1 / USN-8373-1
    • Ubuntu 22.04 LTS (Jammy) — USN-8373-1

    所有内核风格均受影响:Generic、AWS、GCP、Azure、Oracle、IBM、NVIDIA、Raspberry Pi、Real-time。


    💡 快速参考

    操作命令
    检查当前内核版本uname -r
    更新系统包sudo apt update && sudo apt upgrade -y
    查看待重启标记cat /var/run/reboot-required
    重启生效sudo reboot
    查看可用的内核包apt list --upgradable 2>/dev/null \| grep linux-image
    DKMS 自动重建模块sudo dkms autoinstall
    USN-8370-1 原文https://ubuntu.com/security/notices/USN-8370-1

    Canonical 此次大规模内核安全更新覆盖了从 Dirty Frag 提权到 AppArmor 策略绕过等数十个高危漏洞,且涉及 ABI 变更。对于所有 Ubuntu 服务器和桌面用户,立即更新并重启是当前最高优先级操作。建议 sysadmin 在更新后重点检查第三方内核模块是否正常运行,防止因 ABI 变更导致驱动加载失败。

  • 低配 VPS 部署 OpenClaw 完整指南

    低配 VPS 部署 OpenClaw 完整指南

    OpenClaw 是一个轻量的 AI Agent 网关工具。在低配 VPS(1核1G甚至更低)上部署时,需要一些特别的步骤来避免 systemd 服务错误。本文记录完整流程。

    一、安装基本依赖

    1. 安装 curl

    sudo apt-get install -y curl

    2. 添加 NodeSource 官方源(Node 22)

    curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -

    3. 安装 Node.js

    sudo apt-get install -y nodejs

    4. 确认版本

    node -v
    npm -v

    二、安装 OpenClaw

    npm install -g openclaw@latest
    openclaw --version

    三、配置与 systemd 服务

    直接运行 openclaw onboard 开始配置。但 root 用户下会报服务错误,需要手动创建 systemd 服务文件。

    第一步:创建 systemd 服务文件

    cat > /etc/systemd/system/openclaw-gateway.service << 'EOF'
    [Unit]
    Description=OpenClaw Gateway
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/root/.openclaw
    ExecStart=/usr/bin/openclaw gateway
    Restart=always
    RestartSec=3
    Environment=NODE_OPTIONS=--max-old-space-size=512
    Environment=OPENCLAW_NO_RESPAWN=1
    Environment=NODE_COMPILE_CACHE=/var/tmp/openclaw-compile-cache
    Environment=HOME=/root
    
    [Install]
    WantedBy=multi-user.target
    EOF

    第二步:设置运行时目录(如仍报错)

    如果仍然报运行时目录错误,执行:

    export XDG_RUNTIME_DIR=/run/user/$(id -u)
    loginctl enable-linger root
    echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc

    第三步:启动服务

    systemctl --user daemon-reload
    systemctl --user enable openclaw-gateway.service
    systemctl --user start openclaw-gateway.service

    第四步:确认状态

    openclaw status

    四、网关诊断与 Cerebras 配置参考

    网关诊断

    openclaw gateway probe
    openclaw gateway restart   # 重启服务

    Cerebras API 配置示例

    在 OpenClaw 配置中添加 Cerebras 作为 provider:

    {
      "models": {
        "providers": {
          "cerebras": {
            "baseUrl": "https://api.cerebras.ai/v1",
            "apiKey": "你的Cerebras API Key",
            "api": "openai-completions",
            "models": [
              {
                "id": "gpt-oss-120b",
                "name": "gpt-oss-120b",
                "contextWindow": 128000,
                "maxTokens": 32000
              }
            ]
          }
        }
      }
    }

    五、卸载

    需要完全卸载时的操作步骤:

    1. 停止并禁用服务

    systemctl stop openclaw-gateway.service
    systemctl disable openclaw-gateway.service

    2. 删除服务文件

    rm /etc/systemd/system/openclaw-gateway.service
    systemctl daemon-reload

    3. 卸载 openclaw

    npm uninstall -g openclaw

    4. 删除数据目录

    rm -rf /root/.openclaw

    5. 确认进程已终止

    ps aux | grep openclaw
  • Ubuntu 上如何配置防火墙?—— UFW 快速入门

    Ubuntu 上如何配置防火墙?—— UFW 快速入门

    Ubuntu 上,默认情况下是没有启用防火墙的。服务器安装完系统后,配置防火墙应该是第一件要做的事。本文用最简洁的方式带你配好 UFW。

    🔥 Ubuntu 自带的防火墙工具

    Ubuntu 默认自带的、也是推荐使用的防火墙管理工具是 UFWUncomplicated FireWall,简单防火墙)。

    • UFWiptables 的用户友好前端,日常管理比直接写 iptables 规则方便得多。
    • 语法简单、学习成本低、适合服务器日常运维。

    ⚙️ 防火墙设置与管理

    1. 启用防火墙

    配置规则之前,建议先启用 UFW。⚠️ 但有一个前提:请先确保你已经放行了 SSH(端口 22),否则启用后自己会被锁在服务器外面。

    先放行 SSH:

    sudo ufw allow ssh

    然后启用防火墙:

    sudo ufw enable
    sudo ufw status          # 查看状态
    sudo ufw status verbose  # 查看详细状态 + 默认策略

    2. 设置默认策略

    默认策略决定了没有匹配规则的连接如何处理:

    sudo ufw default deny incoming    # 拒绝所有传入(最安全)
    sudo ufw default allow outgoing   # 允许所有传出(默认)

    🔓 开放端口与服务

    A. 按端口号开放

    # 开放 TCP 端口(最常用)
    sudo ufw allow 80/tcp    # HTTP
    sudo ufw allow 443/tcp   # HTTPS
    
    # 开放 UDP 端口
    sudo ufw allow 53/udp    # DNS
    
    # TCP + UDP 同时开放
    sudo ufw allow 123       # NTP

    B. 按服务名称开放

    UFW 内置了常用服务名(映射到 /etc/services):

    sudo ufw allow ssh       # TCP 22
    sudo ufw allow http      # TCP 80
    sudo ufw allow https     # TCP 443

    C. 按应用程序配置文件开放

    某些程序安装时会自带 UFW 配置文件:

    # 查看可用的应用程序配置
    sudo ufw app list
    
    # 开放特定应用
    sudo ufw allow 'Nginx Full'

    🗑️ 删除与重置

    删除规则

    # 删除一条规则
    sudo ufw delete allow 80/tcp

    重置防火墙(谨慎!)

    ⚠️ 此操作会删除所有规则并禁用防火墙

    sudo ufw reset

    💡 快速参考卡片

    操作命令
    启用防火墙sudo ufw enable
    查看状态sudo ufw status verbose
    开放端口sudo ufw allow 80/tcp
    开放服务sudo ufw allow ssh
    删除规则sudo ufw delete allow 80/tcp
    重置sudo ufw reset

    做到这四步——放行 SSH、启用、配默认策略、开放必要端口——你的 Ubuntu 服务器防火墙就算配好了。