Linux 安装Web服务器并不难,但是其维护和安全加固并非易事,这需要深入了解Linux系统以及Apache的各种配置选项这里需了解的问题是如何在安全性, 可操作性和易用性上找到平衡点,但这也取决于项目的具体需求,下面的最佳实践将总结出LAMP项目中所有服务器都有的共同点。
使用配置指令进行访问控制
利用Apache实现访问控制的配置指令包括如下3种。
     1.Order指令。
Order指令用于指定执行允许访问控制规则或者拒绝访问控制规则的顺序。
Order只能设置为“Order Allow,Deny”或“Order Deny,Allow”,分别用来表明用户先设置允许的访问地址还是先设置禁止访问的地址。
Order选项用于定义默认的访问权限与Allow和Deny语句的处理顺序。而Allow和Deny语句可以针对客户机的域名或IP进行设置,以决定哪些客户机能够访问服务器。
Order语句设置的两种值的具体含义如下。
       (1)Allow,Deny
默认禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配,如果某条件即匹配Deny语句,又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)。
         (2)Deny,Allow
默认允许所有客户机的访问,且Deny剧在Allow语句之前被匹配。如果条件即匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)。
 
   2.Allow语句
Allow指令指明允许访问的地址或地址序列,例如Allow From All 指令表明允许所有IP来的访问请求。
 
      3.Deny指令
Deny指令指明禁止访问的地址或地址序列。例如Deny from all 指令表明禁止所有IP来的访问请求。
下面举几个简单的例子,对上述的Order、Allow和Deny命令的使用进行示范。
在本例中,itchenyi.com域中的所有主句都允许访问网站,而其他非该域中的任何主句都被拒绝,因为Deny访问都被拒绝,因为Deny在前,Allow在后,Allow语句覆盖了Deny语句。
具体命令如下:
         Order Deny,Allow
         Deny from all
         Allow from itchenyi.com
在本例中, itchenyi.com域中所有主机,除了 ls.itchenyi.com子域包含的主机被拒绝访问以外,其他都允许访问,所有不在itchenyi.com域中的主句都不允许访问,因为默认状态 是拒绝对服务器的访问(Allow在前,Deny在后,Deny语句覆盖了Allow语句)。
具体命令如下:
         Order Allow,Deny
         Allow from itchenyi.com
         Deny from ls.itchenyi.com
使用.htaccess进行访问控制
任 何出现在配置文件httpd.conf中的指令都可能出现在.htaccess文件中。.htaccess文件在httpd.conf文件的Access FileName指令中指定,用于进行针对单一目录的配置,注意:htaccess文件也只能设置对目录的访问控制。
作为管理员,可以指定.htaccess文件的名字和可以通过该文件内容覆盖服务器配置,当站点有多组内容提供者并希望控制这些用户对他们空间的操作时,该指令非常有用。
需要注意的是,除了可以使用.htaccess文件针对单一目录进行访问控制配置外,该文件还可以在不重启Apache服务器的前提下使配置生效,使用起来非常方便。
 
1、在主配置文件httpd.conf中启用并对.htaccess文件的使用。
2、在需要覆盖主配置文件的目录下(也就是需要单独设定访问控制权限的目录生成.htaccess文件),对其进行编辑,并设置访问控制权限。
 
启用并控制对.htaccess文件的使用
想要启用并控制对.htaccess文件的使用,需要使用AccessFileName参数在主配置文件中配置如下语句。
         Access FileName .htaccess
         <File ~ "^\.htaccess">
         Order allow,deny
         Deny from all
         </Files>
 
在.htaccess文件中使用指令进行控制
要限制.htaccess文件能够覆盖的内容,需要使用AllowOverride指令,该指令可以进行全局设置或者单个目录设置。若配置默认可以使用的选项,需要使用Options指令。
例如,在httpd.conf文件中,可以采用指令建立对/var/www/icons目录的访问控制权限清单。具体指令如下:
         <Directory        "/var/www/icons">
         Options Indexs MultiViews
         AllowOverride None
         Order allow deny
         Allow from all
         </Directory>
         使用.htaccess文件例子
下面以一个简单的例子来示范一下具体该如何使用.htaccess文件。
         1、在Apache服务器文档根目录下建立一个测试目录,并创建测试文件。需要使用如下命令:
         [root@chenyi ~]# cd /var/www/html/
         [root@chenyi html]# mkdir chenyi
         [root@chenyi html]# cd chenyi/
         [root@chenyi chenyi]# touch chenyi.a
         [root@chenyi-2 chenyi]# touch chenyi.b
         2、修改Apache服务器配置文件。添加下面所示的语句:
        Directory "/var/www/html/chenyi"
         AllowOverride Options
         Directory
        3、在生成的测试目录/var/www/html/chenyi下生成.htaccess文件,并添加如下所示的语句:
         Options -Indexes
         4、重启Apache服务器,就可以看到在配置.htaccess文件前用户可以使用客户端浏览文件,而配置后无法浏览,注:这里重启Apache服务器是因为前面修改了主配置文件,而不是因为修改了.htaccess文件。
使用认证和授权保护Apache
认证和授权指令
目前,有两种常见的认证类型,即基本认证和摘要认证。
1、基本认证(basic):使用最基本得用户名和密码方式进行认证
2、摘要认证(Digest):该认证方式比基本认证要安全得多,在认证过程中额外使用了一个针对客户端的挑战(Challenge):信息,可以有效的避免基本认证方式可能遇到的“钟放***”,不过,目前并不是所有浏览器都支持摘要认证的方式。
 
