delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

04 Jul 2022

Telegram Premium

Telegram 最近宣布了其订阅付费计划。 说起来我也不是特别信任其安全/隐私方面的特性(*),不过作为一个跨平台即时通讯软件来说, 其在不同平台上的功能基本上做到了完全一致,并且在这个礼崩乐坏 的时代,能够在不同平台上都做到不狂吃CPU/内存,在不同平台上的界面行为上高度一致, 并且完全没有各种令人抓狂的智障设计(举例来说:随便干什么事情都弄个二维码还非让你扫描一下借此获得摄像头权限、 多机登录时以手机为主并且时不时就得再扫描一次二维码、完全无法回溯的会话引用、 没头没脑地给一条「有人@你」的通知,却无法迅速定位到消息等等),并且公开客户端源代码以便第三方进行代码审计, 确实是十分难得的。

Read more...
20 Jun 2022

作弊条:SSH 的 ProxyJump 跳板服务

问题

有些环境中,SSH 服务器可能无法从 Internet 直接访问(例如,SSH 服务器可能使用的是一个私有 IP 地址,或是 Internet 服务提供商没有提供 IPv6 服务,而 SSH 服务器只提供 IPv6 服务)。

考虑到 SSH 已经进行了相互认证(连接时客户端会验证服务器的公钥是否与已知公钥,例如 ~/.ssh/known_hosts, 或是通过 DNSsec 发布的 SSHFP RR 匹配;服务器端则会验证用户是否能证明自己拥有与授权公钥对应的私钥), 因此比较常见的解决方法便是使用 VPN、在防火墙上穿孔,或是使用代理服务器。

由于 SSH 自身也提供了许多转发功能,因此如果中间的跳板服务器也提供 SSH 服务, 便可以使用这些跳转服务器直接作为代理服务器来用。与前面那些传统方法相比, 这样做的优点是避免了安装额外的软件,也不需要特别指定端口。

Read more...
12 Jun 2022

用 BHyVe 虚拟机解决 FreeBSD Wi-Fi 驱动的问题

BHyVe https://www.FreeBSD.org/ 10.0-RELEASE 起,系统提供了一个最早由 NetApp 开发的使用处理器提供的虚拟化硬件支持 (目前是 Intel VT 和 AMD-V;针对 ARM 平台的支持也在 https://reviews.freebsd.org/D26976) 的虚拟化环境 https://wiki.freebsd.org/bhyve,这套虚拟化环境可以运行支持 VirtIO 规范的各种操作系统,并提供了 UEFI 支持。 这套环境提供了 PCI 直通(passthrough) 能力。通俗地说,PCI 直通是直接把某个或某些原本应该由宿主(host) 管理的 PCI 总线上的硬件交给虚拟机(guest), 而非以虚拟化的方式由宿主系统代为管理的方式。 这样做的本意是绕过一层抽象来获得更好的性能,但有时也可以用来实现一些其他的目的。 FreeBSD 的 Wi-Fi 支持 FreeBSD 的 802.11 支持是 2003 年左右由 Sam Leffler 在引入 Atheros (现已被高通收购) 无线网卡支持时实现的。此后基于这套支持和公开文档,人们开发了一系列 Wi-Fi 驱动。 由于无线网络设备厂商已经在 Linux 驱动开发上进行了大量投资,目前 Linux 的 Wi-Fi 驱动较 FreeBSD 来说更为丰富。由于大部分此类驱动采取了 GPL / BSD 双许可证的授权, 因此比较理想的做法是实现 Linux 内核接口从而直接利用这些驱动,而不是从头重新开发一遍。 wifibox 考虑到已经有了虚拟化环境的支持,另一种可行的做法便是直接运行一个精简版的 Linux,用它来管理 Wi-Fi 硬件,然后通过 virtnet 来把网络接到 FreeBSD 上面来用。这样一来这个 Linux 虚拟机便实际上承担了驱动的角色。目前这种做法已经加入了 port (net/wifibox) 并可通过 pkg 直接安装。 Read more...
22 May 2022

