IT技术博客大学习 共学习 共进步
首页 / delphij's Chaos
IT 2026-05-10 18:36:52 / 浏览 0 new

Postmortem: 关于 xzutil 后门事件的一些事后复盘

xzutils 后门事件是近年来最具代表性的开源供应链攻击案例之一。本文不是重复介绍漏洞原理,而是从 FreeBSD 维护者的角度,复盘这一事件如何影响系统发行版的第三方软件引入流程。 文章指出,FreeBSD 最终没有受到实际影响,很大程度上来自其重写 build 部分、删除用例代码等工程实践。但作者也坦承,这并不意味着流程无懈可击,尤其是在使用上游签名 tarball、比较 git 内容、运行构建脚本等环节,仍然存在被攻击者利用的空间。 最值得关注的是,文章把供应链攻击的目标从“最终用户系统”前移到了“维护者本人”。如果维护者在本机、非隔离环境中执行下载来的代码或生成脚本,攻击者完全可能先攻破维护者环境,再进一步污染下游生态。 这篇文章适合关注开源治理、发行版维护和软件供应链安全的读者阅读。它的价值不在于给出复杂技术细节,而在于提醒团队重新审视日常维护流程中的默认信任。

IT 2026-05-10 17:49:31 / 浏览 0 new

git submodule 与 subtree 的异同

很多团队在拆分大型 Git 仓库时,都会遇到 submodule 和 subtree 的选择问题。本文围绕两种方案的实际维护体验展开分析,而不是只停留在命令层面对比。 作者认为,submodule 更符合“仓库独立治理”的设计目标,适合需要清晰边界、独立版本管理和长期维护的大型项目;而 subtree 虽然使用门槛更低、clone 更方便,但容易造成代码冗余和仓库持续膨胀。 文章比较有价值的地方在于,它没有单纯强调“哪种更简单”,而是从架构治理、团队协作和长期维护成本角度讨论问题,适合已经进入中大型工程阶段的团队参考。 如果你正在做 monorepo 拆分、多仓库治理,或者维护复杂依赖关系,这篇文章值得一读。

IT 2026-05-10 17:39:55 / 浏览 0 new

C++ 中的 main 定义

    新的 C++ 标准中 不允许给 main 指定 linkage-specification 了。     当然,考虑到原本 main() 也是 C 运行环境在开始运行程序的时候调用的, 而 C 运行环境自然也预期 C linkage,即不按照 C++ 的习惯对符号根据参数增加名字前缀, 因此大部分编译器在遇到 C++ 程序定义全局 main() 的时候也会按照习惯采取 C linkage 方式去翻译。这一规则首先被 GCC 采纳,随后 LLVM 也跟进了。     然而我今天遇到一个奇葩彻底把我雷到了。

IT 2021-05-24 22:46:03 / 浏览 2,460

用 Pomerium 来实现基于身份的访问控制

Google 在十年前提出了一套名为 BeyondCorp 的零信任网络的安全方案。这套方案想要完整地实现还是有一定门槛的,在这种模型下,企业内网不再作为一个安全边界存在,相反即使在内网进行的访问也必须进行和外网同样的鉴权与访问控制。最终的改造方向是内网不再是一个特权网络,每个终端上部署的客户端证书主要是作为一项身份信息来使用。

IT 2021-05-24 22:45:21 / 浏览 1,680

在家工作一周年

人生如白驹过隙,早上翻看公司的 Calendar,今天竟然已经是在家工作的第365天了, 写这么一篇来稍微记录一下过去的一年。

IT 2021-05-17 23:26:41 / 浏览 1,640

修复 MySQL 编码问题

有个疑似 OCD 患者最近抽风升级了一下 MySQL 数据库,然后发现 blog 里面全都变成了乱码。 那乱码的模式一看就是把 utf8 直接扔进了 latin1 的数据库,一看 SHOW CREATE TABLE mt_entry 发现果然如此。

IT 2010-01-05 13:04:32 / 浏览 2,920

文件系统与大扇区

大扇区(超过旧式标准的512字节扇区)是改善硬件工艺或访问方式以后的一种直接提高存储密度的方法。对于磁介质来说,其盘片被分成若干的磁道(通常是同心圆)、每个磁道分成若干的扇区或称扇段,扇区是磁盘读写时的最小操作单元。对于基于闪存的存储设备而言,扇区则是一种模拟传统磁盘的概念。对于磁盘来说,由于它是一种机械和电子一体化设备,由于各种原因的限制,其寻址和持续读写的可靠性方面都有一定的限制,例如,马达维持...

