服务器的安全控制
Apache提供的各种特性非常丰富,主要是由于其采用的是模块化的结构,这样就很容易进行分布式开发。 Internet上的众多开发者为Apache提供了各种各样的能力,使其能具备其他的Web服务器不能与之相比的能力。在服务器所具备的众多特性中,安全控制的特性最为有用。
Apache服务器可以基于IP地址和基于用户对访问服务器进行控制。在设置文件httpd.conf(或 access.conf)中,这些访问控制的设置是放置在Directory、File和Location语句中的,分别针对主机上的目录、文件以及URI进行存取控制。然而,由于不是每个使用者都可以随便更改系统Web服务器的设置文件,并能重新启动服务器的,因此在设置文件中的控制语句只是提供了基本的访问控制策略,而更灵活的方式是通过各个文档目录中的访问控制文件来实现的。
为了在需要访问控制的每个目录下都设置访问控制文件,首先要在系统配置文件中设置这个访问控制文件及其访问作用。需要使用AccessFileName定义访问控制文件的名字,缺省它被设置为.htaccess。缺省设置文件将在针对根目录及/usr/local/www/data这个文档根目录的访问控制语句中设置AllowOverride None ,这就意味着不允许这个目录及其子目录中的访问控制文件起作用,为了使得访问控制文件发挥作用,必须针对需要设置访问控制的目录设置AllowOverride All或其他有部分访问控制功能的选项,此时该目录及其子目录下的访问控制文件也会发挥作用。
AllowOverride All将允许.htaccess文件能改变所有的访问控制功能,如果仅仅希望目录的所有者只控制部分访问控制功能,可以使用AllowOverride的其他设置选项,那样.htaccess只能使用允许的设置选项。
要在.htaccess文件中针对IP地址和域名进行控制,就需要使用访问控制语句的Limit语句。因此就要求httpd.conf中必须允许控制文件使用Limit功能,对应的设置为AllowOverride Limit选项(或All选项)。
Limit语句可以使用不同的参数,这些参数为HTTP协议的请求方法,如使用 限制HTTP协议中的GET方法,限制http协议中的POST方法,使用标识这个控制段的结束。对于一般的情况,可以对大部分客户打开GET、POST和HEAD 请求,而关闭PUT、DELETE等其他更复杂且不常用的请求。
如果在.htaccess中没有使用Limit语句指定具体的访问方法,那么就表示访问控制命令将对所有的请求方法都进行控制。
Order定义服务器查询访问控制的顺序,当设置为Order Allow, Deny的时候将先处理Allow 语句,再处理Deny语句。Order Deny, Allow的处理顺序相反。由于这两种不同的方式代表不同的访问控制策略,Order deny, allow和deny from all合作,是用于只允许设置过的客户机访问服务器,而Order allow, deny和allow from all合作,是允许所有的客户机访问,而仅仅屏蔽部分具有恶意的网络地址。
在每个Allow或Deny命令中,可以使用域名(从后向前匹配)、IP(从前向后匹配),all(代表所有主机)来标识Internet上的计算机。这里是一个例子: