此篇文章,我们主要探讨下关于Httpd服务器的认证及授权。

所谓认证,在我的理解就是用户通过一个凭证进入服务器的过程,而授权是用户是否有权限获取服务器中的某个资源。认证负责的是整体,授权负责的是局部。

Httpd提供浏览器认证功能,也就是用户在浏览器输入想进入的网址后,浏览器弹出一个要求用户输入用户名及密码的认证框,当用户输入正确的用户名及密码后,即能进入到网站内获取资源。此功能可以脱离应用逻辑达到认证的功能,无需应用层编写专门的认证程序。如果你懒得编写专门的认证代码,又想实现认证功能的话,可以利用此项功能来偷个懒=。=

Httpd提供的授权功能,可以在认证的基础上继续对服务器资源加以保护,它能根据IP、子网、指定用户或环境变量来判断用户是否对某一目录具有读取权限。当然,授权与认证没有必然的联系,即使不用认证,也可以单独设置授权。下面,我们就一起来看看Httpd的认证与授权是如何进行配置的。

首先谈谈认证,Httpd的认证有明文认证与摘要认证两种,明文认证是以明文的方式将用户名与密码发送至服务器,服务器接收到用户名及密码后在认证文件或数据库中进行比对,以此判断是否成功。由于使用明文发送,所以在非SSL链接的情况下具有一定的风险。摘要认证,是将用户输入的密码进行散列算法后发送给服务器,一定程度上提高了用户密码的安全性,但是摘要认证不是每个浏览器都支持,所以在使用摘要算法时需在多个浏览器下测试。

具体的认证过程,Httpd提供了文本、数据库两种方式。也就是我们可以把合法的用户名密码存在文本文件或数据库中。下面我们分别介绍这几种认证的配置方法。

方案1:明文认证+文本认证

首选,我们需要创建我们的“密码本”,由htpasswd脚本创建。它位于你Httpd的安装目录下/bin目录下,与httpd命令在一起。通过./htpasswd -c "密码本路径" "用户名"方法创建。如我想将密码本创建为/usr/local/httpd/users/auth_basic,设置用户名为wangwei,那么该命令格式如下:./htpasswd -c /usr/local/httpd/users/u_basic wangwei。此时会弹出命令提示符要求你输入密码,设置你想要的密码后即可。

假如我们想在服务器文档根目录下设置认证,那么将进行如下配置:

LoadModule unixd_module modules/mod_unixd.so

LoadModule alias_module modules/mod_alias.so

LoadModule mime_module modules/mod_mime.so

LoadModule cgid_module modules/mod_cgid.so

LoadModule authz_core_module modules/mod_authz_core.so

LoadModule authn_core_module modules/mod_authn_core.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule dbd_module modules/mod_dbd.so

LoadModule authn_dbd_module modules/mod_authn_dbd.so

#mod_unixd.so mod_mime.so为Httpd的核心模块,必须加载。以mod_authz,mod_authn为前缀的即是认证模块。

#使用文本认证,我们只需进行一般编译工作即可,但如果使用数据库认证,

#则需要重新编译apr-util,是它生成一个名为apr_dbd_mysql.so的动态链接库。

Listen 80

ServerName localhost

DocumentRoot "/usr/local/httpd/htdocs"

#要在文档根目录下设置认证,那么就在根目录容器下进行认证设置

AuthName auth                                #认证名,可以随便起一个英文字符,在浏览器弹出的认证框上将会显示此名字

AuthType Basic                                #设置认证类型为基本认证

AuthBasicProvider file                        #设置为文本认证

AuthUserFile /usr/local/httpd/users/u_basic        #密码本的位置

Require valid-user                            #指定只有正确的用户才能进入此目录

我的服务器地址为192.168.1.11,进行配置后,在浏览器输入http://192.168.1.11/index.html后即弹出认证框:

是不是很简单?输入刚才设置的用户名密码后即进入了页面。

方案2:明文认证+SDBM认证

SDBM是Linux提供的一种文件型数据库,如果你不想安装MySQL,又有较多的用户需要部署。那么使用SDBM是一个好的选择。SDBM的密码本不能用htpasswd脚本生成,Httpd也提供了它的密码本生成器,名为htdbm。在htpasswd同级目录下即可找到。使用./htdbm-c "密码本路径" "用户名"方法创建。如我想将密码本创建为/usr/local/httpd/users/auth_sdbm ,设置用户名为wangwei,那么该命令格式如下:./htdbm-c /usr/local/httpd/users/auth_sdbm wangwei。此时会弹出命令提示符要求你输入密码,设置你想要的密码后即可。

如果想达到方案1的目的,并使用SDBM认证,则只需改动Directory容器下的配置即可:

AuthName auth