所有的认证配置指令即可以出现在主配置文件httpd.conf中的Director容器中,也可以出现在单独的.htaccess文件中,这个可以根据需要灵活选择。在认证配置过程中,需要用到如下指令。
1、Authname:用于定义受保护区域的名称。
2、AuthType:用于指定使用的认证方式,包括上面所述的Basci和Digest两种方式。
3、AuthGroupFile:用于指定认证组文件的位置。
4、AuthUserFile:用于指定认证口令文件的位置。
使用上述的认证配置认证之后,需要为Apache服务器访问对象,也就是指定的用户和组进行相应的授权,以便它们对Apache服务器提供的目录文件和文件进行访问。
为用户和组进行授权需要使用Require指令,可以使用如下三种方式进行授权。
1、授权给指定的一个或者多个用户:使用Require user 用户名1、用户名2.....
2、授权给指定的一个组或者多个组:使用Require group 组名1、组名2......
3、授权给指定口令文件中的所有用户:使用Requirevalid-user。
 
管理认真口令文件和认证组文件
要 实现用户认证功能,首先要建立保存用户名和口令的文件,Apache自带的htpasswd命令提供了建立和更新存储用户名、密码文本文件的功能,需要特 别注意的是,这个文件必须放在不能被网络访问的位置,以避免下载或信息邪路,建立口令文件放在/etc/httpd目录或者其他子目录下。
下面的例子在httpd目录下创建一个文件名为passwd_auth的口令文件,并将用户chenyi加入认证口令文件,使用以下命令....(过程中会提示输入该用户的口令)
[root@chenyi apache2]# touch passwd_auth
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
New password:
Re-type new password:
Adding password for user chenyi
命令执行的过程中,系统会要求chenyi用户输入密码。上述命令中的-c选项表述无论口令文件是否已经存在,都会重新写入文件并删去原有内容,所以在添加第二个用户到口令文件时,就不需要-c选项了,使用以下命令即可。
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
认证和授权使用实例
(1)使用主配置文件配置用户认证及授权
在本例中,用户可以在Apache的主配置文件httpd.conf中加入以下语句,建立对目录/software/apache/htdocs/chenyi访问的用户认证和授权机制:
 <Directory      "/software/apache2/htdocs/chenyi">
 AllowOverride None
 AuthType Basic
 AuthName "chenyi"
 AuthUserFile /software/apache2/passwd_auth
 Require user chenyi itchenyi
 </Directory>
在上述例子中,使用了以下的指令。
AllowOveride:该选项定义了不实用htaccess文件
AuthType Basic:AuthType选项定义了对用户实施认证的类型,最常用的是由mod_auth提供的Basic。
AuthName:定义了Web浏览器显示输入用户/密码对话框时的领域内容。
AuthUserFile:定义了口令文件的路径,即使用htpasswd建立的口令文件。
Require user:定义了允许哪些用户访问,各用户之间用空格分开。
 
需要注意的是,在AuthUserFile选项定义中,还要使用语句事先建立认证用户chenyi和itchenyi,该选项中的定义才能生效。
具体语句如下:
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
此时重启了apache后  在访问该目录,就会要求验证....
apache安全加固

         (2)使用.htaccess文件配置用户认证和授权
在本例中,为了完成如上述例子同样的功能,需要先在主配置文件中加入如下语句:
<Directory "/software/apache2/htdocs/chenyi">
AllowOverride AuthConfig
</Directory>
上述语句中的AllowOverride选项允许在.htaccess文件中使用认证和授权指令。
然后,在.htaccess文件中添加以下语句即可:
   AuthType Basic
   AuthName "Please Login:"
   AuthUserFile /software/apache2/passwd_auth
   Require user chenyi itchenyi
在AuthUserFile选项定义中,也要使用如下语句先建立认证文件chenyi和itchenyi该选项的定义才会生效,注:如果你是接着方法1后做的测试就不用在建立认证文件,但要#注释掉Apache定义的参数后重新设置。
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
到这里,重启Apache后通过浏览器访问后就能看到.htaccess实现的效果了.....
 
使用Apache中的安全模块
1、找出Apache服务器中安全的相关模块
Apache的一个优势便是灵活的模块结构,其设计思想也是围绕模块(Module)概念而展开的。安全模块是ApacheServer中极重要的组成部分,这些安全模块负责提供ApacheServer的访问控制、认证、授权等一系列至关重要的安全服务。
Apache具有如下几类与安全相关的模块。
mod_access模块:能够根据访问者的IP地址或域名、主机名的等,来控制对Apache服务器的访问,称之为基于主机的访问控制。
mod_auth模块:用来控制客户和组的认证授权(Authentication)。用户名和口令存于纯文本文件中。
mod_auth_db和mod_auth_dbm模块:分别将用户信息(如名称、组属和口令等)纯于Berkeley-DB及DBM型的小型数据库中,便于管理及提高应用效率。
mod_auth_digest模块:采用MD5数字签名的方式进行用户认证,但它需要客户端的支持。
mod_auth_anon模块:功能和mod_auth的功能类似,只是它允许匿名登录,将用户输入的Email地址作为口令。
mod_ssl 模块:用于支持安全套接字层协议,提供Internet上的安全交易服务,如电子商务中的一项安全措施,通过对通信直接流的加密来防止敏感信息的泄露,但 是,Apache的这种支持是建立在对Apache的API扩展来实现的,相当于一个外部模块,通过第三方程序(如OpenSSL)的结合提供安全的网上 交易支持。
 
       2、开启安全模块
为了能使用模块功能,模块通 常以DSO(Dyname Shared Objed)的方式构建,用户应该在httpd.conf文件中使用LoadModule指令,以便在使用前获得模块的功能,以下主配置文件中各个模块的 情况,开启安全模块非常简单,即去掉在各安全模块所在行前面的“#”注释即可。
具体如下:
 LoadModule auth_basic_module modules/mod_auth_basic.so
 LoadModule digest_module modules/mod_auth_diaest.so