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 时安装了但是并不需要的软件包. 使得系统安装的软件包最少.
实现本手册前边提出的建议, 特边是用户限额, 登录定义和 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
对于 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.
重复进行网络扫描和入侵检测校验, 直至确定系统运行正常.