> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20190910-an-quan/we-get-letters.md).

# 读者来信

作者：Michael W Lucas

> 嘿，来信奴才：
>
> 我不断听说安全需要从底层做起。我受限于公司规定使用的软件，而这些软件很多都很烂。当我不得不使用破烂软件时，如何从底层构建安全？我决定唯一明智的做法就是不再关心了。
>
> ——无所谓

## 亲爱的“无所谓”：

本专栏的三位固定读者似乎都被同一种乐趣吸引——看着我面对写稿这一乏味任务时幼稚的样子。虽然“你在问候的前三个字就侮辱了我”是入侵你的系统并将其转变为加速全球变暖的臭鼬币矿机的薄弱借口，但我愿意让它行得通。

因为这就是系统管理员做的事。我们让东西行得通。

即使是坏东西。

因为软件供应商坚持开发新的坏东西，并塞进已经被可怕坏东西膨胀到令人发指的喉咙里。系统管理员在短暂岁月中无尽的时间里跌跌撞撞，挣扎着在从软件中如砷黄铁矿炼砷般炼出的坏东西重负下生存。所有事物的固有不安全性如同搁浅的死鲸加剧石油泄漏一般，加重了这一负担。

退缩到消沉中是人的本能反应。

系统管理员没有做人的奢侈。

写信人已经投降了，所以他们现在可以停止阅读了。然而，由于本专栏有三位变态的固定读者，编辑坚持我用一些看起来像有用建议的东西来结束这篇文章——如果你不仔细看或实际上阅读的话。

所以：

你安装的一切都是你的责任。

可能不是你的错。但肯定是你的责任。

你必须熟悉新软件的功能。当暴虐的薪水领主命令你安装一桶污水时，你必须分配时间调查那桶里的每一个漂浮物。让新服务仅仅是运行是不够的；它必须安全运行。就像你搜遍一台主机并驱除不必要的守护进程一样，你需要筛选这些守护进程并禁用不必要的功能。所有 BSD 操作系统都将 PHP、Perl 甚至 Pascal 这样的怪物工具包分解成几十个单独的软件包，正是为了让你可以选择不安装不必要的坏东西。其他一些操作系统用一条命令安装这些工具包的全部，给经验不足的入侵者提供了一桌可利用的坏东西盛宴。

对于其他可怕的软件：你不需要某个功能？关掉它。移除不必要的服务，即使在单个软件包内部。这是工作。你难免会禁用你需要的功能，并在能够重新启用之前忍受荒谬程度的训斥和纠缠。但这工作让你良心清白，当你的知名组织遭受不可避免的批量密码抢夺时，你能够告诉迷人的记者这完全是你老板的错。

品行特别可憎的开发者生产的软件中，每个所谓的功能都是激活的且无法关闭。这些程序号称能为所有人做一切事。在这个最糟糕的世界里，你终将被迫部署和支持它。如何在这种不可避免的命运面前保持生存意志？

我向你推荐系统管理规则第七到第十条。

### #7：临时方案不是临时的。

你实施的任何方案持续的时间将远远超过你预期或希望的时间。永远不要在未考虑其安全影响的情况下就放置一个丑陋的临时补丁。我曾被不止一家公司雇用过，这些公司有一个用于紧急访问网络的未加密调制解调器。

管理层知道这个调制解调器的存在，并在雇佣我时特别将消除它作为一个目标。

我实施了冗余 VPN 和冗余带宽。我集成了从未打算互操作的认证系统。我重组了整个网络，以确保在任何让数据中心继续运行的灾难情况下都能获得可靠且安全的紧急访问。

我从未被允许关闭这样一个没有密码的紧急调制解调器。

唯一的解决方案是从一开始就不允许这样的怪物出现在你的网络上。

### #8：永久方案不是永久的。

如果你在一个组织待得足够久，那个解决一切的美丽新方案将逐渐衰变为挂在该组织脖子上的发臭信天翁。

我通过构建自己的邮件服务器并将其安装在朋友的 ISP 处永久解决了邮件问题。朋友搬了办公室。硬盘因老化而故障，所以我更换了它。朋友破产了，所以我安装了虚拟机。提供商倒闭了。

一切都在变化。

最终，那个可怕的软件也会随之变化。

### #9：一次性方案不是一次性的。

一旦你证明你能解决一个问题，人们会把其他问题带给你。是为了解决，不是为了嗤之以鼻。明显的解决方案可能与之前你匆匆搞定的东西有关。有一次，我维护了数十个 Perl 脚本，它们之间的主要区别在于每个的愚蠢程度。

一旦你证明你能解决一个问题，你就正式拥有了这一整类问题。你的暴虐薪水领主可以定义该类的范围。

那些一次性快速解决方案需要妥善实施，因为你必须与它们共存。

### #10：全局方案不是全局的。

那些令人震惊的一体化软件包自然对财务人员很有吸引力，他们认为购买它们就能永远解决所有问题。这些套件确实有助于解决问题——主要解决的问题是软件供应商还不是足够强大的寡头来要求折磨所有敢于质疑其营销的人。今天这些系统伪装成“企业资源规划”或“客户关系管理”等名称。

当然，它们不安全。因为为什么要安全，当通过 `telnet` 运行管理界面如此快速和简单呢？

你将别无选择，只能尽力锁定这些系统。你最终会实施一大堆胶水代码让它们尽可能正常工作。你在这里能做的最好选择是将所有责任归于它应归之处——这个全局解决方案的供应商身上。

不过，不要犯关心供应商的错误。他们从事销售解决方案的业务，而系统管理规则 #11 非常明确：“解决方案不是方案。”

享受注定的命运吧。

Michael W Lucas（<https://mwl.io>）的最新著作是 Sudo Mastery 第 2 版和 Terrapin Sky Tango。

如果你读到这里，你可能会觉得 FreeBSD Mastery: Jails 有用。把你的问题发送到 <letters@freebsdjournal.com>，他可能会回答。

如果他愿意的话。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20190910-an-quan/we-get-letters.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
