For the complete documentation index, see llms.txt. This page is also available as Markdown.

采访 Pawel Dawidek

作者:Allan Jude 和 Kris Moore

Kris Moore:BSD Now,第 62 集,来自 Sun 的礼物。我们于 2014 年 10 月 29 日录制。我是主持人 Kris Moore。

Allan Jude:我是 Allan Jude。

Kris:我们将与 Pawel Dawidek 一起,他多年来在 FreeBSD 中做了很多工作,包括最初的 ZFS 移植——这可是件大事。我们将听到这是怎么发生的,他现在在做什么,以及更多内容。Pawel 将谈论他为 FreeBSD 移植 ZFS 所做的工作。GEOM、GELI、Capsicum 等各种话题。

Allan:是的,不仅 ZFS 移植到 FreeBSD 是一件大事。而且当他讲述这个故事时,它让我们了解到开发实际上是如何进行的。

FreeBSD 期刊编辑委员会建议,BSD Now 系列中的一些精彩访谈可能会引起读者的兴趣,因为它们反映了访谈发生时的技术状态。这里,我们整理了 2014 年 Kris Moore 和 Allan Jude 对 Pawel Dawidek 的访谈。

Kris:那本身就会是一个很棒的访谈,但然后我们还聊了 GEOM、GELI、Capsicum 等其他东西。

Allan:现在我们与来自 FreeBSD 项目的 Pawel Dawidek 在一起。感谢你加入我们。

Pawel Dawidek:当然,谢谢。

Kris:我们问几乎每个人的第一个问题是你的背景故事,你是如何第一次接触 BSD 的?

Pawel:我 12 岁开始接触电脑,但那时我用的是 C-64 和 Amiga。当我上大学时,我用过 Debian,最多可能几个月。一个朋友向我介绍了 FreeBSD,基本上我几乎直接从 Amiga 切换到了 FreeBSD。我的一个问题是我真的没有任何 Windows 经验。

Kris:这是个问题吗?[笑]

Pawel:在家人和朋友方面确实有点问题,因为如果你从事 IT,他们认为你必须知道这些。你必须知道如何安装杀毒软件之类的东西。

Kris:不过那也意味着你不会在半夜接到电话说我的 Windows 电脑又坏了!

Pawel:是的。但我还是会接到这些问题。当然,我喜欢 FreeBSD,但也许不是从第一天开始,因为我试了几次才成功安装 FreeBSD。但从那以后,这是一次很棒的冒险。

Allan:你目前在 FreeBSD 上做什么工作?

Pawel:我没那么活跃了,但我仍然做一些 Capsicum 和其他安全项目的工作——这是我的主要兴趣。

Allan:我们传统上问的另一个问题是,目前在 FreeBSD 中的哪些东西我们可以归咎于你?

Pawel:啊,是的,多年来可能有不少。我觉得我成为 FreeBSD 提交者已经 10 年了。

Kris:哇!

Pawel:我主要从事存储和安全方面的工作,但我的代码在很多不同的地方。在存储方面,我做了各种 GEOM 改进和 GEOM 类,如 gmirror、gstripe、gconcat,以及其他一些 GEOM 类如 GELI。我觉得最有趣的项目之一是将 ZFS 移植到 FreeBSD。这是一次非常有趣的经历。

Kris:既然你提到了,你对移植 ZFS 的兴趣是什么?最初是什么促使你这样做?

Pawel:我记得那个确切的时刻。度假期间,一个朋友告诉我关于 ZFS 的事。他在做一些工作,他们经常使用 Solaris。他告诉我 Sun [Microsystems] 正在开发的文件系统,以及许多数据集、端到端校验和、压缩、集成卷管理器等功能,听起来很棒。所以,我希望当这个文件系统创建后,有人能将它移植到 FreeBSD。

但是,当然,在 FreeBSD 中,文件系统一直是个诅咒。我们有 UFS,而且我们有很多将其他文件系统移植到 FreeBSD 的失败尝试。我知道有 HFS、ReiserFS、只读的。我们有 XFS,也是只读的。其中很多都未完成,这确实开始成为一个问题。所以 UFS2 出现了,情况有所改善,但当然有些人想看到 ZFS。

