如果web服务器上的几个文件需要定期更新,scp——cp函数在ssh中的安全版本——就显得不是很好用了。一个更合适的方法是使用sslftp,它具有ftp的功能并且象ssh一样对数据进行了加密。
日志数据很重要,所有的从web服务器和路由器所记录的重要日志记录都应该送到一个集中管理的日志主机,这个日志主机主要用来监视所有计算机的运行状态。通过这种方法,攻击者就就很难遁形灭迹了。
另外,将solar designer [13]设计的安全内核补丁集成到系统中是个很好的主意,有了这个安全补丁,利用缓冲区溢出做手脚的攻击方式将变得更困难。
应该剥夺那些suid和sgid程序所具有的没必要的过高特权。这可以通过将那些不再需要具有特权的程序逐个输入到/etc/permissions.local然后手工去掉程序的授权(或启动suseconfig)的方法实现。
这个工作直到没有sgid程序并且仅仅有下面列出的少数几个suid程序时结束:
-rwsr-xr-x 1 root shadow 27920 mar 11 11:50 /usr/bin/passwd
-rwsr-x--- 1 root trusted 56600 mar 11 18:41 /usr/bin/sudo
-rwsr-xr-x 1 root root 6132 mar 11 09:36 /usr/lib/pt_chown
如果系统由几个分区,通过使用mount选项ro(只读)、nodev(无设备)、nosuid (没有高特权的suid文件)和noexec (没有可执行文件)显著地提高系统的安全级别。
除此之外,可以使用ext2文件系统标志"append-only"和"immutable" (通过chattr命令设置) 定义内核能力,这样就可以保护日志和引导文件等不被篡改。
如果服务器需要具有防止本地攻击的能力,必须为lilo引导装载器配备一个口令,这可以通过在/etc/lilo.conf文件的顶端输入下面的脚本行实现:
password=something_difficult_to_guess
restricted
最后,web服务器不仅仅只是apache。通常要包括1到2个数据库,还要引入一些附加的模块和程序,或者需要激活其它一些服务(如dns服务器)。linux包过滤(参见第二步中的例子)可以方便有效地提供保护支持。一个称为“隔离间”("compartment":可以从这里获得)的程序支持chroot、特权分配以及linux能力配置等任务。
当然,还可以做很多其它的事情,但我所能想到的只有这些了。
最后的提示
更新!一个没有采用最新的安全补丁进行更新的系统会很快称为攻击者的目标。
已经完成配置安全系统所需的所有工作之后,要记住:cgi脚本将是最大的安全隐患。大多数成功的攻击都是通过这些脚本实现的。简明的建议是:最好使用那些公开发布并且已经被不同的网站使用了一段时间的cgi脚本;如果管理员不得已需要写一些cgi脚本程序的话,这些程序应该由其它人对其安全因素进行例行检查。
结论
一个非常安全且高可用的web服务器——这似乎有些矛盾,但确实是很好的折中——能够在短短45分钟的时间内配置完。当然您可以通过更多的工作以提高系统的安全级别,但是这里配置的系统对大多数应用来说已经足够了。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器