IT 2009-12-23 09:38:52 / 浏览 3,200

网址缩短服务

前一段时间帮一个朋友做了一个非常简单的网址缩短服务,已经上线运行了一段时间,这里把当时设计的一些想法分享出来,等有时间我会把代码也发布出来,程序很简单,用 web.py 做的。网址缩短服务需要考虑两个问题,第一个问题是如何有效地查询,即,作为约束条件,在访问"短网址"的时候,它必须能够迅速的将结果返回;第二个问题是如何有效地将写操作复制出去。还有一点就是,缩短形成的短网址要真的越短越好。接口整个服务包括两个...

IT 2009-12-14 22:50:29 / 浏览 7,840

Buffer和cache的区别是什么?

buffer和cache是两个经常被混为一谈的概念。从直观上说,两者都具备改善系统 I/O 吞吐量的能力,但是这两个概念是有区别的,其提高系统I/O吞吐量的原因也不尽相同。cache改善系统性能的主要原因是数据访问的 局部性,即,通常应用程序在一段时间内操作的数据集的某个有限的部分,通常是很小的一部分。硬件实现的cache通常会只使用一小块(与主存相比)访问速度很快,但相对比较昂贵的存储部件,并放置于距离CPU较近的位置。buffer...

IT 2009-11-09 09:30:20 / 浏览 1,740

用hints固定硬盘设备名

今天听 Doug White 大牛说有这个功能,于是查了一下资料,先记一笔,不一定对,有机会找机器测试一下。首先要定义SCSI/SAS总线所在的位置。通常它是由某个SCSI接口卡提供的,也就是类似这样:hint.scbus.0.at="mpt0"这表示 scbus0 是 mpt0。如果一块卡支持多个 SCSI 总线,则还应额外指定 bus 参数。接下来是每块硬盘的位置。SCSI/SAS设备可以由3个参数来唯一定位:总线、目标(target)和单元(LUN)。例如总线0、目标0、单元0上...

IT 2009-11-09 09:29:16 / 浏览 2,720

客户端应该去计算什么?

这是一个很有意思的话题:随着计算机技术的发展,客户端的计算能力越来越强。想要提高在服务器端运行的系统的负载能力,最直接有效的办法就是把计算任务尽可能交给客户端去做,并减少两者之间的交互;然而,另一方面,这样做又可能会带来一些其他问题,例如,客户端完成某些计算任务的时候可能会比较慢(因为在客户端可以用到的资源比较少,想要保持兼容性最好的办法就是只使用普适的Java Script子集),或者,作为安全系统的一个...

IT 2009-11-09 09:28:35 / 浏览 3,780

ZFS性能的一些优化结论

最近几天测试了一下盘很多(具体说是24块盘,其中2块热备的JBOD)的时候ZFS的性能特点。一些结论a) ZFS的随机读性能比较差(相对于顺序读写)。这一点除了改为用mirror而不是raidz1/z2之外似乎没什么太好的办法。同样多的硬盘做成两组raidz1(11+11+2),与做成两块盘一组的11组mirror的pool相比,针对同样的数据集的随机读性能相差可达10倍多,当然,mirror的结果是顺序写性能会差一些。作为副作用,mirror时的读性能可提高大约...

IT 2009-11-09 09:28:15 / 浏览 2,100

DMA设备驱动的常见问题

DMA (Direct Memory Access) 是一种提高计算机系统并发能力的技术。简单地说,它允许外围设备以异步方式操作内存,从而减少了CPU在I/O操作中的参与。目前的微机和PC服务器都广泛采用了 DMA 技术。由于 DMA 是一种异步操作,因此在撰写驱动时,有很多需要注意的问题。第一类比较常见的问题是,并不是所有的 DMA 控制器或设备都有能力访问全部物理内存,或对访问有限制。例如,许多低端存储设备和网卡往往只能访问物理内存的前4GB,...

IT 2009-10-21 09:03:21 / 浏览 3,920

为什么重复free()比内存泄漏危害更大

