安全是系统管理至始至终最基本的要求。由于所有的 BSD UNIX® 多用户系统都有它自身内在的安全性,建立和维护额外的安全机制, 确保用户的 “诚实” 大概是系统管理最艰巨的工作之一。 机器仅保持着建立时最原始的安全性,而安全性必须要考虑到用户使用的便利性。 通常, UNIX 系统能够支持巨大的并发用户处理, 而这些处理中绝大部分是以服务器形式处理的 -- 这意味着外部的实体能够与它们互连和互动。 昨天的小型计算机和主机变成了今天的桌面机,计算机已连到局域网和互联网, 安全就成了一个非常严峻的问题。
通过像 “洋葱” 那样分层的方法,能够很好地实现安全。 简而言之,您所要做的就是创建很多的安全层,然后仔细地监视系统以防入侵。 不过,过多地创建安全层可能会出现问题,您可能不希望大量地阅读检测结果, 因为检测是所有安全机制中最重要的一环。例如,在所有的系统可执行文件上都设置 schg 标记 (参考 chflags(1)) 的意义就不大,因为尽管这也许能够暂时地保护那些执行文件, 它阻止了攻击者轻易地闯入并作一个容易被检测出来的修改, 却很可能最终导致您的安全机制根本检测不到入侵者。
系统安全也涉及到许多攻击方式,包括试图摧毁或使系统无法使用, 但并不试图窃取 root 帐号 (“干掉 root”)。 安全问题主要分成以下几类:
拒绝服务攻击。
窃取其他用户的帐户。
通过可访问服务窃取root帐户。
通过用户帐户窃取root帐户。
建立后门。
拒绝式服务攻击是侵占机器所需资源的一种行为。 通常, DoS 攻击采用暴力(brute-force)手段通过压倒性的流量来破坏服务器和网络栈, 以使机器崩溃或无法使用。 某些 DoS 攻击则利用在网络栈中的错误, 仅用一个简单的信息包就可以让机器崩溃, 这类情况通常只能通过给内核打补丁来修复。 在一些不利的条件下, 对服务器的攻击能够被修复, 只要适当地修改一下系统的选项来限制系统对服务器的负荷。 顽强的网络攻击是很难对付的。 例如,一个欺骗性信息包的攻击, 无法阻止入侵者切断您的系统与Internet的连接。 它不会使您的机器死掉,但它会把Internet连接占满。
窃取用户帐户要比D.o.S.攻击更加普遍。 许多系统管理员仍然在他们的服务器上运行着基本的 telnetd,rlogind, rshd 和 ftpd 服务。 这些服务在默认情况下不会以加密连接来操作。 结果是如果您的系统有中等规模大小的用户群, 在通过远程登录的方式登录到您系统的用户中, 一些人的口令会被人窃取。 仔细的系统管理员会从那些成功登录系统的远程访问日志中寻找可疑的源地址。
通常必须假定,如果一个入侵者已经访问到了一个用户的帐户, 那么它就可能使自己成为 root。 然而, 事实是在一个安全和维护做得很好的系统中, 访问用户的帐户不一定会让入侵者成为 root。 这个差别是很重要的,因为没有成为 root 则入侵者通常是无法隐藏它的轨迹的, 而且, 如果走运的话, 除了让用户的文件乱掉和系统崩溃之外, 它不能做什么别的事情。 窃取用户帐户是很普遍的事情, 因为用户往往不会对系统管理员的警告采取措施。
系统管理员必须牢牢记住,可能有许多潜在的方法会使他们机器上的 root 用户受到威胁。入侵者可能知道 root 的口令,而如果在以 root 权限运行的服务器上找到一个缺陷 (bug), 就可以通过网络连接到那台服务器上达到目的;另外, 一旦入侵者已经侵入了一个用户的帐户, 可以在自己的机器上运行一个 suid-root 程序来发现服务器的漏洞, 从而让他侵入到服务器并获取 root。 攻击者找到了入侵一台机器上 root 的途径之后, 他们就不再需要安装后门了。许多 root 漏洞被发现并修正之后, 入侵者会想尽办法去删除日志来消除自己的访问痕迹, 所以他们会安装后门。 后门能给入侵者提供一个简单的方法来重新获取访问系统的 root 权限, 但它也会给聪明的系统管理员一个检测入侵的简便方法。 让入侵者无法安装后门事实上对您的系统安全是有害的, 因为这样这样并不会修复那些侵入系统的入侵者所发现的新漏洞。
安全的管理方法应当使用像 “洋葱皮” 一样多层次的方法来实现, 这些措施可以按下面的方式进行分类:
确保 root 和维护人员帐户的安全。
确保 root - 以root用户权限运行的服务器和suid/sgid可执行程序的安全。
确保用户帐户的安全。
确保口令文件的安全。
确保内核中核心组件、直接访问设备和文件系统的安全。
快速检测系统中发生的不适当的变化。
做个偏执狂。
这一章的下一节将比较深入地讲述上面提到的每一个条目。