1. 限制用户访问的方式:

  1. 限制访问服务的客户端主机

  2. 需要用户名和密码

2. 行为用户验证需要两步:

  1. 创建一个包含用户名和密码的文件

  2. 服务器上的哪些资源需要保护,哪些用户可以进行访问

3. 创建用户数据库

  许多用户名和密码需要创建在一个文件中。出于安全考虑,这个文件不能放在文档目录里。在这个例子里,这个文件创建在/usr/local/etc/httpd目录里,名字叫users。

  这个文件包含许多用户名和密码。用户名和密码通过冒号分割,每个用户单独占一行。但是你不能直接在这个文件中直接输入用户名和密码,因为存储在这个文件中的密码是加密的。程序htpasswd可以用来创建该文件,添加或者修改用户。

  使用htpasswd创建该文件,添加用户名‘snow’,密码‘snow’的用户到该文件(/usr/local/httpd/user)

 htpasswd -c /usr/local/etc/httpd/users snow

-c参数告诉htpasswd创建一个新的users文件。当你运行该命令时,将提示输入该用户的密码并确认。你可以添加其它的用户到该文件中,不过必须去掉-c参数。这个命名也可以用来修改密码。当你添加一个用户后,/usr/local/etc/httpd/users文件看起来想这样:

 snow:$apr1$VmvJWi7o$diZjyiUiHkd8pSmb//gE0

第一个列是用户名,第二列是加密过后的密码。

4. 配置服务

为了让server使用在该文件中的用户名和密码,你需要配置一个realm,为了使用.htaccess文件限制一个目录的访问,你首先需要修改apache的配置文件(如何找到apache的配置文件),使目录使用.htaccess的形式限制访问,这个被AuthConfig属性控制,如果你想限制/var/www目录的访问,你修改apache的配置文件:

 <Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride AuthConfig
Require all granted
</Directory>

然后在/var/www目录中建立一个.htaccess文件,内容如下:

AuthName "restricted stuff"
AuthType Basic
AuthUserFile /usr/local/etc/httpd/users require valid-user

第一个指令AuthName,为这个资源配置一个realm名字,只要用户输入有效的用户名和密码,相同realm名字的其他资源也可以通过这个用户访问,这样做,主要是为了创建两个区域,使同一个用户可以访问这两个区域。

第二个指令AuthType告诉服务使用哪种协议进行认证,目前来说,仅有Baisc可用。但是出现了Digest,而且已经被标准化啦,只要浏览器实现了它,就可以使用它。digest认证比Basic认证更安全。

第三个指令AuthUserFile告诉服务被htpasswd创建的文件在哪里。

第四个指令require告诉服务该文件中的哪些用户可以访问该文件,valid-user参数是告诉服务该文件中的任何用户都可以访问该资源,你也可以配置特定用户可以访问该资源。例如:

require user snow john

只有snow,john两个用户可以访问该资源,其他用户都会被拒绝。

如果一个用户被允许访问不同的区域,他们仅仅需要输入一次密码,但是如果在不同的区域有不同的realm,用户需要再次输入他的密码。

5. 使用Groups

如果你想要users文件的一些用户访问一个资源,你需要在require行列出所有的用户,如果你有很多用户的话,这种方式是不太好的。有一种方式可以解决这种问题,就是用一个group文件,你可以使用require行限制到特定的group。例如:有一个叫作staff的组,它包含所有访问特定资源的用户。

 require group staff

多个group也可以使用,用户也可以同时使用,

require group staff admin
require user adminuser

它允许组staff和admin访问资源和用户adminuser访问资源。

group文件的形式:

staff: martin jane

admin: art adminuser

staff和admin是组,martin和jane属于staff组,art和adminuser属于admin组。

AuthGroupFile指令是告诉group文件在哪里。记住,在group文件中一行的最大长度是8000字符(大约8K),如果你有超过行的长度的用户数,你可以再写一行伴随着相同组。

当你添加AuthGroupFIle指令时,遇到如下错误时:/var/www/html/.htaccess: Invalid command 'AuthGroupFile', perhaps misspelled or defined by a module not included in the server configuration。请执行:

 sudo a2enmod authz_groupfile

6. 伴随着许多用户的问题

