前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Apache Httpd服务器之认证与授权

Apache Httpd服务器之认证与授权

作者头像
星哥玩云
发布于 2022-07-04 05:22:33
发布于 2022-07-04 05:22:33
2.2K0
举报
文章被收录于专栏:开源部署开源部署

此篇文章,我们主要探讨下关于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后即弹出认证框:

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

    方案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:apr1FXx0wpMP

    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>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HTTPD
Apache HTTP Server(简称Apache或httpd)是Apache软件基金会的一个开放源代码的网页服务器软件,旨在为unix,windows等操作系统中提供开源httpd服务。由于其安全性、高效性及可扩展性,被广泛使用,自1996年4月以来,Apache一直是Internet上最流行的HTTP服务器。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器等编译到httpd的相关模块中。
一滴水的眼泪
2020/09/21
1.9K0
HTTPD
Apache 默认网站
每一个web服务器软件一般默认都会提供一个用于测试的网站,apache也为用户提供了一个默认网站。默认网站的配置写在默认配置文件中。
星哥玩云
2022/09/15
1.5K0
OpenWRT配置Apache Webdav By HKL,
本文主要实现在OpenWRT路由器配置Apache2 based 的 Webdav(s)共享文件,之前曾经试过通过 lighttpd部署Webdav 不过由于在尝试通过lighttpd部署的Webdav作为Joplin的后端Webdav存储时,会出现4XX的故障码,经查询,应该是lighttpd的Webdav默认不是全部的Webdav Method都支持,所以这次改用OpenWRT Apache2 Webdav
hiplon
2020/07/22
3.2K0
linux下Apache服务器使用入门----httpd.conf
如果安装centos,系统本身已经安装了apache,名字为httpd这个服务就是对应的apache service httpd start service httpd stop service httpd restart 下面介绍一下apache的几个重要的配置文件 1 httpd.conf 这个文件在/etc/httpd/conf目录下,文件大致分为三个部分: 主服务器部分 这个部分主要是使用一些参数定义服务器的功能等等。 ### Section 1: Global Environment Se
用户1154259
2018/01/17
2.2K0
11.7/11.8/11.9 Apache安装
安装Apache Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache Apache官网www.apache.org wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.29.tar.gz wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.ta
运维小白
2018/02/06
1.5K0
LAMP/LNMP环境下部署网站/导入PHP项目【VMware环境】
!>遇到报错可能有以下原因 1.防火墙未关闭 2.yum配置错误 3.具体请看报错信息,yum的总结的文件在另一个笔记本上,但是一般都是这两个问题~
思索
2024/08/16
3310
LAMP/LNMP环境下部署网站/导入PHP项目【VMware环境】
Apache 性能配置优化
刘远飞
2017/04/24
7.8K0
CentOS 6.5搭建Apache整合SVN 1.8.5服务器(多版本库权限配置)
CentOS 6.5搭建Apache整合SVN 1.8.5服务器(多版本库权限配置)
星哥玩云
2022/07/04
6740
Apache用户认证、域名跳转、访问日志格式 原
注意: 本章使用浏览器进行检测的前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名。
阿dai学长
2019/04/03
1.8K0
在 Apache 上配置 WebDAV 服务器
WebDAV 使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。现在主流的 WEB 服务器一般都支持 WebDAV。下面较详细的介绍一下 WebDAV 在 APACHE 服务器中的配置。
星哥玩云
2022/07/04
5.2K0
Apache 配置与应用
Apache HTTP Server 之所以受到众多企业的青睐,得益于其源代码开源,跨平台、功能模块化、可灵活定制等优点,其不仅性能稳定,在安全性方面的表现也十分出色。
全栈程序员站长
2022/09/14
5020
Apache 配置与应用
浅谈 Apache 的访问控制配置
为了更好地控制对网站资源的访问,所以需要为特定的网站目录添加访问授权。 客户机地址限制: 通过 Require 配置项,可以根据主机的主机名或IP地址来决定是否允许客户端访问,在 httpd服务器的主配置文件的 <Location>、<Directory>、<Files>、<Limit> 配置段中均可以使用 Require 配置项来控制客户端的访问。 常用格式如下: Require all granted :表示允许所有主机访问 Require all denied :表示拒绝所有主机访问 Require local :表示仅允许本地主机访问 Require [not] host <主机名或域名列表> :表示允许或拒绝指定主机或域访问 Require [not] IP <IP地址或网段列表> :表示允许或拒绝制定IP或网段访问 具体用法: 路径:/usr/local/httpd/conf/httpd.conf 1、允许所有
小手冰凉
2019/09/10
2.7K0
浅谈 Apache 的访问控制配置
CentOS 6 编译安装Subversion-1.8.10+Apache2.4
只是记录下安装过程,方便下次直接拷贝,省的在去查找一些选项。CentOS6安装完成后自带的有Apache2.2和subversion1.6,那我们就先来看系统自带的如何配置:
星哥玩云
2022/07/04
3860
CentOS 6 编译安装Subversion-1.8.10+Apache2.4
使用SVN+apache搭建版本控制服务器
SVN(subversion)是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。作为一个运维人员安装和配置SVN服务器和客户端是必须要掌握的内容。
胡齐
2019/11/12
1.6K0
11.18 Apache用户认证
httpd的用户认证目录 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <Directory /data/wwwroot/www.123.com> //指定认证的目录 AllowOverride AuthConfig //这个相当于打开
运维小白
2018/02/06
7560
Apache安装
自带的php-fpm在/usr/sbin目录下, 通过brew安装的php把php-fpm放到了/usr/local/sbin目录, 默认启动PHP-fpm时系统会找到/usr/sbin目录的文件,他的默认php-fpm.conf为/private/etc目录,默认上不存在的
py3study
2020/01/19
1.3K0
CentOS 7安装部署Apache网站后配置详解
在一台CentOS 7上搭建Apache网站后,一般都是允许所有人访问的,那么可能会有一些特殊情况,需要对访问网站的人进行限制,出于这种情况,Apache可以通过Require配置项,来对客户端进行一些访问限制,可以基于IP地址、网段、主机名或域名。使用名称“all”时表示任意地址。
星哥玩云
2022/07/26
1.1K0
Centos6.8下编译安装LAMP的操作记录梳理
之前用的最多的web框架是LNMP,偶尔也会用到LAMP。接下来简单说下LAMP环境的部署记录,这里选择源码安装的方式: 1)Mysql的安装 部署过程参考:http://www.cnblogs.com/kevingrace/p/6109679.html 2)Apache的安装 依赖软件安装 [root@jenkins-server ~]# yum install gcc gcc-c++ make wget [root@jenkins-server ~]# yum install zlib-devel op
洗尽了浮华
2018/01/23
1.1K0
Centos6.8下编译安装LAMP的操作记录梳理
CentOS 7 中httpd服务的用户限制详解
Apache HTTP Server 之所以受到众多企业的青睐,得益于其代码开源、跨平台、功能模块haul、可灵活定制等诸多优点,其不仅性能稳定,在安全性方面的表现也十分出色。
星哥玩云
2022/07/28
7960
CentOS 7 中httpd服务的用户限制详解
Apache用户认证,域名跳转,Apache访问日志
Apache用户认证:  vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容 <Virtual
叶瑾
2018/06/14
3K0
相关推荐
HTTPD
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档