原文链接:   http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html

Apache认证、授权、访问控制

认证(Authentication)是指任何识别用户身份的过程。授权(Authorization)是允许特定用户访问特定区域或信息的过程。

相关模块和指令

认证和授权涉及到三组模块。通常,你需要从每一组中选择至少一个模块。

  • 认证类型模块(参见AuthType指令)

    • mod_auth_basic
    • mod_auth_digest
  • 认证支持模块
    • mod_authn_alias
    • mod_authn_anon
    • mod_authn_dbd
    • mod_authn_dbm
    • mod_authn_default
    • mod_authn_file
    • mod_authnz_ldap
  • 授权支持模块(参见Require指令)
    • mod_authnz_ldap
    • mod_authz_dbm
    • mod_authz_default
    • mod_authz_groupfile
    • mod_authz_owner
    • mod_authz_user

mod_authnz_ldap模块既包含认证功能也包含授权功能。mod_authn_alias模块自身并不实现认证功能,但是允许其它认证支持模块以更灵活的方式进行配置。

mod_authz_host模块提供基于主机名、IP地址、请求特征的访问控制,但并不属于认证支持系统。

简介

如果网站上有些敏感信息或只希望为一个小群体所访问,本文阐述的方法能确保用户只能访问被允许的资源。

本文涵盖了保护站点资源的"标准"方法,大多数管理员将要用到这些方法。

先决条件

本文中讨论的指令应该被放进主配置文件(通常在<Directory>段中)或者针对单个目录的配置文件(.htaccess文件)中。

如果你打算使用.htaccess文件,则必须设置服务器以允许在这些文件中使用认证指令,即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效。

既然本文讨论认证,就应该对AllowOverride这样设置:

AllowOverride AuthConfig

如果你希望把这些指令直接写入主配置文件,当然就需要具有对主配置文件的写权限。

而且,你需要对服务器的目录结构有所了解,以确定某些文件的位置。这个并不难,需要时我们会做适当的说明。

启用认证

先介绍用密码来保护服务器上的目录。

首先需要建立一个密码文件。这个文件应该放在不能被网络访问的位置,以避免被下载。例如,如果/usr/local/apache/htdocs以外的空间不能被网络访问,那么可以考虑把密码文件放在/usr/local/apache/passwd目录中。

Apache在其安装目录的bin子目录中提供了htpasswd工具,用于建立密码文件,可以这样使用:

htpasswd -c /usr/local/apache/passwd/passwords rbowen

htpasswd会要你输入密码,并要求重新输入以进行确认:

# htpasswd -c /usr/local/apache/passwd/passwords rbowen
New password: mypassword
Re-type new password: mypassword
Adding password for user rbowen

如果htpasswd不在搜索路径中,则必须使用完整路径,如:/usr/local/apache/bin/htpasswd

然后修改httpd.conf.htaccess文件,指示服务器允许哪些用户访问并向用户索取密码。若要保护/usr/local/apache/htdocs/secret目录,则可以将下列指令写入/usr/local/apache/htdocs/secret/.htaccess或者httpd.conf的<Directory /usr/local/apache/apache/htdocs/secret>段。

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user rbowen

让我们逐个解释这些指令。AuthType指令选择对用户实施认证的方法,最常用的是由mod_auth_basic提供的Basic 。必须认识到的很重要的一点是,Basic认证方法并不加密来自用户浏览器的密码,因此,不应该用于高度敏感的数据。Apache中还有另一种更安全的认证方法"AuthType Digest",即由mod_auth_digest供的摘要认证。目前,只有最新的浏览器版本才支持摘要认证。

AuthName指令设置了使用认证的域(Realm),它起两个作用,首先,此域会出现在显示给用户的密码提问对话框中,其次,也帮助客户端程序确定应该发送哪个密码。

所以,如果一个用户已经在"Restricted Files"域通过了认证,则客户端就可以尝试使用同样的密码来访问同一个服务器上任何名为"Restricted Files"域的其他部分,从而使多个受限区域使用同一个密码,以避免用户重复输入。当然,出于安全考虑,如果服务器变了,客户端始终会要求重新输入密码。

