2006年9月23日星期六

第三节 授权访问

  作为 Apache 服务器的管理员,应该知道如何对一些关键信息进行保护,也就是说只有合法的授权用户才可以访问它们。Apache 提供了两种授权访问方式:一种是根据用户的 IP 地段、网段、主机名等信息来决定是否具有访问权,例如可以只允许 mylinux.org 域中的主机能访问 Apache 服务器,这种授权访问方式通过Apache 服务器配置文件 /etc/httpd/httpd.conf 就可以完成;另一种是提供登录形式的授权访问,用户访问页面需要输入用户名和密码,这种授权访问方式需要配置“.htaccess”存取控制文件,是较常用的一种用户授权访问方式。
 
1、基于主机的授权
 
  Apache 服务器的授权访问功能需要 mod_auth 和 mod_auth_dbm 两个模块的支持。在 Webmin 中单击『服务』图标,进入服务器管理页面,然后单击『Apache服务器』图标,进入『Apache WEB 服务器』页面,在这里可以对 Apache 服务器加载的模块进行管理,如图 6-3-1 所示。
 
图 6-3-1 管理加载的模块
 
  单击『Apache模块』图标,进入『Apache模块』页,在活动模块列表中将mod_auth 和 mod_auth_dbm 两个模块均选中,如图 6-3-2 所示。
 
图 6-3-2 授权访问支持模块
 
  配置好 Apache 服务器动态加载的模块后,单击『保存』按钮,返回『ApacheWEB 服务器』页面。下面先来介绍基于主机的授权访问方式。
 
  假设 www.mylinux.org 网站中有一个 /var/www/secret/ 目录,接着来看如何通过授权来限制用户对该资源的访问。由于是要对 www.mylinux.org 这一虚拟主机进行管理,因此应该在『Apache WEB 服务器』页面中的『虚拟服务器』区域中单击该虚拟主机对应的图标,如图 6-3-3 所示。
 
图 6-3-3 管理 www.mylinux.org 网站
 
  进入『虚拟服务器选项』页面后,从『创建目录、文件或目录选项』区域中的『类型』下拉框中,选择『Directory』项,并在『路径』文本框中输入要进行设置的目录“/var/www/secret”,然后单击『新建』按钮创建这一目录,如图 6-3-4所示。注意此时指定目录只是将其纳入 Apache 的管理,但该目录必须事先已经在磁盘上存在了。
 
图 6-3-4 创建目录
 
  新目录创建后,就可以在『按目录选项』区域中找到该目录对应的图标了,如图 6-3-5 所示。
 
图 6-3-5 新创建的目录
 
  对目录的配置与缺省服务器类似。单击该目录对应的图标,进入『按目录选项』页面。在这里可以对该目录的所有属性进行配置,其中就包括对目录访问权限的控制,如图 6-3-6 所示。
 
图 6-3-6 配置目录
 
  单击『访问控制』图标,进入『访问控制』页面。如果想让 IP 地址为218.168.100.5 的机器访问该目录,可能先在『约束访问』区域的『动作』列中选择『Allow』项,然后在『条件』列中选择『从IP请求』项,最后在随后的文本框中输入允许访问的 IP 地址,如图 6-3-7 所示。
 
图 6-3-7 允许访问的 IP 地址
 
  单击『保存』按钮并重新回到『访问控制』页面后,就又可以在『约束访问』区域中指定其它的约束规则了。例如从『动作』列中选择『Deny』项,并从『条件』列中选择『从网络/掩码请求』项,然后在后面的文本框中输入“218.168.100.0/255.255.255.0”,可以限制子网 218.168.100 中所有主机对该目录的访问,如图 6-3-8 所示。
 
