Chinaunix首页 | 论坛 | 博客
  • 博客访问: 686936
  • 博文数量: 191
  • 博客积分: 10987
  • 博客等级: 上将
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-22 09:52
文章分类

全部博文(191)

文章存档

2014年(10)

2011年(11)

2010年(38)

2009年(132)

分类: 系统运维

2009-08-04 10:45:24

有时候网站的关键性目录不想让普通的用户访问到,这个时候就可以设定限制访问目录以及子目录,设定哪些用户只允许访问父目录,哪些用户可以父目录以及子目录。

实现上述需求需要哪些资源:

实验环境

系统 RedHat 5.3

www服务器版本 httpd-2.2.12(目前有三个apache版本:apache-1.3,httpd-2.0 ,httpd-2.2)

apache模块 mod_auth_basicmod_authn_file.somod_authz_user.so

说明

源码包安装apache就略过了,这里简要的谈谈apache的模块安装。

Apache源码包自带了这些模块未编译前的.c文件,在目录httpd-2.2.12/modules/aaa/,有大量的.c文件。在安装配置apache的时候,加上配置选项:- -enable-so  - -enable-mods-shared

=all ,就可以编译这些.c文件,把它们编译成.so文件就可以使用LoadMoudle指令来加载了。

- -enable-so    /////////使用DSO动态加载模块,为动态增加模块提供了方便。

- -enable-mods-shared=all       ///////将所有的模块动态加载到httpd.conf配置文件中。

配置了这些之后,以上的三个模块就加载到了apache配置文件httpd.conf中,就可以使用了。

就是上面这三个模块了。LoadModule 是加载的意思,apache通过LoadModule来和这些模块进行沟通,类似于说:“嘿,apache,我在这里,你可以来使用我了”。

实现

1apache服务器版本为httpd-2.2的源码包,这个包的配置文件,即httpd.confhttpd-2.0的有许些差别。有些配置选项以文件的形式存放,也就是说,不是直接在httpd.conf编辑配置,而是在另一个文件里配置,然后在httpd.conf文件里把#Include注释去掉,apache即可访问该文件。如:

Include 前面的#已经去掉了。我们在这个文件里实现认证的功能。

2、打开这个目录:

 

 

3、进入红色框的目录:

4、编辑httpd-autoinex.conf

配置文件很重要,要理解和记忆以上的各项配置。

将系统的/mnt/目录映射到一个虚拟目录ppp,这需要别名来实现(别名模块已经安装mod_alias

.so.

/mnt/目录的情况:

 

 

允许用户luke ,hans 访问父目录/mnt/  ,允许用户hans访问子目录/mnt/test/ ,不允许luke访问子目录。

5、建立用户luke,hans

/usr/local/apache2/bin/htpasswd  -c  /etc/htaccess  luke

/usr/local/apache2/bin/htpasswd     /etc/htaccess   hans

6、重启apache

/usr/local/apache2/bin/apachectl restart

客户端访问测试一:

 用户luke进入火狐浏览器,输入:192.168.1.2/ppp/  ,弹出认证对话框:

 

 

输入用户Luke和密码:

 

进入:

 

Luke只能访问父目录,即/mnt/目录下的文件,而子目录/mnt/test/ 是不允许访问的,不可见的。

客户端访问测试二:

用户hans进入火狐浏览器,输入:192.168.1.2/ppp/  ,弹出认证对话框:

 

输入用户和密码:

 

 

进入:

hans看到了子目录test/ 打开看看:

hans 成功进入子目录test/

.htaccess文件也可以实现上述的功能,区别在于一个把配置文件写在httpd.conf里面,一个把配置文件写在.htaccess文件里,读者朋友可以自行实验一下,我这里不再测试了。

 

注意:  

由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目 录。注意由于AllowOverride None的设置,使得Apache服务器不需 要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问 控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么Apache就必须一级一级的查看访问控制文件,对 系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下 搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统 安全有帮助,也有益于系统性能。

 

===========================================================================================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
阅读(4285) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

skyily2010-07-29 17:22:47

非常感谢!