前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.18 Apache用户认证

11.18 Apache用户认证

作者头像
运维小白
发布2018-02-06 15:38:22
6670
发布2018-02-06 15:38:22
举报
文章被收录于专栏:运维小白运维小白

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 //这个相当于打开认证的开关 AuthName "123.com user auth" //自定义认证的名字,作用不大 AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过 AuthUserFile /data/.htpasswd //指定密码文件所在位置 require valid-user //指定需要认证的用户为全部可用用户 </Directory>

</VirtualHost> /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming - 重新加载配置-t , graceful - 绑定hosts,浏览器测试 - curl -x127.0.0.1:80 www.123.com //状态码为401 - curl -x127.0.0.1:80 -uaming:passwd www.123.com //状态码为200

  • 还可以针对单个文件进行认证 <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php> AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch>

</VirtualHost> ## httpd的用户认证 - 浏览器在打开一个网站,什么页面都不现实,只弹出一个对话框,让你输入用户名和密码,只有输入正确才能访问网站的内容 - 需求 - abc.com这个网站访问的时候,不能直接访问,必须输入用户名和密码,验证通过之后才能访问网站内容——>这样做的目的是增加安全性,但是劣势是用户体验很差,因为每个人用访问网站都必须输入用户名和密码 1. 编辑vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 文件 ``` [root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在文件中编辑配置文件,将以下内容添加到第二段代码中——>因为第一个虚拟主机是默认虚拟主机 <Directory /data/wwwroot/www.111.com> //指定认证的目录 AllowOverride AuthConfig //这个相当于打开认证的开关,如果没有这一行,那就相当于没有开启 AuthName "111.com user auth" //自定义认证的名字,作用不大 AuthType Basic //认证的类型,一般为Basic,其他类型几乎没用过 AuthUserFile /data/.htpasswd //指定密码文件所在位置——>这里需要指定一个用户名的密码文件 require valid-user //指定需要认证的用户为全部可用用户 </Directory>

更改完的代码 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>

<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com <Directory /data/wwwroot/111.com> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost>

然后保存退出

代码语言:javascript
复制
2. 用apache自带的命令htpasswd创建
-  /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd hanfeng 
    - -c参数,就是创建
    -m参数,使用MD5加密
    - /data/.htpasswd,指定密码文件所在位置
    - useradd hanfeng,(这里的useradd 是不需要写的,直接写用户名就行)加一个用户名(密码为hanfeng)

