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
构建一个系统当前运行服务的列表. 尝试:
- $ ps aux
- $ netstat -pn -l -A inet
- # /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 来确定. 下边使用了
lsof
和dpkg
程序的脚本可以完成这一任务:- #!/bin/sh
- # FIXME: this is quick and dirty; replace with a more robust script snippet
- for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
- pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
- echo "Service $i is installed by $pack";
- init=`dpkg -L $pack |grep init.d/ `
- if [ ! -z "$init" ]; then
- echo "and is run by $init"
- fi
- done
一旦发现了您不需要的任务, 删除相关软件包(使用
dpkg --purge
), 或使用update-rc.d
(参阅 第 3.5.1 节 “禁用守护进程服务”) 禁止服务在启动时自动运行.对于 inetd 服务(由超级用户装入的), 检查在
/etc/inetd.conf
中启用了哪些服务:- $ 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:
- # init 1
- (....)
- # init 2
检查现在的服务, 并, 如果需要, 重复上边的步骤.
现在, 安装所需服务, 如果, 您还没有做好, 正确的配置它们…
使用下边的 shell 命令, 确定服务是以什么用户运行的:
- # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`; \
- > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ; \
- > echo "Service $i is running as user $user"; done
考虑用指定的用户/组运行这些服务, 为了增强安全性, 也可为它们设置
chroot
. 您可以通过修改启动服务的脚本/etc/init.d
达到这个目的. Debian 中许多服务使用start-stop-daemon
, 它们都有完成这种设置的选项 (--change-uid
和--chroot
). 有关为服务设置chroot
的警告信息: 您可能需要将服务对应软件包(使用 dpkg -L)所安装的所有文件, 以及其依赖的软件包, 置于chroot
环境中. 有关配置ssh
的chroot
环境的信息, 参阅 第 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 文件系统的冻结修改.