伊万·伊万诺维奇的苏联笑话

苏联笑话经久不衰,今天看到方叔亲身经历的 伊万·伊万诺维奇现实版。 这个笑话还是挺逗的,第一次看到这个笑话应该还是中学时下了课跑去海淀图书城看到的闲书里看到的, 大致上是这样: 一个英国人、一个法国人和一个苏联人聚在一起讨论什么是世上最幸福的事情。 英国人说:最幸福的事情就是寒冷的冬夜在家里的壁炉前暖和。 法国人说:你们英国人太古板了,最幸福的事情是应该是和一个金发女郎一起去度假,然后好聚好散。 苏联人说:Ewww,你们这个都不行,最幸福的事情应该是:半夜有人敲门,开门后对方亮出克格勃证件说:「伊万·伊万诺维奇,您被捕了!」而我回答说:「克格勃同志,您搞错了,伊万·伊万诺维奇住在隔壁!」 Read more...
07 May 2022

用 FIDO key 来做 SSH key

OpenSSH 8.2 中新增了 FIDO/U2F 支持。 它支持两种密钥对类型: ecdsa-sked25519-sk。需要注意的是并非所有的 FIDO Security Key 都实现了 ed25519-sk 的硬件支持:例如,截至2022年,Titan Security Key 就不支持 ed25519-sk

使用 FIDO key 的 SSH key 在使用上和之前的 SSH key 类似, 主要的区别在于在登录时系统会确认用户是否在机器旁边(通常是碰一下 FIDO key), 这可以显著地改善安全性:与之前的 SSH key 不同的是, 即使机器上的 U2F/FIDO SSH key 私钥文件被攻击者获得, 在没有硬件 FIDO key 的情况下也无法使用这个私钥。 对于对方同时能获得私钥文件和物理访问的情况, 参见 xkcd/538,就不要跟扳手过不去了。

Read more...
03 May 2022

今天份草台

我觉得这事必须得记一笔。

去年9月的时候,我和张师傅在 eBay 上团购了两台 Juniper NFX250-S2。 昨天周师傅问我当时付了多少钱,于是我就打开了浏览器准备去 eBay 查一下交易记录。

诶?右上角那是啥?使用 Gmail 账户登录?这比他们自己那个 2FA 实现好多了啊,我于是想都没想就点了一下。

Read more...
01 May 2022

这是一个由草台班子运行的世界

上个月初带娃去佛罗里达那边休假,在机场租了辆车。这次的租车公司相当先进,完全不需要去排队或是在租车公司的触摸屏上再次确认, 直接在手机应用中确认之后,系统就直接给出了车的位置、型号(Ford Mustang),直接过去开门上车就可以出发了。

开始导航,一会谷歌地图显示去目的地基韦斯特 (Key West) 岛发生了大堵车。

「这题我会」,我想,顺手掏出了另一部手机上的苹果地图导航,发现果然也是出现了堵车。

此地是自古华山一条路,如果桥上发生事故,堵车实属正常。正想着,谷歌地图通知我说您稍微绕一下可以节省四个小时。 「太及时了!」看到堵车地点位于罗纳德里根收费公路附近,我毫不犹豫地跟随指示朝西开去。

走着走着,车的胎压报警突然亮了起来,配合了一段文字:「胎压传感器故障(Tire pressure sensor fault) 」。 这一路上估计车速会比较快,我不敢怠慢,赶快找了附近的一家加油站下车检查。 先是目测,发现轮胎没有显著的变扁,用手使劲按压也没发现什么问题, 于是到气泵处拿气泵带的压力表测了一下,发现胎压完全正常。

Read more...
16 Apr 2022

用 poudriere 完成包管理

