Ubuntu下使用Apache2进行HTTP认证

本文介绍了如何在Apache2服务器上设置HTTPBasic认证,包括修改apache2.conf配置文件,加载auth_basic和auth_file模块,创建用户文件以及重启服务以应用更改。通过设置AuthType、AuthUserFile等参数,限制对特定目录的访问,确保只有经过验证的用户才能浏览内容。
摘要由CSDN通过智能技术生成

本文适用于Apache 2.1及更高版本,低版本请先更新或查阅其他教程。

一、原理

        首先知道HTTP认证的原理,当客户端访问服务器资源时,如果服务器需要先对客户端身份进行认证,那么服务器将会返回响应状态码401,其含义为Unauthorized,即:未被授权;并在响应标头中(即:WWW-Authenticate)提供具体的验证方法(方法一般有:Basic,即基本认证方法;Digest,即MD5摘要认证方法等)。客户端根据此方法来进行身份验证,验证通过即可访问服务器资源。具体原理,请前往此页面进行学习:HTTP身份验证原理

二、修改apache2.conf全局配置文件 

        那么,如何在Apache2中使用认证方法呢?我把链接放在这里,可以自学,也可以听我细说:Apache2认证模块介绍

        安装Apache2什么的就不多说了,我默认大家已经安装好了Apache2,并创建好了自己的网站,且网站能够正常访问。

        例如,我们的网站根目录路径,如下面的代码块所示。我们将通过设置,让所有试图访问该目录下的子目录和子文件的客户端接受认证模块的考验,只有通过才能访问。

/disk_0/web/www/example.com/root

        我们进入apache2的全局配置文件存放目录,打开名为apache2.conf的配置文件:

sudo vim /etc/apache2/apache2.conf

        在这个配置文件中,我们找到下面这个代码块:

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>



#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted

        这里描述了不同目录对访问服务器的客户端所开放的权限。我们首先将我们自己的网站根目录加入到上面去,并为它添加各项属性,稍后我会逐一介绍它们,重要的参数我会加粗标示:

<Directory /disk_0/web/www/example.com/root>
        Options Indexes FollowSymLinks
        AuthName "authorization"
        AuthType basic
        AuthBasicProvider file
        AuthUserFile /disk_0/web/www/example.com/authorization/users
        Require valid-user
        AllowOverride None
</Directory>
  • Option:决定客户端是否能看见我们的网站目录,这里不详细结介绍
  • AuthName:认证提示信息,写啥都行,主要是起提示作用
  • AuthType:认证类型,即上文提到的Basic和Digest等,目前Apache2好像就支持这两种
  • AuthBasicProvider:Basic认证支持模块,用来为Basic认证方法提供支持,如果你在前面的AuthType中选择了Basic认证方式,那么你要在这里进一步设置支持方式。我们这里使用的是文件支持
  • AuthUserFile:设定一个纯文本文件的名称,其中包含用于认证的用户名/密码的列表,这个文件就是用来支持Basic认证方法的
  • Require:规定谁能够访问本目录
  • AllowOverride:规定.htaccess文件对本目录权限的复写操作,与本文没太大关系,不介绍

三、加载auth_basic、auth_file模块

        接下来,由于我们使用Basic方法,以文件形式支持该方法进行鉴权,我们需要在Aapache2中启动相应的模块。

sudo a2enmod auth_basic
sudo a2enmod auth_file

        注意,如果你没有执行上述指令,当你重启apache2服务时,apache2会提示你,你使用了basic认证方法,但没有加载该方法依赖的所有模块。

四、创建用户

        在apache2.conf文件中,我们为我们网站的根目录曾输入了如下代码:

AuthUserFile /disk_0/web/www/example.com/authorization/users

        这是存储用户名和密码的文本文件,我们使用htpasswd指令新建一个用户:

htpasswd -c /disk_0/web/www/example.com/authorization/users user_0

        指令将在/disk_0/web/www/example.com/authorization/目录下创建一个名为users的纯文本文件,并新建一个名为user_0的新用户,按下回车,系统会提示你输入该用户的密码(为了保证不出错,会让你输入两遍)。成功后,你可以打开这个纯文本文件看一下,里面存储的是用户名以及经过加密的用户密码:

user_0:$amb1$s2234421$B50124

        请特别注意!!!创建的纯文本文件绝对不能位于网站根目录下面,因为访问者有可能会直接看到这个文件,然后下载它,虽然密码是经过加密的,但这样做仍然很危险! 

五、重启Apache2服务

        输入指令重启Apache2服务:

sudo systemctl reload apache2

        如果没有任何返回信息,说明服务启动成功,我们来看一下实际效果吧。

六、结果

6fe9200a5fce50ec2fa8b708a9a5bb55.png

         如果我们点了取消,服务器会返回浏览器401码

07f04c6877787d582892589dee799428.png

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值