杰哥的{教学,运维,编程,调板子}小笔记
升级 Ceph 集群到 20 Tentacle 版本
背景
之前一直用 Cephadm 维护了一个 Ceph 集群,作为一个 K8s 集群的存储,通过 Rook External Ceph Cluster 来维护。Ceph 出了一个比较严重的 CVE-2025-30156,需要把已有的 key 都 rotate 一遍,这里把这个过程记录一下。
升级过程
最开始的时候,Ceph 版本是 19.2.3,Rook 版本是 1.18.11,此时这个 Ceph 版本是有安全问题的,需要升级,核心就是上面的那个 CVE:原来的认证用的是 aes 算法,无论是客户端还是 Ceph 自己的各服务。但是,这个算法的实现有安全问题,居然用固定的 IV,还是 AES-128-CBC,所以需要换到新的 aes256k 上,然后把原来的 key 都淘汰掉。Ceph 的各服务和 Rook 自己的客户端都好说,升级版本以后,就可以替换为新的 key,麻烦的是,很多 CephFS 是通过 Linux 内核挂载的,而 Linux 内核直到 7.0 才支持 aes256k。旧版本内核,如果指定 aes256k 的 secret,会说 secret length 错误,无法挂载。
所以第一步,就是给各虚拟机都升级到了 7.0 的内核:trixie 和 trixie-security 都不够新,所以就用了 trixie-backports 的 7.2 内核。
升级完 Linux 内核后,就可以开始动手升级 Ceph 了,首先用 cephadm 升级 Ceph 到 20.2.5:
经过一段时间的等待,Ceph 的各服务都升级到了 20.2.5,并且 Cephadm 自动把服务用到的各种 key 都替换成了 aes256k。但是,还是有一些 key 需要手动操作,比如 client.admin。参考 Upgrading and Rotating CephX Keys,把 client.admin 的 key 给 rotate 掉:
对于 Cephadm,修改一台机器上的
剩下的需要 Rotate 的 key,就都是 Rook 需要的了:
● client.csi-cephfs-node
● client.csi-cephfs-provisioner
● client.csi-rbd-node
● client.csi-rbd-provisioner
● client.healthchecker
这些 Key 都保存在 rook ceph 用于 external cluster 的 namespace 里的各 secret,根据名字很容易找到。我把 Rook 升级到 v1.21.2 后,直接在 Headlamp 里手动做的替换,虽然官方也给了脚本,但是脚本有一些依赖装起来比较麻烦,有 APT 的依赖问题。以 client.csi-cephfs-node 为例,其实就是:
然后把新的 key,替换掉 rook-csi-cephfs-node Secret 里面的 adminKey。其他几个也是类似的。
把所有的 key 都 rotate 成 aes256k 后(通过看 key 的长度能看出是 aes 还是 aes256k),禁用旧的 aes key 的使用:
最后,ceph health 没有任何关于 insecure key 的 warning,就算迁移完成。
参考文档
● Upgrading and Rotating CephX Keys
● CVE-2025-30156: AES-CBC misuse in CephX facilitating authentication bypass
● Ceph CVE notice and Rook advisory
source
升级 Ceph 集群到 20 Tentacle 版本
背景
之前一直用 Cephadm 维护了一个 Ceph 集群,作为一个 K8s 集群的存储,通过 Rook External Ceph Cluster 来维护。Ceph 出了一个比较严重的 CVE-2025-30156,需要把已有的 key 都 rotate 一遍,这里把这个过程记录一下。
升级过程
最开始的时候,Ceph 版本是 19.2.3,Rook 版本是 1.18.11,此时这个 Ceph 版本是有安全问题的,需要升级,核心就是上面的那个 CVE:原来的认证用的是 aes 算法,无论是客户端还是 Ceph 自己的各服务。但是,这个算法的实现有安全问题,居然用固定的 IV,还是 AES-128-CBC,所以需要换到新的 aes256k 上,然后把原来的 key 都淘汰掉。Ceph 的各服务和 Rook 自己的客户端都好说,升级版本以后,就可以替换为新的 key,麻烦的是,很多 CephFS 是通过 Linux 内核挂载的,而 Linux 内核直到 7.0 才支持 aes256k。旧版本内核,如果指定 aes256k 的 secret,会说 secret length 错误,无法挂载。
所以第一步,就是给各虚拟机都升级到了 7.0 的内核:trixie 和 trixie-security 都不够新,所以就用了 trixie-backports 的 7.2 内核。
升级完 Linux 内核后,就可以开始动手升级 Ceph 了,首先用 cephadm 升级 Ceph 到 20.2.5:
ceph orch upgrade start --image quay.io/ceph/ceph:v20.2.5
经过一段时间的等待,Ceph 的各服务都升级到了 20.2.5,并且 Cephadm 自动把服务用到的各种 key 都替换成了 aes256k。但是,还是有一些 key 需要手动操作,比如 client.admin。参考 Upgrading and Rotating CephX Keys,把 client.admin 的 key 给 rotate 掉:
ceph mon set auth_allowed_ciphers aes,aes256k
ceph mon set auth_preferred_cipher aes256k
ceph auth get-or-create client.admin-backup mon "allow *" | tee ./client.admin-backup.keyring
ceph -n client.admin-backup -k ./client.admin-backup.keyring auth ls
ceph auth rotate --key-type=aes256k client.admin | tee ./client.admin.keyring
对于 Cephadm,修改一台机器上的
/etc/ceph/ceph.client.admin.keyring,把里面的 admin key 换了,然后分发到其他机器上:ceph orch client-keyring set client.admin "label:_admin"
剩下的需要 Rotate 的 key,就都是 Rook 需要的了:
● client.csi-cephfs-node
● client.csi-cephfs-provisioner
● client.csi-rbd-node
● client.csi-rbd-provisioner
● client.healthchecker
这些 Key 都保存在 rook ceph 用于 external cluster 的 namespace 里的各 secret,根据名字很容易找到。我把 Rook 升级到 v1.21.2 后,直接在 Headlamp 里手动做的替换,虽然官方也给了脚本,但是脚本有一些依赖装起来比较麻烦,有 APT 的依赖问题。以 client.csi-cephfs-node 为例,其实就是:
ceph auth rotate --key-type=aes256k client.csi-cephfs-node
然后把新的 key,替换掉 rook-csi-cephfs-node Secret 里面的 adminKey。其他几个也是类似的。
把所有的 key 都 rotate 成 aes256k 后(通过看 key 的长度能看出是 aes 还是 aes256k),禁用旧的 aes key 的使用:
ceph config set mon 'mon auth allow insecure key' false
ceph mon set auth_service_cipher aes256k
ceph auth wipe-rotating-service-keys
ceph mon set auth_allowed_ciphers aes256k
最后,ceph health 没有任何关于 insecure key 的 warning,就算迁移完成。
参考文档
● Upgrading and Rotating CephX Keys
● CVE-2025-30156: AES-CBC misuse in CephX facilitating authentication bypass
● Ceph CVE notice and Rook advisory
source
政府网站也开始用AI重构了
https://sbj.cnipa.gov.cn/
https://sbj.cnipa.gov.cn/
杰哥的{教学,运维,编程,调板子}小笔记
用 XRDP + X11 转发实现带音频的图形界面转发
背景
最近遇到一个需求,在机器 A 上跑一个图形界面程序,但因为是远程访问,所以传统的办法就是开个 X11 Forwarding,或者跑个 VNC/RDP Server。但我有音频转发的需求,本地是 macOS,又不好在机器 A 上装 XRDP+桌面环境,于是在机器 B 上跑 XRDP Server,在机器 A 上通过 X11 Forwarding + Unix Socket Forwarding 实现图形界面和音频在机器 B 上的播放,再通过 RDP 客户端在 macOS 上实现带音频的图形界面浏览。
具体实现方法
具体实现方法不难,主要是在机器 B 上做一些配置:
1. 安装 XRDP,配置桌面环境,我用的是 Xfce4
2. 安装 pipewire-module-xrdp,关闭 pulseaudio 服务,改为 pipewire + pipewire-pulse + wireplumber
3. 带 X11 Forwarding 连接到机器 A,同时通过 Unix Socket 转发 pulseaudio 的 Unix Socket:
然后在 SSH Session 里跑带图形界面的程序即可,它就会通过 ssh 转发的 X11 在 XRDP 的 DISPLAY 上显示,再通过 pulse/native 的 Unix Socket 播放音频。
最后,通过 RDP Client(Windows App)连接到机器 B,就可以在看到图形界面的同时,也有正确的音频了。
source
用 XRDP + X11 转发实现带音频的图形界面转发
背景
最近遇到一个需求,在机器 A 上跑一个图形界面程序,但因为是远程访问,所以传统的办法就是开个 X11 Forwarding,或者跑个 VNC/RDP Server。但我有音频转发的需求,本地是 macOS,又不好在机器 A 上装 XRDP+桌面环境,于是在机器 B 上跑 XRDP Server,在机器 A 上通过 X11 Forwarding + Unix Socket Forwarding 实现图形界面和音频在机器 B 上的播放,再通过 RDP 客户端在 macOS 上实现带音频的图形界面浏览。
具体实现方法
具体实现方法不难,主要是在机器 B 上做一些配置:
1. 安装 XRDP,配置桌面环境,我用的是 Xfce4
2. 安装 pipewire-module-xrdp,关闭 pulseaudio 服务,改为 pipewire + pipewire-pulse + wireplumber
3. 带 X11 Forwarding 连接到机器 A,同时通过 Unix Socket 转发 pulseaudio 的 Unix Socket:
DISPLAY=XRDP_DESKTOP_HERE ssh -X -Y -R /run/user/UID_A_HERE/pulse/native:/run/user/UID_B_HERE/pulse/native host_a然后在 SSH Session 里跑带图形界面的程序即可,它就会通过 ssh 转发的 X11 在 XRDP 的 DISPLAY 上显示,再通过 pulse/native 的 Unix Socket 播放音频。
最后,通过 RDP Client(Windows App)连接到机器 B,就可以在看到图形界面的同时,也有正确的音频了。
source
2026年CoLT也是标配了
CoLT: Coalesced Large-Reach TLBs, MICRO 2012
CoLT: Coalesced Large-Reach TLBs, MICRO 2012
极客湾也是用上topdown了
Chips and Cheese
“Performance” Oryon: Qualcomm’s Little Core
#ChipAndCheese
Telegraph | source
(author: Chester Lam)
“Performance” Oryon: Qualcomm’s Little Core
#ChipAndCheese
Telegraph | source
(author: Chester Lam)
Arch Linux: Recent news updates
Update to php ≥ 8.5.12 and/or php-legacy ≥ 8.3.36 to prevent remote code execution
PHP versions prior to 8.5.12 and 8.3.36 are affected by CVE-2026-109618 and CVE-2026-109619, which allow for remote code execution.
For any system publicly exposing a PHP application with the help of a prior version of PHP, we urge users to upgrade those systems to the latest available version of PHP (php ≥ 8.5.12 and php-legacy ≥ 8.3.36) immediately.
source
(author: David Runge)
Update to php ≥ 8.5.12 and/or php-legacy ≥ 8.3.36 to prevent remote code execution
PHP versions prior to 8.5.12 and 8.3.36 are affected by CVE-2026-109618 and CVE-2026-109619, which allow for remote code execution.
For any system publicly exposing a PHP application with the help of a prior version of PHP, we urge users to upgrade those systems to the latest available version of PHP (php ≥ 8.5.12 and php-legacy ≥ 8.3.36) immediately.
source
(author: David Runge)
Arch Linux: Recent news updates
Update to ca-certificates-mozilla ≥ 3.131.1-1 to prevent man-in-the-middle attacks
On 2026-10-20 it was revealed, that several certificates of the eMudhra intermediate Certificate Authority have been compromised.
The compromised certificates have been removed/invalidated with ca-certificates-mozilla ≥ 3.131.1-1.
Without an update to this central certificate bundle, systems are susceptible to man-in-the-middle attacks. As such, we urge everyone to upgrade their systems immediately.
source
(author: David Runge)
Update to ca-certificates-mozilla ≥ 3.131.1-1 to prevent man-in-the-middle attacks
On 2026-10-20 it was revealed, that several certificates of the eMudhra intermediate Certificate Authority have been compromised.
The compromised certificates have been removed/invalidated with ca-certificates-mozilla ≥ 3.131.1-1.
Without an update to this central certificate bundle, systems are susceptible to man-in-the-middle attacks. As such, we urge everyone to upgrade their systems immediately.
source
(author: David Runge)
Chips and Cheese
Nvidia Vera’s System Architecture: Pushing Bandwidth
#ChipAndCheese
Telegraph | source
(author: Chester Lam)
Nvidia Vera’s System Architecture: Pushing Bandwidth
#ChipAndCheese
Telegraph | source
(author: Chester Lam)