B.1. 循序渐进安全化

下边是安装完成后, 来循序渐进的增强 Debian 2.2 GNU/Linux 系统的安全性. 对于增强网络服务的安全性, 这是一种可行的方法. 这包括展示您的整个配置过程. 更多信息参见 第 B.2 节 “配置清单”.

  • Install the system, taking into account the information regarding partitioning included earlier in this document. After base installation, go into custom install. Do not select task packages.

  • 使用 dselect, 删除在前边使用 [I]nstall 时安装了但是并不需要的软件包. 使得系统安装的软件包最少.

  • 如前边 第 4.2 节 “进行安全更新” 阐明的, 从 security.debian.org 更新所有的软件包.

  • 实现本手册前边提出的建议, 特边是用户限额, 登录定义和 lilo

  • 构建一个系统当前运行服务的列表. 尝试:

    1. $ ps aux
    2. $ netstat -pn -l -A inet
    3. # /usr/sbin/lsof -i | grep LISTEN

    You will need to install lsof-2.2 for the third command to work (run it as root). You should be aware that lsof can translate the word LISTEN to your locale settings.

  • 为了删除多余的服务, 首先应当确定服务是由什么软件包提供的, 它是如何启动的. 这可以通过检查程序监听的 socket 来确定. 下边使用了 lsofdpkg 程序的脚本可以完成这一任务:

    1. #!/bin/sh
    2. # FIXME: this is quick and dirty; replace with a more robust script snippet
    3. for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
    4. pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
    5. echo "Service $i is installed by $pack";
    6. init=`dpkg -L $pack |grep init.d/ `
    7. if [ ! -z "$init" ]; then
    8. echo "and is run by $init"
    9. fi
    10. done
  • 一旦发现了您不需要的任务, 删除相关软件包(使用 dpkg --purge), 或使用 update-rc.d(参阅 第 3.5.1 节 “禁用守护进程服务”) 禁止服务在启动时自动运行.

  • 对于 inetd 服务(由超级用户装入的), 检查在 /etc/inetd.conf 中启用了哪些服务:

    1. $ grep -v "^#" /etc/inetd.conf | sort -u

    然后通过注释掉 /etc/inetd.conf 中的对应行, 将其禁用, 删除对应软件包, 或使用 update-inetd.

  • 如果您使用了 wrapped 服务(它们使用 /usr/sbin/tcpd), 根据您的服务策略, 检查 /etc/hosts.allow/etc/hosts.deny 文件的配置.

  • 如果服务器使用了多个外部接口, 根据服务, 您可以限制服务只监听特定的接口. 例如, 如果您只允许内网访问 FTP, 那么就配置 FTP 守护进程只监听您管理的接口, 而不是所有接口(即, 0.0.0.0:21).

  • Re-boot the machine, or switch to single user mode and then back to multiuser using the commands:

    1. # init 1
    2. (....)
    3. # init 2
  • 检查现在的服务, 并, 如果需要, 重复上边的步骤.

  • 现在, 安装所需服务, 如果, 您还没有做好, 正确的配置它们…

  • 使用下边的 shell 命令, 确定服务是以什么用户运行的:

    1. # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
    2. > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
    3. > echo "Service $i is running as user $user"; done

    考虑用指定的用户/组运行这些服务, 为了增强安全性, 也可为它们设置 chroot. 您可以通过修改启动服务的脚本 /etc/init.d 达到这个目的. Debian 中许多服务使用 start-stop-daemon, 它们都有完成这种设置的选项 (--change-uid--chroot). 有关为服务设置 chroot 的警告信息: 您可能需要将服务对应软件包(使用 dpkg -L)所安装的所有文件, 以及其依赖的软件包, 置于 chroot 环境中. 有关配置 sshchroot 环境的信息, 参阅 第 B.7 节 “Chroot environment for SSH.

  • 重复上边的步骤, 直至只有所希望的服务运行, 并且与希望的用户/组绑定.

  • 测试安装的服务是否与期望相符.

  • Check the system using a vulnerability assessment scanner (like nessus), in order to determine vulnerabilities in the system (i.e., misconfiguration, old services or unneeded services).

  • Install network and host intrusion measures like snort and logcheck.

  • 重复进行网络扫描和入侵检测校验, 直至确定系统运行正常.

下边是更加偏执的做法:

  • 提高系统防火墙的性能, 只接受对所提供服务的连入访问, 并限制连出访问, 只允许授权的连接通行.

  • 使用网络扫描器, 再次对系统进行漏洞评估.

  • 使用网络扫描器, 检查系统指向外部站点的出站连接, 确保没有多余的连出连接.

FIXME: 这个过程只是考虑增强服务的安全性, 而不是在用户级别上增强系统的安全性, 包括检查用户权限的信息, SETUID 文件和使用 ext2 文件系统的冻结修改.