图 6-3-8 拒绝访问的网络
 
  也许你已经注意到了,第一条访问规则允许 IP 地址为 218.168.100.5 的主机访问该目录,而第二条访问规则又拒绝 218.168.100 子网中的所有主机访问该目录,这岂不是自相矛盾吗?
 
  Apache 通过设置访问规则的优先级来解决这一问题,管理员可以自定义是先使用允许(allow)规则还是拒绝(deny)规则,(注意在后面应用的规则将覆盖前面应用的规则)。在这里我们显然应该先应用 deny 规则,拒绝 218.168.100 子网中的所有主机访问请求,然后再应用 allow,允许主机 218.168.100.5 访问该目录。在『约束访问』区域中的『访问检查次序』中选择『先禁止后允许』单选框,就可以指定正确的访问规则应用顺序了,如图 6-3-9 所示。
 
图 6-3-9 访问规则应用次序
 
  单击『访问控制』页面底部的『保存』按钮,回到『按目录选项』页面后单击『文档选项』图标,进入『文档选项』页面。除了指定该目录能被哪些主机访问之外,还应该在『目录选项』中为其指定正确的操作选项,如图 6-3-10 所示。注意,若不想使用缺省值,应该将『已选择以下』单选框选中。
 
图 6-3-10 设置目录选项
 
  设置好文档目录选项后,单击『保存』按钮返回到『按目录选项』页面,然后单击页面底部的『回到服务器索引』链接,返回『虚拟服务器选项』页面,为了使用户能够更好的访问 /var/www/secret 目录,可以为它指定一个别名,如图 6-3-11 所示。
 
图 6-3-11 管理别名和重定向
 
  单击『别名和重定向』图标,进入『别名和重定向』页面。分别在『文档目录别名』区域中的『From』和『To』文本框中输入“/secret/”和“/var/www/secret/”,然后单击页面底部的『保存』按钮,就可以为/var/www/secret/ 目录指定一个别名 /secret/,如图 6-3-12 所示。
 
图 6-3-12 创建文档目录别名
 
  回到『虚拟服务器选项』页面后,单击『应用更改』链接,使新的设置值生效。在放置一些将被访问的资源到 /var/www/secret/ 目录下后,就可以进行授权访问的测试了。当从 IP 地址为 218.168.100.5 的主机通过http://www/mylinux.org/secret/ 来访问这些资源时,将看到资源列表。
 
  但如果是从其它机器访问时,由于缺乏相应的权限,将无法浏览到该目录下的资源。
 
2、基于用户的认证
 
  基于主机的授权方式难以满足具有较高安全要求的场合,因为即使是一个很蹩脚的初级黑客也完全有能力仿造一个假的 IP 地址,因此有时就不得不考虑基于用户的认证方式。
 
  事实上,基于主机的授权方式和基于用户的认证方式并非是截然分开的。当用户访问 Apache 服务器的某个目录时,Apache 会先根据配置文件 httpd.conf 中Directory 的设置,来决定是否允许用户访问该目录。如果允许,则 Apache 还会继续查找该目录或其父目录中是否存在“.httpd.conf”文件,以决定是否要对用户进行身份认证。
 
  正是因为“.httpd.conf”文件在基于用户的认证方式中起着很重要的作用,所以首先要做的事情就是在要进行身份认证的目录下生成该文件。假设要让用户必须通过身份认证后才能访问 /var/www/secret/ 目录下的资源,就应该先创建/var/www/secret/.httpd.conf 文件。虽然使用普通的文本编辑器也能手工生成该文件,但使用 Webmin 将更方便些。
 
  在『Apache WEB 服务器』页面中,可以通过『按目录选项文件』来管理所有的“.httpd.conf”文件,如图 6-3-13 所示。
 
图 6-3-13 管理认证文件
 
  单击『按目录选项文件』图标,进入『按目录选项文件』页面。接着单击『创建选项文件』右侧的『...』按钮,打开『选择文件』窗口,从中选择要为其创建“.httpd.conf”文件的目录,如图 6-3-14 所示。
 
图 6-3-14 选择认证目录
 
  选择好要进行认证的目录后,单击『创建选项文件』按钮,Webmin 就会在该目录下生成一个“.httpd.conf”文件,同时打开『按目录选项』页面。在这里可以对该文件的内容进行编辑和管理,如图 6-3-15 所示。
 