Kris:当然。

Pawel:所以,基本上,我想看看移植 ZFS 有多难。这个项目太有趣了,我变得很投入。基本上在头 10 天 10 夜里,我不停地工作。我有那么多肾上腺素,真的可以一直工作,有些天我只睡大约 2 小时。

Kris:哇。

Pawel:10 天后,我有了一个可读写的可用原型。那是——

Kris:有史以来最快的文件系统移植。[笑]

Pawel:是的,但当然并非一切顺利。让 ZFS 达到可提交到 FreeBSD 的状态花了好几个月——实际上花了更多个月。但非常有趣。绝对是。

Allan:将 ZFS 引入 FreeBSD 并使其全部工作,你必须克服哪些障碍?

Pawel:ZFS 实现得很好。代码非常干净,而且大多数代码可以在用户态编译,这当然很有帮助——代码被设计为能够在内核和用户态中编译,这需要做大量工作使代码可移植。

我必须创建这个非常丑陋的层——与 Solaris 的兼容层,我并不以此为荣,但它让我们能够将改动降到最低。我们与上游之间的差异在移植新版本时极其有用,因为,当然,我移植的是 ZFS 的一个非常早期的版本,而它在 Sun 被非常活跃地开发。所以有大量变化,这个层帮助我们非常快地推进。

ZFS 是一个文件系统,所以它连接到 VFS 层,我认为这是 FreeBSD 内核代码中最复杂的部分之一。处理 VFS 很难。

Kris:几个月前我花了一周时间研究 Fuse 和那里的 VFS 层。

Pawel:我支持简化 VFS,因为我们的 VFS 试图通过为文件系统开发者做大量工作来帮助他们——集中化和缓冲等。这在理论上很好,但当你处理一个更复杂的文件系统时,你确实希望将更多东西移到文件系统本身。

Allan:对,你希望对缓冲策略有更多控制,因为策略不同。

Pawel:没错。ZFS 在性能方面可以高效得多。它对整个过程有更多控制。

Allan:在让 Solaris 代码在 FreeBSD 上工作时,还有什么有趣的事情出现吗?

Pawel:嗯,有一些差异,但令人惊讶的是,内核的 API 非常相似。我认为 FreeBSD 和 Solaris 内核之间的差异比 FreeBSD 和 Linux 内核之间的差异要小。所以这很有帮助。

Kris:有道理。这个问题来自我们的制作人,他问最终需要什么才能获得原生 ZFS 加密?

Pawel:我不喜欢 Oracle 版本中 ZFS 加密的实现方式。

Allan:我觉得没人喜欢。

Pawel:嗯,有些人喜欢。Oracle 加密背后的理念是加密单个数据集。但你主要想在哪里使用加密?主要是笔记本电脑上,因为你随身携带笔记本电脑,服务器上较少,因为你在哪里存储密钥以允许自动启动?

而一个笔记本上有多少用户?大多数情况下是一个。而 Oracle ZFS 加密假设有多个用户,他们想优化这一点。所以,每个数据集都可以用用户密钥加密,这在很多层面上都有问题。首先,它与去重完全兼容不了,因为如果不同的数据集使用不同的密钥,你在池中就有不同的数据集,所以无法去重。

去重的唯一方法是克隆文件系统,这样密钥也被克隆了,这不是很好。

Allan:是的,这是为了不同的用户。

Pawel:是的,没错。所以,我不喜欢这个想法。我不认为这是正确的方向。我实现 ZFS 加密的方式是在数据集级别以下使用 ZFS 加密——在 vdev 级别加密原始数据。这样我们也可以加密更多数据,因为,当然,使用 Oracle ZFS 加密我们无法加密 zpool 范围的元数据。

Allan:对。那么请谈谈 GELI 以及你在那个系统上做的工作。

Pawel:GELI 基本上是磁盘加密,位于文件系统之下。有许多类似的项目。当然,Linux 有自己的实现。GELI 显然是一个长期运行的项目。

当我开始做 GELI 时,FreeBSD 确实有磁盘加密,但它不太符合我的需求。所以,我开始做自己的磁盘加密,它确实提供了一些独特的功能。例如,我不知道有任何磁盘加密软件提供数据认证。