C程序设计中,内存操作相关的错误可以说是最常见,同时也是非常隐蔽的一类错误。这类错误往往导致程序莫名其妙地崩溃、耗尽系统资源,或是形成严重的安全弱点。在 FreeBSD,以及多数其他 BSD 派生的系统中,重复 free() 在默认情况下都会导致 C 函数库调用 abort() 终止程序。除了 malloc(3) 函数族本身的设计之外,这也是一项非常重要的安全特性。与此相反,包括 *BSD 在内的多数系统的 C 函数库并不对堆进行审计,也就是说,从 A...

IT 2009-10-21 09:03:05 / 浏览 3,060

NULL指针引用和内核bug的利用

总算是发公告了,可以说具体的事情了。FreeBSD昨天发布了2项安全公告和1项Errata Notice:SA-09:13.pipe、SA-09:14.devfs和EN-09:05.null。两个安全公告修正的是同一类问题,也就是我们常说的多线程程序中的竞态条件(Race Condition);EN-09:05.null则是增加了一个使这类问题不再那么容易被利用达到特权提升目的的功能,但默认并不启用。在 C 程序中,NULL 指针是一项很有用的特性。NULL有很多功能,例如: 表示链表结束,或指针...

IT 2009-10-21 09:02:31 / 浏览 2,540

另外一种DSR结构

dawnh在之前的人肉traceback中提到了 另一种DSR结构。即: 服务器端将虚拟IP绑在lo0上(子网掩码为/32);----确保服务器收包、不广播ARP; 负载平衡设备接Internet的网口接路由器进来的VLAN;("VLAN-Internet")----从Internet进入的包发到负载均衡设备上; 负载平衡设备的内网网口能够到达服务器;("VLAN-Incoming")----负载均衡设备将请求根据负载均衡的条件路由到VLAN-Incoming上的服务器; 路由器提供一个绑定某一内网网址...

IT 2009-10-21 09:01:56 / 浏览 2,720

解释一下DSR结构中服务器IP地址的配置

因为有人在我前一篇blog《使用DSR模式实现单IP服务冗余》里提了个问题,这里解释一下。DSR比较常见的两种配置,一种是我之前文章中提到的禁止外网网卡ARP的方法,另一种是把虚拟IP绑定到lo0上。这两种方法各自有一些优缺点。一般来说,我喜欢用前一种方法。实现DSR结构的关键是,通往Internet路由器的那个网络上,只有负载平衡设备在网络上宣示虚拟出来的那个IP的MAC地址,这样,当请求进来的时候,数据会发到负载平衡设备,而不是...

IT 2009-10-21 09:01:31 / 浏览 2,740

ZFS实现快速部署(作弊条)

FreeBSD从8.0开始支持从ZFS引导系统,因此,可以使用ZFS的快照功能来实现快速部署。新机器使用LiveFS启动,Fix it,CDROM。kldload /dist/boot/kernel/nullfs.komount_nullfs /dist/boot /bootkldload tmpfskldload zfs如果需要,此时用dd抹除硬盘内容,例如 dd if=/dev/zero of=/dev/da0 bs=1m count=1gpart create -s gpt da0(重复此步直到所有硬盘皆包含GPT分区表)gpart add -b 34 -s 128 -t freebsd-boot da0(实际上只有启...

IT 2009-10-21 09:01:14 / 浏览 2,980

使用DSR模式实现单IP服务冗余

FreeBSD支持以DSR(Direct Server Return,即服务器直接将流量通过路由器返回,而不经过负载平衡设备;俗称"单臂模式")模式提供服务。为了改善服务的可用性,可以使用这种方法来配置服务器。这种方法非常适合于大并发、大流量的环境。网络及服务器的规划首先,需要对服务可能产生的负载、流量进行估计,并据此设计网络的结构。DSR结构极大地降低了负载平衡设备成为瓶颈的可能,但仍对它们有一些要求,因此,设计者需要考虑下面一...

IT 2009-10-14 23:45:05 / 浏览 2,240

SYNCookie反制

最近看到一个很有意思的攻击。记一笔。针对 SYN Flood 攻击(特点是攻击者发出大量 SYN 请求,但并不完成 TCP 握手),目前操作系统会采用 SYNcookie 予以反制。FreeBSD上的实现是在系统资源充足的时候采用标准的握手机制,而当发现存在可能的攻击(即可用的 TCP 状态资源不足时)应用 SYNcookie;SYNcookie是将TCP状态建立推迟到三次握手 之后,具体做法是将服务器本地的一个秘密数据与来源/目的IP、端口编码来形成序号来发出SYN+...