理想情况下,您应该明白在您的系统中运行的每一个进程。要获得所有进程的列表,可以执行命令 ps -ef(POSIX 风格)或 ps ax(BSD 风格)。进程名有方括号的是内核级的进程,执行辅助功能(比如将缓存写入到磁盘);所有其他进程都是使用者进程。您会注意到,就算是在您新安装的(最小化的)系统中,也会有很多进程在运行。熟悉它们,并把它们记录到文档中。

         现在让我们来看那些开放网络连接的进程;它们受到***的潜在可能最大。要获得所有 TCP 或 UDP 连接的列表,执行命令 netstat -atu(附带名字解析,易读)或者 netstat -atun (没有名字解析,更快)。在这个列表中,特别要注意状态为 LISTEN 的 TCP 连接和所有的 UDP 连接,因为服务器通过这些连接来接收到来的连接。

         如果服务器侦听 127.0.0.1/localhost,那么它只能由系统本身(环回接口)访问到。因此它的暴露程度要远低于侦听外部可达接口甚至 0.0.0.0(= *,如果打开名字解析)的服务器,后者可以由任意网络接口所访问。

         如果您使用过 netstat -atun,那么您需要自己翻译端口号。可以在 /etc/services 中去查找它们。使用附加的参数 -p 来显示相应的进程。在这个示例中,您可以推断出 portmapper 和 graphical user interface(X)是特定的服务器所不需要的。portmapper 为 NFS 等各种基于 RPC 的服务提供标准端点(endpoint);系统并不提供 NFS 共享。当系统用作工作站时 X 窗口是有用的,但在服务器上的使用受限。

         确定这些进程是如何被启动的(通过 /etc/inittab,通过引导脚本,等等)并如前所述的那样禁用它们。如果程序是由另一个程序启动的,那么这项任务可能会更具挑战性:X 服务器很有可能是由显示管理器启动的,比如 xdm、kdm 或 gdm,其本身并不会出现在 inittab 或引导脚本目录中。

         netstat 所列出的连接并不是自动都可以由网络上的所有计算机来使用。在任何数据包到达开放的连接之前,基于 Linux 内置功能的防火墙可以进一步控制访问。

审计准备

         安装了基本的系统并安全地配置后,您的最终目标是保持系统的安全。为了识别出对系统的不必要修改,使用审计工具来记录处于希望是已知且安全的状态的系统的内存占用,并检测对它的修改。