使用htpasswd创建用户和以文本的形式管理组相对来说比较简单,但是如果用户增多,服务器要做许多的处理来找响应的组和密码信息,这种处理必须在每个请求中都要做(受保护的区域,尽管用户仅仅输入一次密码,但是在每次请求中,都必须重新认证),如果伴随着很多用户,那是相当慢的,增加服务器负载。比较块的访问是使用DBM格式文件,它允许服务做比较块的搜索,但是管理DBM文件也是比较复杂的。

7. 存储用户信息的其他方式

apache仅能访问在文本文件中的用户信息,但是有各种各样的模块允许用户信息存储到数据库中。除了有DBM格式(mod_auth_dbm module),用户信息和组信息也可以存储以DB的格式文件(mod_auth_db),或者各种各样的数据库也可以使用。例如mSQL(mod_auth_msql),Postgres95(mod_auth_95),或者兼容DBI的数据库(mod_auth_dbi),也可以有一个额外的程序检测用户和密码是否有效(主要是用接口来检测数据库或者认证服务)。modules也可以用来检测系统密码文件或者使用Kerberos系统。

8. 限制不同的方法

在上面的例子中,require指令并没有包含在<Limit>指令中,这样意味着它应用到所有的请求方法,但是在一些应用中,需要将其放入<Limit>部分,例如:

 <Limit GET POST PUT>
require valid-user
</Limit>

在Apache中,最好忽略<Limit>标签,是为了确保保护应用到所有的方法中。但是,这种格式主要用来限制特定的方法。例如:仅仅限制POST方法。

AuthName "restrict posting"
AuthType Basic
AuthUserFile /usr/local/etc/httpd/users <Limit POST>
require group staff
</Limit>

仅仅组staff的成员可以访问POST方法,其他的用户(未认证的)可以使用其它的方法。例如:GET方法。这样做,主要是为了CGI程序让任何人可以访问。但是仅仅授权的用户可以请求POST方法。

9. 被主机或者用户限制

apache很有可能同时使用用户和主机限制,正常情况下,apache需要两个条件同时满足,那即是,来自允许的主机或者域名的用户必须输入有效的用户名和密码才能进行资源访问。但是Satisfy any指令被使用在.htaccess文件或者<Directory>,<Location>,<Files>部分,当这个指令被使用的时候,来自允许的主机或者域名不需要输入用户名和密码就能进行访问,来自不允许的主机或者域名必须输入有效的用户名和密码。

10. WWW认证如何进行工作?

在HTTP中用户认证的方法相当简单,因为HTTP是无状态的协议。只要一个请求完成,服务器并不会记得关于那个请求的任何信息。浏览器需要在每次请求中重新发送用户名和密码。这就是他的工作原理。

当第一次访问需要认证的资源时,服务器返回401状态(未授权)和包含一个WWW-Authenticate响应头,这个包含认证策略(目前仅有Basic允许)和realm名字。浏览器然后询问用户名和密码。然后再次请求相同的资源。这一次包含Authorization头,它包含策略名字(Basic)和用户名和密码。

服务器检测用户名和密码,如果他们有效,就返回页面,如果密码无效或者用户并不允许,服务器返回401状态,浏览器将会继续询问用户名和密码。

假如用户名和密码有效,用户将会继续请求另一个保护的资源,在这种情况下,服务器继续返回401状态,浏览器伴随着用户名和密码继续请求该资源,但是,这种将会很慢的。所以浏览器在接下来的请求中发送Authorization头,浏览器必须保证发送用户名和密码到相同的服务器上。(如果用户信息发送到不同的服务器,将会不安全的)

浏览器需要记住用户名和密码。所以它可以发送用户名和密码信息在接下来的请求中。但是在测试认证的时候,将会引起问题,因为浏览器第一次已经记住用户名和密码信息,强制浏览器再次询问用户名和密码将会很困难的。

11. 安全和数字认证

认证允许资源被访问,是针对特定的用户。但是存在着一些潜在的安全问题。

  • 确保资源被限制在所有的方法中,例如:如果使用<Limit GET>,将会使其他的请求方法不被保护。
  • 用户名和密码放在文本文件中,虽然密码是加密的,但是并不是绝对安全的。该文件不能被系统中的其他用户访问,更不能放在文档目录。(该目录可以被来自于网络的用户访问)
  • 用户名和密码应该要绝对安全。用户不应该告诉其他人他们的密码。
  • Basic认证策略在网络中传递密码是以非加密的方式传递的。所以他们可以被拦截。数字认证主要用来解决这个问题。