AuthUserFile指令设置了密码文件的位置,也就是刚才我们用htpasswd建立的文件。如果用户很多则认证速度会很慢,因为对每个请求都必须搜索这个纯文本文件,对此,Apache还支持把用户信息存入快速的数据库文件,mod_authn_dbm模块提供了AuthDBMUserFile指令,并可以用dbmmanage程序建立和操作这些数据库。Apache模块数据库中还提供了许多其他第三方模块提供的认证选项。

最后,Require指令设置了允许访问受保护区域的用户,下一节将对Require指令作详细说明。

允许多人访问

上述指令只允许一个人(一个叫rbowen的用户)访问这个目录,但是多数情况下,都需要允许多人访问,所以就要用到AuthGroupFile指令。

如果想允许多人访问,那么就必须建立一个组文件以确定组中的用户。其格式很简单,可以用你喜欢的编辑器建立,例如:

GroupName: rbowen dpitts sungo rshersey

它只是每组一行的一个用空格分隔的组成员列表。

向已有的密码文件中增加一个用户,可以输入:

htpasswd /usr/local/apache/passwd/passwords dpitts

程序的提示和上面的一样,但是它会追加到已有的文件中,而不是建一个新文件(参数 -c 可以强制建立新的密码文件)。

现在,需要将.htaccess文件修改成这样:

AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName

现在,GroupName组中的成员都在password文件中有一个相应的记录,从而允许他们输入正确的密码进行访问。

除了建立组文件,还有另一种途径允许多人访问,就是使用如下指令:

Require valid-user

使用上述指令,而不是 Require user rbowen ,可以允许密码文件中的所有用户使用正确的密码进行访问。通过为每个组建立一个密码文件,这里甚至允许列举各个组,其优点是Apache只需要检查一个文件(而不是两个),其缺点是,必须维护众多密码文件,而且要确保AuthUserFile指定了一个正确的密码文件。

可能存在的问题

由于采用了Basic认证的方法,每次向服务器请求甚至刷新一个受保护的页面或图片时都必须校验用户名和密码,为此,必须打开密码文件并逐行搜索用户名,因此,服务器响应速度会受一些影响,受影响的程度与密码文件的大小成正比。

所以,对密码文件中的用户总数存在一个实际上的上限,此上限取决于特定的服务器机器的性能,但是一般有几百个用户就会对响应速度有非常明显的影响,在这种情况下,可以考虑用其他认证方法。

其他认证方法

基于用户名和密码的认证只是方法之一,时常会有不需要知道来访者是谁,只需要知道来自哪里的情况。

AllowDeny指令可以允许或拒绝来自特定主机名或主机地址的访问,同时,Order指令告诉Apache处理这两个指令的顺序,以改变过滤器。

这些指令的用法:

Allow from address

address可以是一个IP地址(或者IP地址的一部分),也可以是一个完整的域名(或者域名的一部分),还可以同时指定多个IP地址和域名。

比如,要拒绝不受欢迎的兜售垃圾的站点:

Deny from 205.252.46.165

这样,这个指令所管辖的区域将拒绝所有来自该地址的访问。除了指定IP地址,也可以指定域名,如:

Deny from host.example.com

另外,还可以指定地址或域名的一部分来阻止一个群体:

Deny from 192.101.205
Deny from cyberthugs.com moreidiots.com
Deny from ke

Order可以组合DenyAllow指令,以保证在允许一个群体访问的同时,对其中的一些又加以限制:

Order deny,allow
Deny from all
Allow from dev.example.com

只列出Allow指令不会得到你想要的结果,因为它在允许指定对象访问的同时并不禁止其他未列出的对象的访问。所以上例使用的方法是:首先拒绝任何人,然后允许来自特定主机的访问。

更多信息

mod_auth_basicmod_authz_host文档中有更多的有关资料。mod_authn_alias同样有助于简化认证配置。