而且 GELI 从第一天起就与我们的 opencrypto 框架集成,所以它可以使用加密加速器。GELI 还提供许多有用的功能——例如,你可以使用多个密钥来解密你的磁盘、分区或任何存储设备。你可以有一个密码短语和一个存储在 U 盘上的密钥。

你还可以有多个密钥。可以想象这样一个场景:在公司里,你的安全官有一个与你的主密钥不同的密钥,而你也有自己的密钥。所以,如果你的员工丢失了他的数据密钥,数据不会丢失,因为有备用密钥。

Allan:这很有用。

Kris:当然。你还在积极参与 GEOM 或任何文件系统开发吗?

Pawel:目前我主要转向了安全方面。这些天我喜欢观察 ZFS 的发展。我非常高兴有越来越多的公司和人参与其中,因为有几年我想我是唯一一个将 ZFS 移植到 FreeBSD 的人。而它绝对不是一个人的项目。

Allan:是的。

Pawel:所以,我等了很长时间等其他人的加入,实际上有相当多的公司在生产中使用 ZFS 或用于他们的产品。所以,当人们参与 FreeBSD 上的 ZFS 开发时,我们与 illumos 社区有很好的关系。TRIM 支持是我们在 FreeBSD 中做的开发之一。我最初是为英国的 Multiplay 做的。据我所知,这是只有 FreeBSD 才有的。有很多故事说公司从 Linux 切换到 FreeBSD 以获得 ZFS。所以这非常好。

我相信他们中很多人一开始不确定,但切换后,我听到了很多积极的故事。

Allan:你能告诉我们关于你在 Capsicum 上的工作以及你现在在做什么吗?

Pawel:嗯,Capsicum 的内核部分或多或少已经非常可用了。我们仍在做的是 Casper 守护程序。它是一个帮助使用 Capsicum 的守护程序,因为 Capsicum 提供了非常严格的沙箱。你无法访问全局命名空间。这实际上是很棒的技术。

这真的是一个很棒的理念和安全框架。过去我在做自己的安全工作时——只是监控系统调用之类的东西,这是个坏主意。Capsicum 才是正确方向,它获得了更多关注。我希望 Capsicum 将成为——

Kris:未来的方向。

Pawel:是的,而且越来越有用。

Kris:当然。

Pawel:Casper 守护程序是一种帮助开发应用的方式。例如,一旦你进入 Capsicum 沙箱,你就无法解析主机名,而 Casper 让你能够做到这一点。我们正在尝试将 Casper 作为独立的守护程序,但我们发现这可能不是最好的主意,因为这个独立进程在不同的上下文中运行,有自己的资源限制、cpuset、路由表等。我们可能希望从应用进程生成 Casper 并继承其上下文。

Allan:是的,这样它实际上不会为 CPU 或其他什么提供绕过资源限制的更简单方法。

Pawel:没错。这方面还有一些工作要做。

Kris:谢谢。你的日常工作到底是什么,你在那里使用 FreeBSD 吗?

Pawel:哦,是的,我们用得很多。我经营自己的公司 Wheel Systems [现为 Fudo Security]。我们是安全供应商,提供安全产品。事实证明,我多年来为 FreeBSD 做的工作在我们的最新产品——Fudo 中非常有用,我们使用 GELI 加密所有存储;我们使用 ZFS 在集群节点之间复制数据;我们使用压缩和快照。我们大量使用 Capsicum 来确保一切安全。

我们希望确保即使有人攻破了单个会话,他也无法访问其他会话。他实际上无法访问任何东西,因为如果他在认证之前攻破,他不会被授予连接服务器的权限。只有在成功认证后,我们才会提供到目标服务器的连接。

而 Capsicum 让这一切变得非常干净,实际上非常高效。

Allan:你不需要列举所有你不能做的事情。你是说你只被允许做这些事情?

Pawel:是的。这就是 capability 理念。你只授予进程所需的确切权限或对资源的访问。这不是 UNIX 理念,因为,当然,如果你运行一个 UNIX 程序,它可以访问一切。

Allan:你还有什么想谈的吗?

Pawel:没什么了。

最后更新于