[root@hf-01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd hanfeng New password: Re-type new password: Adding password for user hanfeng [root@hf-01 ~]#

代码语言:javascript
复制
- 若是提示错误,那么先查看文件是否生成,然后查看文件内容,再去排查其他错误
3. 查看 /data/.htpasswd 文件内容
- 能看到文件中有一行,以 : 冒号为分割。左边是用户名,右边是MD5加密的密码
    - 因为是用 -m 指定了加密的类型

[root@hf-01 ~]# cat /data/.htpasswd hanfeng:$apr1$DAYH22/X$YbawXM95jlmckPykpfn3u/ [root@hf-01 ~]#

代码语言:javascript
复制
4. 再增加zhangsan用户,就不需要去 -c参数 创建了,因为已经创建过了(密码为123456)

[root@hf-01 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan New password: Re-type new password: Adding password for user zhangsan [root@hf-01 ~]#

代码语言:javascript
复制
5. 查看文件内容,会发现又增加了一行密码

[root@hf-01 ~]# cat /data/.htpasswd hanfeng:$apr1$DAYH22/X$YbawXM95jlmckPykpfn3u/ zhangsan:$apr1$NC7LZ5JQ$FBZNAIzjCTwKheTiWrtlT. [root@hf-01 ~]#

代码语言:javascript
复制
6. 查看配置文件是否有错误,并重新加载配置文件

[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]#

代码语言:javascript
复制
7. 测试,访问111.com的时候,会提示401状态码
- 401状态码,说明访问的内容需要做用户认证

[root@hf-01 ~]# curl -x127.0.0.1:80 111.com

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head> <title>401 Unauthorized</title> </head><body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.</p> </body></html> [root@hf-01 ~]# curl -x127.0.0.1:80 111.com -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 15:34:22 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]#

代码语言:javascript
复制
8. 同样可以在浏览器中输入111.com——>前提是要先在物理机中hosts文件定义111.com

192.168.202.130 www.abc.com www.123.com 111.com

代码语言:javascript
复制
9. 会发现需要输入用户名,和密码

![输入图片说明](https://static.oschina.net/uploads/img/201712/20154417_RfRv.jpg "浏览器访问111.com,会提示输入密码")
10. 在输入用户名和密码

![输入图片说明](https://static.oschina.net/uploads/img/201712/20155044_Duav.jpg "输入验证码和密码")

11. 会发现正常访问到页面了

![输入图片说明](https://static.oschina.net/uploads/img/201712/20155247_rti9.jpg "正常访问到页面内容")

12. 这个就是用户认证

### curl输入用户名和密码
- curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com -I
    - -u参数,然后加用户名,再:冒号密码

[root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 15:57:06 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8

[root@hf-01 ~]#

代码语言:javascript
复制
- 这时会发现状态码改变了,状态码变成了200(200即为正常)
- 若是输错密码,那么状态码又会变成401

[root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:feng 111.com -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 15:59:16 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1

[root@hf-01 ~]#

代码语言:javascript
复制
## 针对某一个访问的进行认证
- 针对 admin.php文件 只有打开这个文件才会执行下面的操作

<VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com <FilesMatch admin.php> AllowOverride AuthConfig AuthName "123.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </FilesMatch> </VirtualHost>

代码语言:javascript
复制
- 这里和前面的用户认证唯一不同的就是,使用的是 FilesMatch ,当访问的文件匹配到admin.php的时候,它才去执行以下的配置,而前面的用户认证使用的Directory,指定了一个目录,只要是这个目录下面的都会去认证,这里是FilesMatch ,匹配文件的
1. 更改配置文件,注释掉Directory,去使用FilesMatch
- vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

未更改前 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>

<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com <Directory /data/wwwroot/111.com> AllowOverride AuthConfig AuthName "111.com user auth" AuthType Basic AuthUserFile /data/.htpasswd require valid-user </Directory> ErrorLog "logs/111.com-error_log" CustomLog "logs/111.com-access_log" common </VirtualHost>

更改后 <VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com www.123.com ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>

<VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com

<Directory /data/wwwroot/111.com>

代码语言:javascript
复制
<FilesMatch 123.php>
    AllowOverride AuthConfig
    AuthName "111.com user auth"
    AuthType Basic
    AuthUserFile /data/.htpasswd
    require valid-user
</FilesMatch>
#</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common

</VirtualHost>

并保存退出

代码语言:javascript
复制
2. 检查配置文件是否存在语法错误,并重新加载配置文件

[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t Syntax OK [root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful [root@hf-01 ~]#

代码语言:javascript
复制
3. 编辑123.php文件

[root@hf-01 ~]# vim /data/wwwroot/111.com/123.php

在配置文件中写入

<?php echo "123.php"; 并保存退出 ``` 4. 检查是否能访问网站,这里会看到不加-u 也能访问到网站,状态码也是200,而不是401了 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:feng 111.com 111.com[root@hf-01 ~]# [root@hf-01 ~]# curl -x127.0.0.1:80 111.com 111.com[root@hf-01 ~]# [root@hf-01 ~]# curl -x127.0.0.1:80 111.com -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 16:24:13 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8 [root@hf-01 ~]# ``` 5. 但是在访问123.php的时候,会提示401,这是因为针对123.php做了一个限制 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 111.com/123.php -I HTTP/1.1 401 Unauthorized Date: Wed, 20 Dec 2017 16:25:42 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 WWW-Authenticate: Basic realm="111.com user auth" Content-Type: text/html; charset=iso-8859-1 [root@hf-01 ~]# ``` 6. 这时候-u指定用户名和密码,就可以访问123.php了 ``` [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com/123.php -I HTTP/1.1 200 OK Date: Wed, 20 Dec 2017 16:27:11 GMT Server: Apache/2.4.29 (Unix) PHP/7.1.6 X-Powered-By: PHP/7.1.6 Content-Type: text/html; charset=UTF-8 [root@hf-01 ~]# curl -x127.0.0.1:80 -uhanfeng:hanfeng 111.com/123.php 123.php[root@hf-01 ~]# ```

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • httpd的用户认证目录
  • <Directory /data/wwwroot/111.com>
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档