1、M8-3 提升Linux系统的WEB服务的安全防御 1.1教学目的与要求 1.1.1 教学目的 学生通过该能力模块的学习,能够独立完成和熟练掌握安全配置WEB服务,从而实现提升Linux系统的WEB服务器安全防御能力。 1.1.2 教学要求 1.教学重点 ² Apache安全配置选项 ² SSL加密安全 2.教学难点 ² SSL加密安全 1.2 本能力单元涉及的知识组织 1.2.1本能力单元涉及的主要知识点 1、Apache配置文件 2、SSL加密安全 1.2.2本能力单元需要解决的问题 1、按照项目的需求,重点掌握WEB服务的安全配置选项。 2、按照项目的需求
2、重点掌握SSL加密安全。 1.3 核心技术和知识的理解 1.3.1 安全配置选项 【第一部分】 ·ServerType standalone 这表示Apache是以standalone启动,也可以是inetd。所谓standalone是指启动一次来接听所有的连线;而inetd是接到http的连线要求才启动,随着连线的结束而结束,这样负担是不是很但呢?所以一般都是以standalone启动。 ·ServerRoot "/usr/local/httpd" 此为apache的目录 ·#LocdFile /use/local/httpd/logs/httpd.lock 保留预设值
3、不更动 ·PidFile /usr/local/httpd/logs/httpd.pid 此文件记录着apache的父处理程序id ·ScoreBoardFile /usr/local/httpd/logs/httpd.scoreboard 此文件存储处理程序的信息 ·#ResourceConfig conf/srm.conf ·#AccessConfig conf/access.conf 由于我们统筹由httpd.conf来管理,所以这两个文件预设是注解起来的,可以保留预设值不更动 ·Timeout 300 设盯超时的时间。如果用户端超过300秒还没连上server,或s
4、erver超过300秒还没传送信息给用户端,即断线。 ·KeepAlive On 允许用户端的连线有多个请求,设为Off表示不允许 ·MaxKeepAliveRequests 100 每次连线最大的请求树木,数字愈大,效能愈好。0表示不限制 ·MinSpareServer 5 ·MaxSpareServers 10 MinSpareServer 5表示最少会有5个闲置的处理程序,如果实际的数目少于此数目,则会增加处理程序。MaxSpareServers 10表示最大的闲置处理程序数目,如果你的网站需求量很大,可以将此数目设大一些,大不要随便将此数目设得太大。 ·StartSer
5、vers 5 启动时Server的数目 MaxClients 150 限制同时间最大的连线数目,当然不能设得太小,一旦达到此数目,就无法再增加用户端 ·MaxRequestPerChild 0 限制子处理程序结果前的要求数目,0表示不限制 ·#Listen 3000 ·#Listen 12.34.56.78:80 使用其它的连接端口或IP ·BindAddress * 可以接听*(所有IP地址)、指定的IP地址或是完整的域名 ·#LoadModule foo_module libexec/mod_foo.so 使用DSO模块 ·#ExtendedStatus On
6、可检阅apache的状态信息,预设是Off(注解起来) 【第二部分】 如果之前的ServerType是inetd,请直接跳到ServerAdmin。 ·Port 80 Standalone服务器接听的连接端口,当然也可以是其他小于1023的端口号 ·User nobody ·Group nobody 执行httpd的用户和群组 ·ServerAdmin 管理员的电子邮件地址 这是管理员的电子邮件地址,如果apache有问题的话,会寄信通知管理员,当然你也可以建立一个专门负责web的帐号来收信 ·ServerName 你的主机名称 此为主机名称,如果没有域名,也可以用IP
7、 ·DocumentRoot "usr/local/httpd/htdocs" 此目录为apache放置网页的地方,里面的index.html即为连到此主机的预设首页 Options FollowSymLinks AllowOverride none 此目录设定用户放置网页的目录(public_html)的执行动作。详细的目录存取方法会在后面说明 Options Indexes FolloeSymLinks AllowOverride None Order allow,deny Allow from all 此目录设定apache的网页目录(htdocs)的执行动作 ·U
8、serDir public_html 用户可在自己的目录下建立public_html目录来放置网页,输入http://主机地址/~用户名称即可连接到...劳撤胖玫牡胤?/a> ·DirectoryIndex index.html 这里设定预设主页的名称 ·AccessFileName .htaccess 这个是控制存取的文件名称,一般采用预设的.htaccess名称,后面会说明htaccess的使用方法 Order allow,deny Deny from all 这用来防止其他人看到.ht开头的文件内容,不仅是保护.htaccess的内容,还保护.htpasswd的内容。当然
9、也可以直接写成。如果你有更改AccessFilename,例如将.htaccess改成.accessht,请记得也要在此做相关的更改,如此才能防止其他人看到哦 ·#CacheNegotiatedDocs 注解起来是告诉Proxy不要将互动产生的文件存入cache,如果拿掉#,则会存在cache中 ·UseCanonicalName On 使用标准的名称,预设是On。假设有一个web server的全名是,一般称为www;如果us...羑ttp://www/abc ·TypeConfig /usr/local/httpd/conf/mime.types 指定存放MIME文件类型的文件
10、你可以自行编辑mime.types文件。 ·DefaultType text/plain 当server不认得此文件类型时的预设格式,此设定是当成一般文字 MIMEMagicFile /usr/local/httpd/conf/magic mod_mime_magic模块可使server由文件内容决定其MIME类型。如果有载入mod_mime_magic模块,才会处理MIMEMagicFile这一段。如果是…,则表示如果没有载入该模块,才会处理这一段 ·HostLookups Off 如果为On,则每次都会向name server解析该IP,记录此连线的名称(例如www.apac
11、he.org)自换岷牟簧偈奔洌...为Off,仅记录IP ·ErrorLog /usr/local/httpd/logs/error_log 指定发生错误的记录文件(error_log)位置。如果在没有指定发生错误的记录文件,则会沿用此文件 ·LogLevel warn 记录分成很多等级,在此是warn。各等级如下: 等级 说明 debug debug信息 info 普通信息 notice 重要信息 warn 警告信息 error 发生错误 crit 紧急情况 alert 马上要处理的情况 amerg 系统快要死了 LogFormat "%h %l %u %t\"%r
12、\"%>s %b\"{Referer}i\"\"${UserAgent}i\""combined LogFormat "%h %l %u %t"%r\"%>s %b"commom LogFormat "%{Referer}i->%U"referer LogFormat "%{User-agent}i"agent 自定四种记录格式:combined、common、referer、agent ·CustomLog /usr/local/httpd/logs/access_log common 存取的记录文件(access_log)使用自定的common格式 ·#CustomLog /
13、usr/local/httpd/logs/referer_log referer #CustomLog /usr/local/httpd/logs/agent_log agent #CustomLog /usr/local/httpd/logs/agent_log combined 这三个记录文件也是使用自定义格式(分别是referer、agent、combined),不过注解起来表示未使用这三个文件 ·ServerSignature On 设为On时,在server所产生的网页(像是错误发生时)上,会有apache的版本、主机、连接端口的一行信息;如果设为Email,则会有mail
14、to:给管理员的超链接 ·Alias /icons/ "/usr/local/httpd/icons/" 使用较短的别名,其格式为:Alias 别名 原名。 ·ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" 和Alias一样,只是这是设定server script的目录 ·IndexOptions FancyIndexing 显示好看的文件清单(配合下面各文件所对应的图形) ·AddIconByEncoding(CMP,/icons/compressed.gif)x-conpress x-gzip ·AddIcon /icon
15、s/blank.gif^^BLANKICON^^DefaultIcon/icons/unknow.gif 这些是在显示文件清单(之前所说的FancyIndex)时,各种文件类型的对应图形。例如.ps .si .eps这三种文件的表示图形都是a.gif ·#AddDescription "GZIP conpressed document" .gz #AddDescription "tar archive" .tar #AddDescription "GZIP compressed tar archive" .tgz 这些是在显示文件清单时,在文件后面附上说明,其格式为: AddDes
16、cription "说明" 文件名 例如:AddDescription "It is private txt" my.txt ·ReadmeName README 显示文件清单时,在最下面显示README的文件内容 设置CGI脚本/将httpd.conf做为唯一的配置文件/用户授权和访问控制等 关于Apache的配置及使用,在LinuxAid中已经有不少文章做了详细的阐述,本文讨论了在使用Apache时,有关配置文件的使用及对文件的访问控制等内容,算是对Apache的使用所做的一些补充吧! 如果您对Apache有一定的了解,特别是对几个配置文件有一定的了解,这将会有助于您对本文内
17、容的理解;如果恰巧您不是很了解这几个配置文件的使用,那么就借着这个机会来一起熟悉一下吧。 一、关于CGI执行脚本的配置 这里有两种设置CGI脚本的方法。第一、CGI的脚本文件以.cgi为扩展名;第二、设置脚本可执行目录。但是这两种方法都需要将要执行的文件设置为711,才可以被执行。 第一种方法,我们需要在access.conf文件种将你要发行的目录设置为Option ExecCGI All,在srm.conf资源配置文件中,加上下列一句: AddHandle cgi-script .cgi 这样在所有的目录种只要你的文件是.cgi为扩展名的,且文件访问权限为711的,无论给文件在你发
18、行目录的任何一个地方都可以做为CGI被Apache服务器调用。这种方法一般没有第二种方法安全。
第二种方法,是将一个目录作为一个可执行目录,将所有的cgi文件都放在其中,这里就不一定非得是以.cgi为扩展名得文件可以执行,而是只要有711属性的文件就可以被执行,而且其它的非可执行文件都被禁止访问。我们的默认配置文件种就有一个很好的例子:
access.conf:
19、in/ /home/httpd/cgi-bin/ 这样只要在/home/httpd/cgi-bin/目录中的可执行文件都可以被Web服务器调用,而其它的非可执行文件将被拒绝访问。 二、配置用户的发行目录 这里有两种设置方法: 第一种是系统的默认方法,即用户目录下的public_html目录为用户的发行目录,且默认的主页文件为index.html,且该目录不支持CGI。 第二种是在其它目录种专门为用户设置发布目录,如我想在/home/html目录做为用户的web目录,那管理员就应该在该目录下为每一个用户设置一个子目录,如:/home/html/user01、/home/html/use
20、r02等。那么,你的srm.conf文件中的UserDir后面就不能再是public_html了,应该改为:UserDir /home/html/*/,注意这里的“*”代表anyone,当你再浏览器中请求一个如http://www.domain/~user01时,Apache...ndex.html文件。 这种设置不需要到access.conf中设置该目录的访问属性,还有,当我们设置虚拟主机时也不用设置目录的访问属性,但是如果你想让某个目录具有CGI权限,都要到Access.conf文件中去配置目录的访问权限,如:你想让你的所有用户在他们的发布目录中具有CGI访问权,则需要在你的access
21、conf中这样设置:
22、tcp nowait root /usr/sbin/httpd httpd 然后重新激活inetd服务器。这样你用ps -aux命令查看进程运行情况时,你不会发现httpd的进程的存在,但是一旦有客户请求一个页面时,inetd就激活一个httpd进程为该请求服务,之后就自动释放,这种运行方式有助于节省系统资源,但是如果你的web服务很重要,一般不建议设置为这种方式运行。 四、将httpd.conf做为唯一的配置文件 在Apache中给用户提供了三个配置文件: srm.conf、 access.conf 和 httpd.conf files。实际上这三个文件是平等的,所有的配置都可以放在一
23、个单独的httpd.conf文件中,事实上在Apache 1.3.2中就已经这样做了,在httpd.conf中应包括以下两条指令来防止Apache对srm.conf和access.conf两个配置文件的访问: AccessConfig /dev/null ResourceConfig /dev/null 在apache1.3.2中只要注释掉以下这两行即可: AccessConfig conf/access.conf ResourceConfig conf/srm.conf 五、用户授权和访问控制 你也许在访问某些网站时会遇到过这样的情况,当你点击某个连接时,你的浏览器会弹出一个身
24、份验证的对话框,要求输入账号及密码,如果没有,就无法继续浏览了。有人会以为这是用CGI做出来的,其实不然,这是WWW服务器的用户授权和访问控制机制在发挥作用。
你是否还记得在设置Apache服务环境的过程中,有
25、 AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Options Includes FollowSymLinks Indexes
AllowOverride All //*注意AllowOverride 一定要设置为All,这样后面的.htaccess文件才会起作用
26、
27、e 画面提示文字
AuthType 验证方式
28、的例子中,我们将用户密码文件放到了/etc/secure.user文件中,所以这里应按照如下进行操作: htpasswd -c /etc/secure.user sword 程序会提示你输入两次用户的口令,然后用户密码文件就已经创建sword这个用户也添加完毕了。 如果要向密码文件中添加新的用户,按照如下命令格式进行操作: htpasswd 密码文件 用户名称 这样,重新启动httpd后,进行该WEB目录时就会有一个对话框弹出,要求输入用户名及用户口令了。 4、如何减少访问控制对Apache性能的影响 频繁的使用访问控制会对Apache的性能产生较大的影响,那么,如何才能减少这种
29、影响呢?最简单也是最有效的方法之一就是减少.htaccess文件的数目,这样可以避免Apache对每一个请求都要按照.htaccess文件的内容进行授权检查。它不仅在当前的目录中查找.htaccess文件,它还会在当前目录的父目录中查找。 / /usr /usr/local /usr/local/etc /usr/local/etc/httpd /usr/local/etc/httpd/htdocs /usr/local/etc/httpd/htdocs/docs 通常在根目录下没有htaccess文件,但Apache仍然会进行例行检查以确定该文件确实不存在。这是影响很影响服务
30、器工作效率的事情。下面的方法可以消除这个讨厌的过程:将AllowOverride选设置为None,这样Apache就会检查.htaccess文件了。将/根目录的AllowOverride选项设为None,只将需要进行访问控制的目录下的AllowOverride选项设置为all,如下面的例子中将/根目录的AllowOverride 选项关闭了,只打开了/usr/local/etc/httpd/htdocs目录下的AllowOerride选项,这样,系统就只在/usr/local/etc/httpd/htdocs中检查.htaccess文件,达到的提高服务效率的目的。
31、
AllowOverride None
32、户访问指定的文件
系统中有一些文件是不适宜提供给WWW用户的,如:.htaccess、htpasswd、*.pl等,可以用
33、
这样这三个文件就不会被用户访问了。
6、限制某些用户访问特定文件
34、对其进行设置,否则该选项是不起作用的。
7、只接受来自特定链接的访问
例如,只让所有来自 的链接的用户进入此目录,由其它链接来的访客都不得进入; " * "表示此网站底下所有的链接。其中的 也可以是:http://202.106.184.200/* 或是指定文件
.htaccess文件的内容如下:
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName ExampleAllowFromSpecificURL
AuthType Basic
35、 all referer allow from 六、如何通过Apache访问挂接到mnt中的目录内容 在Linux下,要浏览光盘的内容,必须要先将光盘挂接到/mnt/cdrom上,在Linux下访问dos或其它分区也一样,都要将其先挂接到/mnt下。下面提供的方法,可以通过Apache显示上挂的目录内容: 1、 先将需要挂接的内容挂接到mnt下,如: mount –t iso9660 /dev/cdrom /mnt/cdrom 2、修改/usr/local/etc/httpd/conf中的srm.conf文件(在Apache1.3.2中修改httpd.conf
36、
加入别名支持:
# Alias fakename realname
# alias for netware server //
Alias /netware/ /mnt/MYDOM_NW/vol1/home/htmldocs/
Alias /winNT/ /mnt/MYDOM_NT/
Alias /unix/ /mnt/MYDOM_UNIX
其实这一步还有个最简单的方法就是直接在WWW文件目录下建立链接目录,比如:
ln –s /mnt/MYDOM_NT/ winNT
也能达到同样的效果。
3、最后,用Directory 分别指定用户对上面这几个目录的访问权限:
37、irecory “/mnt/MYDOM_NT”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
注意, Options中的Indexes一定要注明,否则被打开的目录中若没有Index.html文件,用户无法浏览整个目录的结构,服务器会返回错误指示。
这些工作都完成后,别忘了重新启动Apache。在客户端通过 http://www.yourdomain/CDROM/访问光盘内容,其余系统以此类推
#DocumentRoot "/usr/loca 38、l/apache/htdocs"
#设置存放站点html文件的目录。
39、做任何事,但不包括MultiViews。
AllowOverride:加None参数表示任何人都可以浏览该目录下的文件。
另外的参数有:FileInfo、AuthConfig、Limit。
1.3.2 SSL加密
SSL (Secure Socket Layer)
为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL 40、
当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客 41、户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
SSL协议的工作流程:
服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户 42、的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方 43、的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。
https介绍
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 44、 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。。
https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL。
它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法, 45、现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。限制它的安全保护依赖浏览器的正确实现以及服务器软件、实际加密算法的支持.一种常见的误解是“银行用户在线使用https:就能充分彻底保障他们的银行卡号不被偷窃。”实际上,与服务器的加密连接中能保护银行卡号的部分,只有用户到服务器之间的连接及服务器自身。并不能绝对确保服务器自己是安全的,这点甚至已被攻击者利用,常见例子是模仿银行域名的钓鱼攻击。少数罕见攻击在网站传输客户数据时发生,攻击者尝试窃听数据于传输中。
商业网站被人们期望迅速尽早引入新的特殊处理程序到金融网关,仅保留传输码(transaction number)。不过他们常常存储银 46、行卡号在同一个数据库里。那些数据库和服务器少数情况有可能被未授权用户攻击和损害。
1.4 实施过程指导
1.4.1 对Apache进行安全配置
第一步:隐藏Apache的版本号及其它敏感信息
默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为攻击者所用,并且攻击者还可以从中得知所配置的服务器上的很多设置都是默认状态。需要修改配置文件/etc/httpd/conf/httpd.conf来加强服务器安全。
#ServerTokens OS
ServerTokens Prod
#ServerSignatur 47、e On
ServerSignature Off
ServerSignature出现在Apache所产生的像404页面、目录列表等页面的底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:
Server:Apache
如果非常想尝试其它事物,你可以通过编辑源代码改成不是Apache的其它东西,或者你可以通过下面将要介绍的mod_security实现。
第二步:确保Apache以其自身的用户账号和组运行
有的Apache安装过程使得服务器 48、以nobody的用户运行,所以,假定Apache和邮件服务器都是以nobody的账号运行的,那么通过Apache发起的攻击就可能同时攻击到邮件服务器,反之亦然。
User apache
Group apache
第三步:确保web根目录之外的文件没有提供服务
不让Apache访问web根目录之外的任何文件。假设你的所以web站点文件都放在一个目录下(例如/web),修改配置文件/etc/httpd/conf/httpd.conf,具体如下所示:
# symbolic links and aliases may be used to point to other locat 49、ions.
#
DocumentRoot "/var/www/html"
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#