AuthType Basic

AuthBasicProvider dbm    #使用dbm认证

AuthDBMUserFile /usr/local/httpd/users/auth_sdbm #密码本位置

Require valid-user

再次提醒下,如果你要使用数据库认证,必须通过apr编译出apr_dbd_mysql.so动态链接库,并把它放在linux能自动搜索到的lib目录下。

方案3:明文认证+MySQL认证

要使用MySQL认证,必须先安装MySQL服务器。那么MySQL的“密码本”该如何设置呢?那就是建立数据库和表咯。下面提供一下基本步骤。首先创建一个数据库,名为auth,在auth库内建立一个表,名为users,users内有3个字段,一个id为自增长数字,一个user列,用于存放用户名。一个password列,用来存放密码。然后将你想要设置的用户名密码存放在表内。密码必须是经过CRYPT函数加密过的,可以通过htpasswd脚本获取,如通过/usr/local/httpd/bin/htpasswd -c /usr/local/httpd/users/auth_mysql wangwei 创建一个用户名为wangwei的密码本,输入密码123456后,生成了名为auth_mysql的文件,查看auth_mysql后发现里面有一条记录为wangwei:$apr1$FXx0wpMP$zr4ot39Ef0qK1TdoVMNjR0,那么wangwei:后面的即为加密后的密码,把该字符串存入password列即可。

Httpd配置文件内的配置如下:

#方案1中的LoadModule指令先加载进来

DBDriver mysql #DB驱动为mysql

DBDParams "host=192.168.1.11 port=3306 dbname=auth user=root pass=123456" #连接字符串,懂mysql的应该都认识

DBDMin 1

DBDKeep 2

DBDMax 10

DBDExptime 60

Listen 80

ServerName localhost

DocumentRoot "/usr/local/httpd/htdocs"

AuthName auth

AuthType Basic

AuthBasicProvider dbd 设置使用dbd认证

AuthDBDUserPWQuery "SELECT `password` FROM users WHERE `user`=%s" #设置查询SQL

Require valid-user

方案4:摘要认证+文本认证

摘要认证的配置与基本认证几乎一样,只有两点不同,一是摘要认证需用htdigest创建密码本,二是摘要认证需配置一个认证域。htdigest脚本与htpasswd脚本在同一目录层次。创建方法如下:./htdigest -c "密码本路径" "域名称" "用户名"。如./htdigest -c /usr/local/httpd/users/auth_digest auth wangwei。域名称必须与配置内的AuthName指令设置的一致。而认证域是一个URI,按照方案1的目的,我们将它设置为/。

配置方法如下:

AuthName auth

AuthType Digest #设置为摘要认证

AuthDigestProvider file

AuthDigestDomain / #摘要认证域为/

AuthUserFile /usr/local/httpd/users/auth_digest

Require valid-user

Httpd的授权

除了使用用户名及密码的方式进行浏览器认证外,我们还可以通过IP、子网的方式进一步对用户进行访问限制。这就需要用到Httpd的授权。为了说明用户,我们设计以下几种情景。

情景1,对用户进行IP限制,让处于192.168.1.0网段的用户访问,但不让192.168.1.254的用户访问。配置方案如下:

LoadModule unixd_module modules/mod_unixd.so

LoadModule alias_module modules/mod_alias.so

LoadModule mime_module modules/mod_mime.so

LoadModule cgid_module modules/mod_cgid.so

LoadModule authz_core_module modules/mod_authz_core.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule access_compat_module modules/mod_access_compat.so #使用授权时必须加载的库

LoadModule authn_core_module modules/mod_authn_core.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule dbd_module modules/mod_dbd.so

LoadModule authn_dbd_module modules/mod_authn_dbd.so

Listen 80

ServerName localhost

DocumentRoot "/usr/local/httpd/htdocs"

Allow from 192.168.1.0

Deny from 192.168.1.254

Order Allow,Deny    #验证顺序,先允许,后拒绝。

情景2,在认证的基础上进行授权,既需要浏览器验证,又进行IP限制。配置方案如下:

Allow from 192.168.1.0

Deny from 192.168.1.254

Order Allow,Deny

AuthName auth

AuthType Digest

AuthDigestProvider file

AuthDigestDomain /

AuthUserFile /usr/local/httpd/users/auth_digest

Require valid-user

Satisfy All #认证与授权需同时满足条件才能通过

