阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache Httpd服务器之认证与授权

488次阅读
没有评论

共计 5945 个字符,预计需要花费 15 分钟才能阅读完成。

此篇文章,我们主要探讨下关于 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”
<Directory “/usr/local/httpd/htdocs”>        #要在文档根目录下设置认证,那么就在根目录容器下进行认证设置
AuthName auth                                #认证名,可以随便起一个英文字符,在浏览器弹出的认证框上将会显示此名字
AuthType Basic                                #设置认证类型为基本认证
AuthBasicProvider file                        #设置为文本认证
AuthUserFile /usr/local/httpd/users/u_basic        #密码本的位置
Require valid-user                            #指定只有正确的用户才能进入此目录
</Directory>
   

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

Apache Httpd 服务器之认证与授权

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

 

    方案 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 容器下的配置即可:

<Directory “/usr/local/httpd/htdocs”>
AuthName auth
AuthType Basic
AuthBasicProvider dbm    #使用 dbm 认证
AuthDBMUserFile /usr/local/httpd/users/auth_sdbm #密码本位置
Require valid-user
</Directory>
   

    再次提醒下,如果你要使用数据库认证,必须通过 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”
<Directory “/usr/local/httpd/htdocs”>
AuthName auth
AuthType Basic
AuthBasicProvider dbd 设置使用 dbd 认证
AuthDBDUserPWQuery “SELECT `password` FROM users WHERE `user`=%s” #设置查询 SQL
Require valid-user
</Directory>

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

<Directory “/usr/local/httpd/htdocs”>
AuthName auth
AuthType Digest #设置为摘要认证
AuthDigestProvider file
AuthDigestDomain / #摘要认证域为 /
AuthUserFile /usr/local/httpd/users/auth_digest
Require valid-user
</Directory>

    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”
<Directory “/usr/local/httpd/htdocs”>
Allow from 192.168.1.0
Deny from 192.168.1.254
Order Allow,Deny    #验证顺序,先允许,后拒绝。
</Directory>

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

<Directory “/usr/local/httpd/htdocs”>
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 #认证与授权需同时满足条件才能通过
</Directory>

CentOS 6.5 编译安装 httpd-2.4.7 http://www.linuxidc.com/Linux/2014-02/97265.htm

httpd 中工作模型的比较  http://www.linuxidc.com/Linux/2014-03/99093.htm

源码编译安装 httpd2.4 及虚拟主机 http://www.linuxidc.com/Linux/2014-08/105384.htm

编译安装最新版 httpd-2.4 http://www.linuxidc.com/Linux/2014-03/98761.htm

httpd2.4 基本功能的实现 … http://www.linuxidc.com/Linux/2014-03/98762.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5945字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7956563
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...