数字认证的方式将会使在网络中密码的方式更安全,在发送之前,密码会被加密,然后服务器会解密它。数字认证工作的方式和Basic认证的方式一样,数字认证的使用主要依赖于浏览器提供商是否写入他们的产品。Apache已经做了数字认证,被mod_digest模块所编译。

apache的用户认证的更多相关文章

  1. Linux服务器---配置apache支持用户认证

    Apache支持用户认证 为了服务器的安全,通常用户在请求访问某个文件夹的时候,Apache可以要求用户输入有效的用户名和登录密码 1.创建一个测试目录 [root@localhost cgi-bin ...

  2. SVN+Apache域用户认证配置方法_Windows(转,重新排版,部分内容更新优化)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  3. Apache配置--用户认证(针对目录访问)-update2015-05-02

    通过Apache配置可以限制用户对目录的访问,会弹出像phpadmin一样的登陆框. ========================================================= ...

  4. apache用户认证,ssl双向认证配置

    安装环境: OS:contos 6.4 httpd:httpd-2.2.15-59.el6.centos.i686.rpm openssl:openssl-1.0.1e-57.el6.i686.rpm ...

  5. apache用户认证访问机制(转)

    Apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证.前期准备,必须已经安装apache,如果还没安装,或者对安装很模糊的话,第1步:我们在/var/ww ...

  6. apache用户认证、域名跳转、Apache访问日志(两种格式)

    1.apache 设置,用户访问时 目录或文件的认证: 对目录的认证: <Directory /var/www/222> //指定认证的目录AllowOverride AuthConfig ...

  7. Apahce的虚拟用户认证及server-status页

    一.Apache虚拟用户认证配置 编辑配置文件加入如下内容: <Directory "/www/htdoc/fin"> Options None AllowOverri ...

  8. apache用户认证、默认主机、301跳转

    我更正论坛一个同学帖子(今天坑我一下午):原文http://www.apelearn.com/bbs/foru ... 3%BB%A7%C8%CF%D6%A4 apache用户认证.默认主机.301跳 ...

  9. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

随机推荐

  1. Java NIO 与 IO

    我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清晰地解析 Java NIO 和 IO 的差异.它们的使用场景,以及它们如何影响您的代码设计. Java NIO 和 IO 的主要区别 下 ...

  2. STM32标准IIC驱动

    IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接 微控制器及其外围设备.也是目前很流行的通讯总线,使用IIC总线做产品能够很大 ...

  3. 【转】10款GitHub上最火爆的国产开源项目

    将开源做到极致,提高效率方便更多用户 接触开源时间虽然比较短但是后续会努力为开源社区贡献自己微薄的力量 衡量一个开源产品好不好,看看产品在 GitHub 的 Star 数量就知道了.由此可见,GitH ...

  4. 用74HC165读8个按键状态(转)

    源:用74HC165读8个按键状态 //-------------------------------------------------------------------------- //来源: ...

  5. DS5 调试 android c++

    1.修改Application.mk APP_STL := gnustl_static #这里用gnustl #NDK_TOOLCHAIN_VERSION=clang #这里注释掉 APP_CPPFL ...

  6. ubuntu 如何卸载重装docker

    卸载 docker sudo docker -v sudo apt-get remove docker sudo apt-get remove --auto-remove docker sudo ap ...

  7. UVa 990 - Diving for Gold

    题目大意:一个潜水者去海底寻找金子,已知有n个有金子的地点,分别给出他们的深度和价值.但是由于潜水者只有一瓶氧气,所以他只能在海底呆有限的时间,问他如何才能在这有限的时间里获得尽可能多的金子,并打印出 ...

  8. Outlook 2013 电子邮件账户设置备份与恢复

    与之前版本不同,Outlook 2013需要备份以下注册表内容:HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles恢复时 ...

  9. apue- chapter 1 UNIX基础知识

    1.C++实现ls命令 #include<dirent.h> #include<stdlib.h> #include<iostream> #include &quo ...

  10. 解决windows 10 9926 中vmware安装的虚拟机无法桥接上网的问题

    从windows 10 出来之后就安装了使用,但一直有一个问题直到9926也没有解决,那就是vmware下的虚拟机无法桥接上网,但NAT方式正常.发现有一种办法可以实现桥接方式上网.但这种方式下本机与 ...