1、.摘 要: 根据网络安全的“木桶理论”,网络安全是由若干“木板”元素的安全决定,因此本文就Linux平台下WEB服务器的各个安全元素进行分析并给出其增强安全的技术方法。从而构建一个稳定的WEB的安全防护体系。关键词: LINUX,APACHE,PHP,MYSQL,安全,防火墙,入侵检测技术ABSTRACT: According to network security “bucket theory“, network security is a number of “wood“ element of the security decisions, so this WEB server on th
2、e Linux platform to analyze the various security elements, and given its enhanced security technology and methods. To build a stable system of security protection WEBKeywords: Linux; Apache; Php; Mysql; security; firewall; intrusion detection technology目 录.第一章 LAMP的安全模型11.1LAMP简介 .11.2LAMP的优势 .11.3模
3、型图的设计11.4 模型的分析 .21.5 模型的实现 .21.5.1 Linux系统的安全防护 21.5.2 Apache服务器的安全防护 .31.5.3 MySQL数据库安全防护 31.5.4 PHP服务器安全防护 31.5.5防火墙与入侵检测设计 4第二章 Linux 系统的安全配置 42.1 Linux操作系统简介42.2 版本选择与安装 .42.2.1安装 red hat AS 4.0操作系统 .52.3 Linux系统安全问题72.4 linux系统安全策略72.4.1给 BIOS设置密码 .72.4.2设置 grub启动口令 .82.4.3为 LILO增加开机口令 .82.4.4
4、用户与口令设置 92.4.5取消普通用户的控制台访问权限 .102.4.6控制 root登录 tty设备 102.4.7禁止普通用户 su为 root用户 .102.4.8隐藏系统信息 .102.4.9阻止 ping.102.4.10防止 DoS攻击 112.4.11特别的帐号 112.4.12经常更新及安装补丁 12第三章 Apache 安全分析与配置 133.1 Web服务器软件 Apache简介133.1.1 Apache的工作原理 133.1.2 Apache服务器面临的安全问题 133.2 配置一个安全的 Apache服务器 .143.2.1 及时升级系统或添加补丁.153.2.2
5、隐藏和伪装 Apache的版本153.2.3 建立一个安全的目录结构.163.2.4 为 Apache使用专门的用户和用户组173.2.5 Web目录的访问策略 .183.2.6关注 Apache服务器日志文件 183.2.7 htaccess文件实现用户安全认证 193.2.8设置文件访问的权限 .213.2.9设置目录的访问权限 .23.3.2.10 减少 CGI和 SSI风险263.2.11 使用 SSL加固 Apache.263.2.12 Apache服务器防范 DoS28第四章 PHP 服务器配置与编程安全 294.1 php编程语言简介.294.2 php安全问题分析.294.2.
6、1服务器安全隐患 .294.2.2编程语言的漏洞 .304.3 安全配置 php服务器 314.3.1配置安全模式: .314.3.2用户组的安全设置 .334.3.3安全执行指定的目录程序 .344.4 PHP编程安全分析与设置.344.4.1关闭危险函数 .344.4.2关闭 PHP版本信息在 http头中的泄漏 354.4.3禁止自动注册的全局变量 .364.4.4使用 open_basedir限制脚本访问目录用户 374.4.5检测脚本的包含文件名 .404.4.6过滤用户的输入命令 .424.4.7打开 magic_quotes_gpc来防止 sql_inject434.4.8警告及
7、错误信息 .444.4.9禁用某些不必要的类 .45第五章 Iptables防火墙配置.455.1防火墙介绍.455.2防火墙技术.455.3 Web网站攻击类型.465.4防火墙功能实现.465.4.1 Web服务器的配置策略 .465.4.2防火墙防范攻击 .49第六章入侵检测技术实现516.1入侵检测技术简介.526.2 Snort搭建入侵检测系统.526.2.1 snort模式 .526.2.2构造基于 snortrules系统环境 526.2.3配置 snort536.2.4配置 snort规则自动更新 .57心得体会与致辞57参考文献58.前 言随着Internet/Intrane
8、t网络的快速发展,采用Linux操作系统作为网络服务器的用户越来越多,其一因为Linux系统时开放源代码的免费软件;其二因为较之微软的Windows网络操作系统而言,Linux系统具有更好的稳定性、高效性和安全性。目前流行的LAMP组合是Linux操作系统,Apache网络服务器,MySQL数据库,PHP、Perl或者 Python编程语言的缩写。在过去的几年里,这些组件的兼容性不断完善,在一起的应用情形变得更加普遍。并且它们为了改善不同组件之间的协作,已经创建了某些扩展功能。目前,几乎在所有的Linux发布版中都默认包含了这些产品。Linux、Apache、M ySQL和Perl、PHP或者
9、Python语言,这些产品共同组成了一个强大的Web应用程序平台。作为开源软件的组合,LAMP最大的优势就是它的开放性。对开发人员来说,开放程度越高,其可选择东西也就越多,去描述需求的逻辑结构就很自由。下面就以LAMP组合为例,分别研究Linux 系统、Apache网络服务器、MySQL 数据库和PHP 脚本语言的安全防护。.第一章 LAMP 的安全模型1.1 LAMP 简介Linux+Apache+Mysql+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的 Web应用程
10、序平台。1.2 LAMP 的优势灵活性:既没有技术上的限制也没有许可证的限制。这允许你能够以适合你的方式灵活地构建和部署应用程序,而不是以你正在使用的技术的提供商规定的方式。个性化:LAMP 组件是开源软件,已经建立了大量的额外的组件和提供额外功能的模块,能够让你个性化设置组件和功能以便满足你的需求。容易开发:用 LAMP组件开发极其简单,代码通常非常简洁,甚至非程序员也能够修改或者扩展这个应用程序,同时也给专业的程序员提供了各种高级的特性。容易应用:大多数主机服务都把基于 LAMP的环境作为标准,应用程序也不需要编译,在新的主机上部署一个应用程序就像拷贝一个应用软件那样容易。安全:由于是开源
11、软件,大量的程序员关注这些软件的开发,问题通常能够很快地修复,不需要昂贵的技术支持合同。经过大量的用户和团体组织多年来的使用,LAMP技术是安全和稳定的。成本低廉:LAMP 组件都是开源软件,只要遵循 GPL协议,可以自由获得和免费使用,极大降低了部署成本。1.3 模型图的设计根据网络安全的木桶理论,设计中把 lamp安全模型划分为 lamp安全、防火墙及入侵二个主要的模块,将其中的各项安全尽可能考虑周全并切实实施,才能保证整个 web平台的高效稳定性。.图1.0 安全lamp模型1.4 模型的分析模型的划分原则:首先在实现 Linux系统安全的基础,搭建安全的apache,PHP,mysql
12、 服务器,构成一个内部安全的 web平台,然后再结合防火墙与入侵检测技术加固整个 web平台外部安全性,形成一个内外结合的稳定,安全 lamp系统模型。1.5 模型的实现1.5.1 Linux 系统的安全防护L i n u x 系统作为 L A M P 组合的基础,它的安全关系到整个系统的稳定,尽管 L i n u x 在功能上、价格上和性能上都有很多优势,但是作为开放式的操作系统,可以在网络上找到许多现成的程序和工具,这既方便了用户,也方便了黑客,因为他们也能很容易地找到程序和工具来潜入 L i n u x 系统,或者盗取 L i n u x 系统上的重要信息。因此需要我们仔细地设定 L i
13、 n u x 的各种系统功能,并且加上必要的安全措施。一般来说对它的安全防护体系主要包括一下几个方面:保护账户的安全试用最新的系统核心取消不必要的服务.日志管理共同防御,确保安全1.5.2 Apache 服务器的安全防护安装最新的补丁隐藏 Apache 的版本号及其他敏感信息确保 Apache 以其自身的用户账号和组运行确保 Web 根目录之外的文件没有提供服务关闭目录浏览关闭 CGI 执行程序,多重选项。1.5.3 MySQL 数据库安全防护M y S Q L 数据库是跨平台的关系型数据库,同时又是具有客户机/ 服务器体系结构的分布式数据库管理系统。用户可以利用很多语言编写访问数据库。大部分
14、L i n u x 发行版都已经集成了 M y S Q L 作为标准的数据库软件,所以需让它运行得更加安全。root 口令管理限制拥有 process 权限的用户范围不要把 file 权限给所有用户由于篇幅所限,本文不再深入讨论有关 Mysql数据方面的安全。1.5.4 PHP 服务器安全防护P H P 是一种功能强大的语言和解释器,无论是作为 W e b 服务器的模块方式运行还是作为单独的 C G I 程序运行,都能访问文件、执行命令或者在服务器上打开链接,而这些特性都使得 PHP 运行时必须特别注意安全。以安全模式运行 PHP关闭 PHP 的错误显示限制 PHP 脚本的运行目录使用 PHP
15、 加密技术.1.5.5 防火墙与入侵检测设计防火墙作为系统的第一道防线,其主要作用是监控可信任网络和不可信任网络之间的访问通道,可在内部与外部网络之间构成一道防护屏障,拦截来自外部的绯法访问并阻止内部信息的外泄,用 Linux+iptables做防火墙具有很高的灵活性和稳定性,而设置一个好的安全规则并严格实施,是配置一个好的防火墙必备条件。入侵检测技术的作用是监控网络和计算机系统是否出现被入侵或滥用的征兆。经过不断发展和完善,作为监控和识别攻击的标准解决方案,IDS 系统已经成为安全防备系统的重要组成部分。Linux 平台下入侵检测的工具软件,如 snort,它是一款轻量级且易于使用的工具,可
16、以独立运行,也可以与 psad和 iptables一起使用。根据系统需求灵活应用,建立安全的 IDS系统。第二章 Linux 系统的安全配置2.1 Linux 操作系统简介由于 Linux操作系统是一个开放源代码的免费操作系统,因此受到越来越多用户的欢迎。随着 Linux操作系统在我国的不断普及,有关的政府部门更是将基于Linux开发具有自主版权的操作系统提高到保卫国家信息安全的高度来看待,因此我们不难预测今后 Linux操作系统在我国将得到更快更大的发展。虽然 Linux与UNIX很类似,但它们之间也有一些重要的差别。对于众多的习惯了 UNIX和Windows NT的系统管理员来讲,如何保证
17、 Linux操作系统的安全将面临许多新的挑战。2.2 版本选择与安装2.2.1 安装 red hat AS 4.0 操作系统在安装该版本的 Linux系统时候,需要充分考虑各个磁盘分区的安全性,分别为不同的应用安装单独的主分区,将关键的分区设置为只读,这样将大大提高文件系统的安全。.(1)磁盘分区安全问题:Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况下要把根目录(/) 、引导目录(/boot) 、用户目录(/home) 、临时目录(/tmp) 、/usr/local 和/var 目录分开到不同的磁盘分区,这样会保证如果某些目录遭到攻击或破坏不会波及到其
18、他重要的目录,而且各目录所在分区的磁盘空间大小应充分考虑,避免因某些原因造成分区空间用完而导致系统崩溃.(2) 分区方案表虚拟机的 linux系统目前有 12G的空间可用:目录 空间容量 配置说明根目录 / 3G引导目录 /boot 120MB 包含了操作系统的内核和正常启动系统的文件,把/boot 单独分区,使主要的其它分区出现了问题,系统依然能够启动。交换目录 /Swap 512M 作为交换分区,推荐大小为内存的两倍,本机的内存为 256M,所以分配为 512M用户目录 /home 2G 该空间主要存放用户的个人文件临时目录 /tmp 1G 存放大量的临时文件和碎片,对于多用户系统或者网络
19、服务器是必要的。当用户对系统进行了错误的操作,因为文件系统的这一部分仍然还承受着读写操作,它通常会比其它的部分更快地发生问题。所以文件系统的其它部分仍然是安全的.软件目录 /usr 3G 该分区是 Linux 系统存放软件的地方,应将最大空间分给它日志目录 /var 2G /var 分区是数据变化频繁,存放系统日志分区,也是 LINUX redhat AS 4.0 的 WEB 目录默认存放位置,如/var/www/html.(3)fdisk -l 查看分区信息,如图 1.1 所示。图 1.1 分区情况2.3 Linux 系统安全问题 (1)篡改 Root密码如果不给 Grub 设置口令,那么就
20、等于 root用户的密码可以被随意更改,因为攻击者可以通改 Grub的引导参数,从而进入单用户模式直接修改 root密码。所以作为一个安全的系统,给 Grub 设置密码是十分必要的。(2)用户权限问题对不同的用户必须要分类管理,赋予不同的操作权限,而对于那些不设密码的用户,必须要禁止,这样可以防止攻击者利用此途径进入系统。通过查看/etc/passwd文件可以检查用户名与密码的对应关系。(3)口令文件安全在 Linux系统下的/etc/passwd 文件,是以明文方式存放密码的,这就给系统的安全性带来了很大的隐患。用 chattr命令给的文件加上不可更改属性,从而防止非授权用户获得权限。 .(
21、4)Su 命令安全通过系统的 su命令,普通用户在知道 root用户密码的前提下可以转化为 root用户,这给系统的安全带来很大的隐患。为了防止此类问题的发生,可以禁用 su命令。增强系统安全性(5)系统信息泄露默认情况下,当你登录 Linux系统的时候,会显示出相关的系统信息,这样会给攻击者利用,提高其入侵的成功率。我们可以编辑相关的文件来隐藏系统的信息。(6)DoS 攻击DoS 攻击是指攻击者通过消耗受害网络的带宽,消耗受害主机的系统资源,发掘编程缺陷,提供虚假路由或 DNS信息,使被攻击目标不能正常工作。为了防范此类的攻击,我们可以对系统所有的用户设置资源限制。2.4 linux 系统安
22、全策略2.4.1 给 BIOS 设置密码Bios 设置密码,以防通过在 Bios中改变启动顺序,而可以从软盘启动。这样可以阻止别人试图用特殊的启动盘启动你的系统,还可以阻止别人进入 Bios改动其中的设置(比如允许通过软盘启动等) 。2.4.2 设置 grub 启动口令grup负责引导主集中的操作系统,其安全性设置至关重要(从 grup或 lilo引导开始,可以进入 single 模式,修改 root密码)第一步:设置文件/boot/grub/grub.conf,在 passwword 后面加入设置的密码。第二步:重新返回引导界面,根据提示,按要求输入用户名和密码。2.4.3 为 LILO 增
23、加开机口令.LILO是代表 Linux加载程序,在/etc/lilo.conf.anaconda 文件中增加选项,从而使 LILO启动时要求输入口令,以加强系统的安全性。第一步:编辑 lilo.conf.anaconda文件(vi /etc/lilo.conf.anaconda),在/etc/lilo.conf.anaconda文件中添加两个选项:restricted,password。并在password选项后面添加要设定的密码,这样系统在启动 lilo时就要求通过密码验证。第二步:通过编辑 lilo.conf.anaconda文件,可以知道在 lilo中,口令是以明码的方式存放的,存在一定
24、的安全隐患,所以要把/etc/lilo.conf.anaconda 文件的权限设置为:只允许 root用户读取。 rootlocalhost /# chmod 0600 /etc/lilo.conf.anaconda .第三步:为了防止非法更改 lilo.conf.anaconda文件,可以使用“chattr” 命令把“/etc/ llilo.conf.anaconda “文件无法变动。rootlocalhost /# Chattr +i /etc/lilo.conf.anacoda2.4.4 用户与口令设置(1)用户安全: 在 Linux系统中,系统将输入的用户名存放在/etc/passwd
25、 文件中。能够对其进行访问的只能是超级用户(root)和操作系统的一些应用程序。还要杜绝不设口令的帐号存在。可以通过查看/etc/passwd 文件发现。例如,存在的用户名为 test的帐号,没有设置口令,则在该文件中存在第二项为空:test:100:9:/home/test:/bin/bash。应将该类帐号删除或者设置口令。 (2)用户口令:在/etc/passwd 文件中是以明文方式存放密码的,这就给系统的安全性带来了很大的隐患。用 chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。 rootlocalhost /# chattr +i /etc/passwd .r
26、ootlocalhost /# chattr +i /etc/shadow rootlocalhost /# chattr +i /etc/group rootlocalhost /# chattr +i /etc/gshadow(3)修改一些系统帐号的 Shell 变量:系统中存在一些默认的账号,例如 uucp,ftp和 news等,有一些仅仅需要 FTP功能的帐号,一定不要给他们设置/bin/bash 或者/bin/sh 等 Shell变量。编辑/etc/passwd 文件,输入以下命令,将它们的 Shell变量置空.rootlocalhost /# usermod s /dev/null
27、 uucprootlocalhost /# usermod s /dev/null ftprootlocalhost /# usermod s /dev/null news(4)设置口令最小长度和最短使用时间 编辑/etc/login.defs 文件中 PASS_MIN_DAYS选项,修改参数为 30天,PASS_MIN_LEN选项。设置为长度为 8。2.4.5 取消普通用户的控制台访问权限 使用命令 rm -f /etc/security/console.apps/,取消普通用 户的控制台访问限,比如 shutdown、reboot、halt 等命令,program 表示要注销的程序名。2.
28、4.6 控制 root 登录 tty 设备 “/etc/securetty”文件允许你规定“root”用户可以从那个 TTY设备登录。编辑 securetty文件(vi /etc/securetty)注释掉(在这一行的开头加上号)不想让 root登录的 tty设备.2.4.7 禁止普通用户 su 为 root 用户su(Substitute User替代用户)命令允许你成为系统中其他已存在的用户,如果你不想任何人能够 su作为 root,你能编辑/etc/pam.d/su 文件,并添加下面的行:auth required /lib/security/$ISA/pam_wheel.so.grou
29、p=isd这表示只有 isd组的用户可以执行 su命令成为 root用户。2.4.8 隐藏系统信息 设置登陆时候不要显示操作系统和版本信息,首先编辑 “/etc/rc.d/rc.local“ 文件, 在下面显示的这些行前加一个“#”,把输出信息的命令注释掉或者备份后清空。然后删除“/etc“目录下的“”和“issue“文件: rootlocalhost /#rm f /etc/issuerootlocalhost /#rm f /etc/ 2.4.9 阻止 ping 防止任何人 ping你的系统,提高系统的安全性。rootlocalhost/# echo 1 /proc/sys/net/ipv
30、4/icmp_echo_ignore_all 1 /proc/sys/net/ipv4/icmp_echo_ingnore_all2.4.10 防止 DoS 攻击 对系统所有的用户设置资源限制可以防止 DoS类型攻击。如最大进程数和内存使用数量等。第一步:编辑/etc/security/limits.conf,并添加以下内容:rootlocalhost /# vi /etc/security/limits.confrootlocalhost /# hard core 0rootlocalhost /# hard rss 5000rootlocalhost /# hard nproc 20 .第
31、二步:然后必须编辑/etc/pam.d/login 文件检查,检查 session required /lib/security/pam_limits.so 是否存在。没有就自己添加上面的命令禁止调试文件,限制进程数为 50并且限制内存使用为 5MB。2.4.11 特别的帐号禁止所有默认的被操作系统本身启动的且不需要的帐号,当你第一次装 系统时就应该做此检查,Linux 提供了各种帐号,你可能不需要,如果你不需要这 个帐号,就移走它,你有的帐号越多,就越容易受到攻击。在终端上打入下面的命令删掉下面的用户。rootlocalhost /# userdel admrootlocalhost /#
32、userdel lprootlocalhost /# userdel syncrootlocalhost /# userdel shutdownrootlocalhost /# userdel haltrootlocalhost /# userdel mail如果你不用 sendmail服务器,procmail.mailx,就删除这个帐号。rootlocalhost /# userdel newsrootlocalhost /# userdel uucprootlocalhost /# userdel operatorrootlocalhost /# userdel games如果你不用 X
33、windows 服务器,就删掉这个帐号。rootlocalhost /# userdel gopherrootlocalhost /# userdel ftp如果你不允许匿名 FTP,就删掉这个用户帐号。.打入下面的命令删除组帐号rootlocalhost /# groupdel admrootlocalhost /# groupdel lprootlocalhost /# groupdel mail如不用 Sendmail服务器,删除这个组帐号rootlocalhost /# groupdel newsrootlocalhost /# groupdel uucprootlocalhost /
34、# groupdel games如你不用 X Windows,删除这个组帐号rootlocalhost /# groupdel diprootlocalhost /# groupdel pppusersrootlocalhost /# groupdel popusers2.4.12 经常更新及安装补丁由于各种 linux厂商的分版不同,所以先访问 redhat相关主页获取信息 ftp:/ Fvh 文件名可用up2date命令直接更新.第三章 Apache 安全分析与配置3.1 Web 服务器软件 Apache 简介随着网络技术的普及、应用和 Web技术的不断完善,Web 服务已经成为互联网上重
35、要的服务形式之一。原有的客户端/服务器模式正在逐渐被浏览器/服务器模式所取代。本章将介绍 Web服务器的工作原理以及面临的主要威胁,并结合 linux平台搭配安全的 Web 服务器。.3.1.1. Apache 的工作原理客户端与服务器的通信过程简述如下:(1)客户端(浏览器)和 Web服务器建立 TCP连接,连接建立以后,向 Web服务器发出访问请求(如 get)。根据 HTTP协议,该请求中包含了客户端的 IP地址、浏览器的类型和请求 的 URL等一系列信息。(2)Web 服务器收到请求后,将客户端要求的页面内容返回到客户端。如果出现错误,那么返回错误代码。(3)断开与远端 Web服务器的
36、连接。3.1.2 Apache 服务器面临的安全问题 为了保护 Web服务器不被恶意攻击和破坏,第一步就是要了解和识别它所面临的安全风险,Apache 服务器主要面临的安全问题如下:(1)显示版本信息通常,软件的漏洞信息和特定版本是相关的,因此,版本号对黑客来说是最有价值的。在默认情况下,系统会把 Apache版本模块都显示出来,这样无疑是给黑客提供了重要的消息,防止此类的信息泄露,可以通过修改 apache的配置文件。(2)拒绝服务攻击这种方法攻击者会通过某些手段使服务器拒绝对 HTTP应答。这样会使 Apache对系统资源(CPU 时间和内存)需求的剧增,最终造成 Apache系统变慢甚至
37、完全瘫痪。(3)被攻击者获得 root权限的安全缺陷该安全缺陷主要是因为 Apache服务器一般以 root权限运行(父进程),攻击者会通过它获得 root权限,进而控制整个 Apache系统。杜绝此类安全隐患可以为Apache使用配置专门的用户和用户组,并限制其权限。(4)防止非法用户访问黑客通过匿名用户来攻击 apache服务器,这样使得 web服务器难以追踪到黑客的真实身份,不利于进行反攻击及安全防范策略的实施,Apache 自带用户认证机制可以帮我们解决这个问题,它能够有效控制所有登录并检查访问用户的合法性,使合法用户以合法的权限访问网络系统的资源。维护 web网站的安全。.(5)文件
38、与目录信息安全对于 web网站的一些重要文件,一旦被黑客知道其准确的位置,通过入侵web服务器,非法获得读取权限,使这类信息暴露出来,解决文件和目录安全的方法,可以通过设置文件的访问权限和禁止目录的索引来完成。(6)Web 的通信弱点HTTP没有提供加密机制,第三方可以在客户和服务器之间窃听通讯。HTTP是一个无状态协议不保存有关用户的信息,不能证实用户的身份。HTTP 没有提供方法来认证正在进行的会话。不能判断是否有第三方窃听了会话。为了解决这些缺陷,我们可以使用安全套接层协议 SSL。安全套接层是采用 RSA和 DES认证与加密以及MD5完整性检查而包装起来的方法。使用这些方法,SSL 解
39、决了基于 Web通讯的安全问题3.2 配置一个安全的 Apache 服务器 下面就以 Apache 2.2.4 版本为例图文说明如何搭建一个安全的服务器。3.2.1 及时升级系统或添加补丁经常关注相关网站的安全信息发布,并且及时修补和升级。使用最高和最新的安全版本对于加强 Apache Web服务器的安全是至关重要的。3.2.2 隐藏和伪装 Apache 的版本第一步:先使用端口扫描工具 nmap来查看未设置前的端口信息,如图 2.1所示.图 2.1 扫描端口第二步:编辑配置文件/etc/httpd.conf。找到 ServerSignature关键字,并修改为 ServerSignature
40、 On ServerTokens Prod。如图 2.2所示。图 3.1 配置 httpd.conf文件第三步:然后重新启动 Apache服务器。使修改生效,再用 nmap工具进行扫描,发现提示中的 Apache版本信息已经隐藏了。如图 3.2所示。.图 3.2 验证配置3.2.3 建立一个安全的目录结构Apache服务器包括以下四个主要目录。 ServerRoot:保存配置文件(conf 子目录)、二进制文件和其他服务器配置文件。 DocumentRoot:保存 Web站点的内容,包括 HTML文件和图片等。 ScripAlias:保存 CGI脚本。 Customlog和 Errorlog:
41、保存访问日志和错误日志。安全配置原则: ServerRoot 目录应该被配置为只能由 root用户访问;DocumentRoot应该能够被管理 Web站点内容的用户访问和使用 Apache服务器的Apache用户和 Apache用户组访问;ScriptAlias 目录应该只能被 CGI开发人员和Apache用户访问;只有 root用户可以访问日志目录3.2.4 为 Apache 使用专门的用户和用户组按照最小特权原则,需要给 Apache分配一个合适的权限,让其能够完成 Web服务。必须保证 Apache使用一个专门的用户和用户组,不要使用系统预定义的账号,.比如 nobody用户和 nogr
42、oup用户组。因为只有 root用户可以运行Apache,DocumentRoot 应该能够被管理 Web站点内容的用户访问和使用 Apache服务器的 Apache用户和 Apache用户组访问。 设“cao”用户要在 Web站点发布内容,只有 root用户才可以访问日志目录,如图 3.3所示.图 3.3 设置 apache用户与组3.2.5 Web 目录的访问策略(1)禁止使用目录索引当用户访问一个不存在于服务器的文件时, Apache就会显示该目录的列表。这样会暴露 Web站点结构,因此需要修改配置文件禁止显示动态目录索引。修改配置文件 httpd.conf:Options -Index
43、es FollowSymLinks(2)禁止用户重载为了禁止用户对目录配置文件(.htaccess)进行重载(修改),可以设定:AllowOverride None3.2.6 关注 Apache 服务器日志文件Apache可以记录所有的访问请求,同样,错误的请求也会记录。Apache 配置文件中,需要关心的和日志相关的配置文件有两个:.$ CustomLog /www/logs/access_log common #记录 Web站点的每个进入请求$ ErrorLog /www/logs/error_log #记录产生错误状态的请求#通过分析与维护这些日志文件可以快速的定位和解决服务器的故障。3
44、.2.7 htaccess 文件实现用户安全认证第一步:首先利用 Apache附带的程序 htpasswd,在/etc/httpd/conf.d/目录下生成包含用户名和密码的文本文件:pdfile.txt,系统自动生成每行内容格式为“用户名:密码”,如图 3.4所示.图 3.4 建立用户密码文件第二步:然后在 conf.d目录下创建 apache 基本认证配置文件 auth_basic.conf(亦可在 httpd.conf内设置) 如图 3.5所示.图 3.5 设置配置文件第三步:最后进入/var/www/html/目录下创建控制的目录和.htaccess 文件,如图 3.6所示图 3.6
45、建立.htaccess 文件.htaccess文件最后的“require”告诉服务器哪些用户可以进入。第四步:验证用户,在浏览器的地址栏中输入:http:/172.16.4.203/doc若提示输入认证,则表示配置正确。如图 3.7所示.图 3.7 浏览器验证第五步:按要求输入用户名,密码即可进入需要访问的目录,如图 3.8所示.图 3.8 显示结果3.2.8 设置文件访问的权限设置在认证配置文件 auth_basic.conf或 httpd.conf内设置禁止读取文件,下面以 aa,html文件为例,演示如何禁止他人读取。第一步:编辑认证文件 auth_basic.conf文件,加入这段内容
46、,如图 3.9所示.图 3.9 编辑 auth_basic_conf 文件第二步:配置完成后,重新启动 apache服务器,打开浏览器,在地址栏中输入 http:/172.16.4.203/security,测试是否可以访问 aa.html文件。如图 3.10所示图 3.10 测试配置第三步:从第二步的图示可见,无法浏览到 aa.html文件,如果有客户故意在/securty后输入 aa.html文件,提示无法访问到该文件。表示设置正确。如图3.11所示.图 3.11 显示结果3.2.9 设置目录的访问权限利用 apache 的访问控制,设定/var/www/html/acl 目录只有 172
47、.16.4.0/24 网段的客户端可以访问。第一步:创建试验所需的目录和 index.html 文件,如图 3.12所示.图 3.12 创建index文件第二步:创建访问控制所需的配置文件,并重启 apache 服务器.使改动生效:如图 3.13所示.图 3.13建配置文件第三步:测试配置,客户端在 172.16.4.0/24 网段做访问。如图 3.14所示.图 3.14 测试配置第四步: 把客户端的 IP地址改为 172.16.3.2,测试在非 172.16.4.0 网段访问. 在地址栏上输入 http:/172.16.4.203/acl,若出现下图所示的页面,表示设置生效了。如图 3.15
48、所示.图 3.15 显示结果.3.2.10 减少 CGI 和 SSI 风险CGI脚本的漏洞已经成为 Web服务器的首要安全隐患,通常是程序编写 CGI脚本中产生了许多漏洞。控制 CGI脚本的漏洞除了在编写时需要注意对输入数据的合法性检查、对系统调用的谨慎使用等因素外,首先使用 CGI程序所有者的 UID来运行这些程序。这些 CGI程序即使存在某些漏洞,那么其危害也仅限于该 UID所能够访问的文件。而不会对整个系统带来致命的影响。因此,除了内部调试程序时都应当可以使用 Option命令禁止其使用。Options IncludesNOEXEC3.2.11 使用 SSL 加固 ApacheSSL使用
49、公共密钥加密技术,服务器在连接结束时给客户端发送公用密钥用来加密信息,而加密的信息只有服务器用它自己持有的专用密钥才能解开。客户端用公用密钥加密数据,并且发送给服务器自己的密钥,以唯一确定自己,防止在系统两端之间有人冒充服务器或客户端进行欺骗。所以具有 SSL功能的 Web服务器,可以提高网站的安全性能。配置 ssl认证实例:在配置的过程中,需要用到 mod_ssl软件包,先用命令“rpm -qa | grep mod_ssl”检查是否安装,如果没有安装,以 root的身份登录系统自行安装。此处不再做详细的讨论。 第一步:产生 SSL凭证,使用 openssl genrsa -out server.key 1024命令可以生成.key 和.csr 档. 如图 3.16所示.图 3.16