图 6-3-15 设置认证文件
 
  文件“.httpd.conf”由一系列 Apache 指令组成。那些对这些指令早就一清二楚的资深 Apache 管理员可以很轻松地使用自己熟悉的编辑器,手工修改这些文件,但对于连这些指令是什么都还不知道的初学者来说 Webmin 的确是个不错的跳板,它可以帮助你很快成为一名合格的 Apache 管理员。单击『显示指令』图标,进入『指令』页面,在『编辑Apache指令』按钮旁边的下拉框中,可以找到所有的Apache 指令,如图 6-3-16 所示。
 
图 6-3-16 选择 Apache 指令
 
  Apache 提供的指令虽然多,但常用的也就那么几条,而且 Webmin 还提供了很好的配置界面。从 Apache 指令下拉框中选择『AuthName』指令,然后单击『编辑Apache指令』按钮,进入『访问控制』页面。可以在『认证真名』文本框中输入一个字符串作为提示信息。浏览器访问该目录时,弹出的登录提示对话框中将显示该字符串。
 
  在『认证类型』下拉框中,可以选择进行身份认证的方式。Apache 目前提供两种认证方式:Basic(基本认证)和 Digest(简要认证)。一般使用 Basic 方式,但使用方 Digest 方式会更安全一些。
 
  在『登录约束的访问』区域中,可以指明只允许某些特定的用户或者组登录,当然也可以允许所有的合法用户登录。注意此外的用户和组指的都是 Apache 服务器自己维护的用户和组,他们同 Linux 系统的用户和组可以没有任何瓜葛。
 
  Apache 服务器自身维护了一个用户和组列表,同样也有用户密码文件和组文件。这两个文件存放的位置可以由你在『文本文件认证』区域中任意指定。出于安全性的考虑,建议管理员不要将该文件与网站中的数据存放在一起。至于创建该文件的方法,后面将会介绍,这里只需指定这两个文件的路径就可以了。
 
  好了,现在单击『访问控制』页面底部的『保存』按钮,返回到『按目录选项文件』页面。接着单击该页面中的『当前模块首页』链接,进入『Apache WEB 服务器』页面。由于对 /var/www/secret/ 目录同时采用了基于主机的授权方式和基于用户的认证方式,难免会造成两者在某些地方的冲突。如果你现在从218.168.100.5 的主机访问 http://www/mylinux.org/secret/ 时,不必登录,Apache 也会将这些信息大大方方的显示出来。
 
  为了避免这一问题,应该明确告诉 Apache 在处理“.httpd.conf”文件时,哪些指令可以覆盖 .httpd.conf 中定义的参数,这些参数包括 AuthConfig、FileInfo、Indexs、Limits 和 Options。可以同时选择多个,如果全选则可以用All 参数代替,但如果一项都不选,则应该使用 None 参数。
 
  现在是不是有点明白了呢?没错,应该对 /var/www/secret/ 目录的选项再稍做调整,以满足基于用户认证的需要。单击『Apache WEB 服务器』页面『虚拟服务器』区域中网站 www.mylinux.org 所对应的虚拟主机图标,进入『虚拟服务器选项』页面后单击『按目录选项』区域中的『Directory /var/www/secret/』图标,打开『按目录选项』页面。由于对 /var/www/secret/ 目录采用基于用户的认证方式,因此需要配置恰当的文档选项。
 
  单击『文档选项』图标,进入『文档选项』页面,在『选择文件可覆盖』区域中选择『已选择以下』单选框,然后从下面的列表中选择“.httpd.conf”文件要覆盖“.httpd.conf”文件中的哪些参数。
 
  现在单击『文档选项』页面中的『保存』按钮,返回到『按目录选项』页面,单击该页面顶部『应用更改』链接根据新的设置值重新加载 Apache 服务器。此时若再从 218.168.100.5 的主机访问 http://www/mylinux.org/secret/,就可以看到要求用户先进行登录的窗口。
 
  现在只有合法的 Apache 用户才能访问该目录下的资源了。
 
  基于用户的认证方式可以很好地保护资源,使得只有授权的用户才能访问某些敏感的数据,不登录就访问资源现在已经变得不可能了,因为将吃到闭门羹。

没有评论: