我们有几十个 Ubuntu 系统(从 8.04 到 9.40,包括台式机和服务器,都只具有串行控制台访问权限,我们希望在其上运行修补版本的 glibc。
特别是,这是为了修复glibc 解析器无法允许 OpenSSH 的 ssh 客户端等程序设置 AD 位;我们想做的事情的要点可以在博客文章中找到如何让 OpenSSH 使用 glibc 在 SSHFP 查找中看到 DNSSEC AD 标志。我们正在考虑做一个稍微更广泛的修改,在头文件中添加 AD 位支持,以便我们可以编译标准的 ssh 二进制文件,尽管这也涉及替换 ssh 客户端。
所以我的问题是,进行更改、使其与 Ubuntu 的常规更新保持同步并将其分发到我们所有的机器的最简单方法是什么?
我猜最佳方案可能是维护我们自己的 Ubuntu 源包副本,每次更新时更新我们的源包,根据需要构建新版本,并通过设置一个服务器(该服务器位于每台机器的包服务器列表中)来分发它们。但我对如何执行此操作的细节了解不够多,不知道这是否是最佳选择。如果是,我希望得到一些有关设置细节的指示。
有些人可能会想知道我为什么要这样做。原因有二:
此功能不会很快添加到 glibc 中。它已经消失了五年多,没有人对此表示任何担忧;相反,他们说他们觉得添加此功能太危险了,因为更改会带来“高度安全影响”,或者诸如此类的事情。
我们有一项严格的政策,即您可能无法通过 ssh 连接到未经验证密钥的公司机器(即,我们使用“StrictHostKeyChecking yes”ssh 选项)。
我想避免在这里讨论上述任何一点。如果您想了解有关 glibc 维护者政策的更多信息,或者如果您不了解不遵守我们的安全政策时会遭受哪些攻击,请发布一个单独的问题,将其 URL 通过电子邮件发送给我,我会从这里链接到它。
答案1
您希望完全按照您的建议去做,并维护已修补的软件包。设置 repo 非常简单,我只需使用 apt-ftparchive 来完成编写软件包文件的繁重工作。有一个 procmail 规则来监视 ubuntu-security-announce 列表并警告您感兴趣的软件包的任何安全更新。如果您以前从未构建过软件包,那么您会觉得很有趣,但如果您能够阅读文档,这并不是特别困难。
答案2
设置自动储存库在您的内部服务器之一上,并与 ubuntu 的版本同步。确保您的任何客户端都没有从 ubuntu 添加“建议的更新”存储库,然后自己注册它(作为补丁的维护者),这样您就可以领先于实际更新并提前提供您的版本。
将版本命名为子更新,因此它将“覆盖” ubuntu 的版本,例如,当前版本是:
$ apt-cache policy libc6
libc6:
Installed: 2.9-4ubuntu6
假设您的组织名为 example,则应为2.9-4ubuntu6example1
。您甚至可以使用 PGP 签署您的档案,以获得额外的安全性。
无需 SSH,你可以使用软件包+ PolicyKit 让用户无需授予他们根访问权限即可进行更新(假设您如此严格)。
顺便说一句,我敢打赌补丁不被接受的原因是 Ulrich Drepper,他拒绝了几乎所有“他不信任”的人的补丁。很快,Debian 将切换到 eglibc,它有更多友好的开发人员,他们会考虑添加任何补丁。