httpd mysql认证_Apache Httpd服务器之认证与授权相关推荐

  1. 信息安全服务资质认证CCRC证书‖中国网络安全审查技术与认证中心

    随着CCRC信息安全服务资质持证企业的增加,很多企业看着自己的同行纷纷获的CCRC证书,自身也想进行申报,但由于之前没有做过了解,像个无头苍蝇一样,所以对该资质申报的条件要求.申报的好处又不是那么清楚 ...

  2. CCRC信息安全服务资质认证的8大认证分项。

    CCRC信息安全服务资质包含8大认证分项,即信息系统安全集成服务资质认证.安全运维服务资质认证.风险评估服务资质认证.应急处理服务资质认证.软件安全开发服务资质认证.信息系统灾难备份与恢复服务资质认证 ...

  3. CCRC信息安全服务资质认证各分项有哪些?

    1.信息系统安全集成服务资质认证 信息系统安全集成服务资质级别是衡量服务提供者服务能力的尺度.资质级别分为一级.二级.三级共三个级别,其中一级最高,三级最低.安全集成服务提供方的服务能力主要从以下四个 ...

  4. 轻松看懂CCRC信息安全服务资质认证

    信息安全服务资质是信息安全服务机构提供安全服务的一种资格,包括法律地位.资源状况.管理水平. 技术能力等方面的要求.信息安全服务资质认证是依据国家法律法规.国家标准.行业标准和技术规范,按照认证基本规 ...

  5. [Linux] centos 6.5 httpd 自建CA 认证 实现 https 服务

    httpd 自建CA 认证 实现 https 服务 需要的软件: httpd mod_ssl openssl 本文将CA证书服务器和 httpd服务器放到一台物理机器上实现的, 可以作为学习的参考. ...

  6. centos 6.5 httpd 自建CA 认证 实现 https 服务

    httpd 自建CA 认证 实现 https 服务 需要的软件: httpd mod_ssl openssl 本文将CA证书服务器和 httpd服务器放到一台物理机器上实现的, 可以作为学习的参考. ...

  7. 第四章web服务器之httpd

    文章目录 第四章 web服务器 1.1 www简介 1.1.1 网址及HTTP简介 1.1.2 HTTP协议请求的工作流程 1.2 www服务器的类型 1.2.1 仅提供用户浏览的单向静态网页 1.2 ...

  8. 华为ac配置radius认证服务器_华为aaa配置 华为AAA认证典型配置举例 - 网络设备 - 服务器之家...

    华为aaa配置 华为AAA认证典型配置举例 发布时间:2017-03-06 来源:服务器之家 2.5 AAA典型配置举例 2.5.1 Telnet/SSH用户通过RADIUS服务器认证的应用配置 SS ...

  9. 正在向icntv服务器认证授权信息,Spring-Security-OAuth2服务器之搭建认证授权服务器[一]...

    结构基础 基础框架:Spring Boot + Spring-Security-OAuth2 存储介质:Mysql + Redis 持久化方式:Spring-data-jpa 测试工具:Postman ...

最新文章

  1. pku1050----To the Max(求矩阵的最大子段和)
  2. Angular中ngCookies模块介绍
  3. HDU 4864 Task(贪心或高斯消元)
  4. linux 第三章红帽子,红帽子 Linux_命令全解
  5. tmux共享_最常用的终端工具 tmux
  6. Qt/Embedded开发环境的的搭建(二)
  7. java折叠自行车x1-auto,java入门第三季 7-1 简易扑克练习
  8. Golang在Linux环境下的POSIX风格socket编程
  9. ACL-IJCNLP 2021|行业首个少样本NER数据集,清华联合阿里达摩院开发
  10. 名编辑电子杂志大师教程 | 文本复制按钮
  11. 永中office之在线预览(vue/js版)
  12. 猿创征文 | 国产数据库之人大金仓数据库详解安装和使用
  13. 随身系统veket linux v3.11简体中文免费版,《veket随身系统》下载(veket linux)1.9
  14. 常见植被指数总结(一)
  15. KIS专业版-即时库存查询自定义开发
  16. 牛客网——B 遥远的记忆
  17. android页指示动画,Android动画之翻页
  18. 【算法】求n的m次方(快速幂取模)
  19. SCAU 8609 哈夫曼树
  20. 苹果8a1660是什么版本_苹果A1660是什么型号?

热门文章

  1. java label 边框_java中怎么给jlabel设置边框,多谢!
  2. oracle存在于A不存在于B,Oracle试题
  3. linux screen vim 颜色不一样,tmux中的Vim显示错误的颜色
  4. linux系统获取光盘信息api,在Visual C#中运用API函数获取系统信息
  5. eval() python_如何使用 Python 编写 vim 插件
  6. 实战oracle 12c 处理索引坏块一例
  7. Cron 触发器及相关内容 (第二部分)
  8. MySQL索引常用算法
  9. 基于JAVA+SpringMVC+MYSQL的自动排课系统
  10. django.template.exceptions.TemplateSyntaxError: ‘staticfiles‘ is not a registered tag library. Must