Apache的认证、授权、访问控制相关推荐

  1. 【Linux】apache的认证授权和访问控制

    文章目录 前言 ip访问控制 **用户身份认证授权** 主要参数 配置案例 a. 创建访问用户及密码 b. 配置文件修改 c. 重启服务 d. 测试 前言 上篇文章我们探讨了虚拟主机,我们可以通过ip ...

  2. 源码分析shiro认证授权流程

    1. shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户"登录": 授权 - ...

  3. Apache Qpid 认证绕过漏洞

    漏洞名称: Apache Qpid 认证绕过漏洞 CNNVD编号: CNNVD-201303-222 发布时间: 2013-03-13 更新时间: 2013-03-13 危害等级:    漏洞类型: ...

  4. Spring Cloud 入门 ---- Security 整合 Oauth2 认证授权【随笔】

    Spring Cloud Security Oauth2 文档参考:https://docs.spring.io/spring-security/site/docs/5.4.1/reference/h ...

  5. Spring Security Oauth2 JWT 实现用户认证授权功能

    Spring Security Oauth2 JWT 一 用户认证授权 1. 需求分析 1.1 用户认证与授权 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份 ...

  6. Shiro 认证授权详解

    1     权限管理 1.1用户身份认证 1.1.1  概念 身份认证,就是判断一个用户是否为合法用户的处理过程.最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该 ...

  7. 学成在线--认证授权模块

    完整版请移步至我的个人博客查看:https://cyborg2077.github.io/ 学成在线–项目环境搭建 学成在线–内容管理模块 学成在线–媒资管理模块 学成在线–课程发布模块 学成在线–认 ...

  8. java认证授权(Spring Security)

    目录 1.Spring Security介绍 2.认证授权入门 2.2.1 创建认证服务工程 1.部署认证服务工程 2.配置Spring Security所需要的依赖 3.初始工程自带了一个Contr ...

  9. Spring Security OAuth2.0认证授权

    文章目录 1.基本概念 1.1.什么是认证 1.2 什么是会话 1.3什么是授权 1.4授权的数据模型 1.4 RBAC 1.4.1 基于角色的访问控制 2.基于Session的认证方式 3.整合案例 ...

  10. SpringSecurity OAuth2.0认证授权-part2

    此篇文章包含oauth2项目搭建.整合jwt.授权方式测试: 篇幅过长,拆分为: part1: 认证授权原理回顾及分布式系统认证方案: part2: oauth2项目搭建.授权方式测试: part3: ...

最新文章

  1. 已知空间一点到另外两点直线的距离
  2. 解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题
  3. 用AndroidSDK中的Face Detector实现人脸识别
  4. Spring--Redis入门集成配置
  5. 用java实现Gaunt积分
  6. IAR 单步调试很慢
  7. boost::hana::chain用法的测试程序
  8. 初始化JQuery方法与(function(){})(para)匿名方法介绍
  9. rsync 删除大量小文件
  10. 设计灵感|如何在海报设计中正确使用双色调风格?
  11. 一个hitbernate配置文件,带几个表(注意mapping);如果连接字符串没有设置utf-8,向insert mysql 会产生乱码(utf8 或 utf-8)...
  12. 计算机程序阶乘怎么写,N的阶乘的程序怎么写啊?VB啊
  13. 黑客网络安全扫描工具
  14. c语言流程图形状什么意思,Visio中的基本流程图的各个形状的含义是什么?
  15. 《低代码指南 》——LCHub应用参谋的适用场景
  16. 利用ESP8266与米思齐从零制作模拟温室大棚--接线篇
  17. J2EE学习篇之--Struts1详解
  18. 关于动车:动车票假如象飞机票那样卖会如何?
  19. windows10突发explorer.exe“没有注册类”错误的解决方式
  20. 保证只要看一遍,新手也能写出来的超简单五子棋代码

热门文章

  1. mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)
  2. 极限与连续知识点总结_高数上知识点期末复习 极限、连续、间断点(一)
  3. 华为p40 pro原理图_4188起 华为P40/Pro/Pro+国行发布 顶配8888 河图正式上线!
  4. html仿百度页面代码_百度优化需要注意的4点
  5. org.springframework.beans.factory.BeanDefinitionStoreExcept
  6. java for循环的这种写法怎么理解:for (; ; ) {},
  7. 【收集】常用网络上的Webservice地址
  8. C#easyui combotree 设置节点折叠
  9. JS关闭浏览器 (不弹出提示框)
  10. c语言图片效果,c语言能显示图片吗