由于使用的 port 的编译选项与官方的往往不一致(例如我非常讨厌 gnutlsavahi 这两个包,此外有时我希望使用一个和官方不太一样的 OpenLDAP 版本, 或者采用不同的编译选项等等),我之前一直是 portmaster(8) 的用户。 portmaster 是 Doug Barton 早年用 shell 脚本写的一个 portupgrade(1) 的替代品,和后者相比,它不需要使用数据库,并且充分利用了 shell 的任务管理功能实现了尽可能利用 CPU 的计算能力,我个人也从这个脚本中学到了不少 shell 脚本的技巧。

不过,使用 portmaster 需要在每一台机器上都有一份 ports tree,并且由于直接操作的是本地的生产环境, 因此对于比较基础的库,如 gettext 之类,或是在升级操作系统时, 由于升级时间较久导致出现问题的可能性相对要大一些。 另一方面,使用 port 来管理第三方软件意味着需要把联编过程中的所有依赖软件包全都都装到生产环境中, 有时这是非常不经济的,例如大部分时候运行环境并不需要完整的跨平台 LLVM,等等,而使用 port 安装的话, 每一个系统中都需要整体重新联编一遍。

我之前已经用过很长时间的 poudriere 了。 这是一款现代化的联编系统,它充分利用了 FreeBSD 的一系列特性,包括 ZFS 快照/克隆、 tmpfs、 jail 等等,支持交叉编译。除此之外它还支持使用 ccache 来减少重复编译,等等。 不过,线上的机器出于习惯^H^H懒惰导致的惯性一直还是在沿用之前采用 portmaster 来进行更新。

Read more...
27 Feb 2022

多年以前搞的 8086 实模式模拟器竟然又派上了用场

最近张师傅在折腾一个模拟器,在感慨他老人家的工作不饱和之余, 我向他隆重介绍了我多年前埋到 FreeBSD 里的 x86模拟器。 这些代码我自己已经多年没有碰过了,后续也有一些其他开发人员在其上做了新的改进(比如没必要真的分配那么多内存给模拟器, 等等)。不过这份来自 SciTech Software Inc (是的,就是 DOS 时代写 UniVBE.exe 的那个公司),后来辗转经过 XFree86、 NetBSD 最终来到 FreeBSD 的模拟器的主体部分还是没有什么变化,稍微改一改就可以直接作为一个新的模拟器的基础了。 由于不依赖 VM86,它的可移植性要比需要 VM86 的要好很多。从调试方面,由于它的结构,只需要在 x86emu_exec_* 设置断点就可以很容易地在用户态挂调试器进行调试了。 Read more...
12 Feb 2022

作弊条: ldapmodify 删除项目属性

随便记一笔,备忘。 形如: dn: mail=foo@somedomain.org,ou=somedomain.org,ou=org,ou=MailAccounts,dc=somehost mail: foo@somedomain.org accountstatus: alias sn: Foo cn: Foo account at somedomain.org objectClass: postfixAlias objectClass: person maildrop: delphij@delphij.net maildrop: someone@example.org maildrop: someoneelse@example.edu maildrop: anotherperson@somewhere.com 这样一个项目,希望把后三项删掉。 首先我们需要创建一个 LDIF 文件,第一行是查询条件,照抄原来的项目 dn: mail=foo@somedomain.org,ou=somedomain.org,ou=org,ou=MailAccounts,dc=somehost 接下来告诉系统修改的类型: changetype: modify 进一步告诉它我们需要做的操作: delete: maildrop 最后,因为该属性在这个对象上可以有多份,我们只希望删除后面三项,将其逐一列出: maildrop: someone@example.org maildrop: someoneelse@example.edu maildrop: anotherperson@somewhere.com 最终: ldapmodify -D cn=DirectoryManager,dc=somehost -w "密码" -f foo@somedomain.org.ldif -H ldapi:/// 将修改应用到 LDAP 树上。 参考 ldif(5) Read more...