Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.基于用户的访问控制概述
认证质询:
WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
认证方式两种:
basic:
明文认证,不过可以配合https进行加密传输问题也不大。
digest:
消息摘要认证,兼容性差,有的浏览器可能不支持哟~
安全域:
需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
用户的账号和密码
虚拟账号:
仅用于访问某服务时用到的认证标识
存储:
文本文件,SQL数据库,ldap目录存储,nis等
二.基于basic认证配置实战案例
1>.创建测试数据
[root@node101.yinzhengjie.org.cn ~]# mkdir /var/www/html/admin
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# echo "/var/www/html/admin/index.html" > /var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /var/www/html/admin
total
-rw-r--r-- root root Dec : index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/index.html
/var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#
2>.提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
常用选项:
-c:
自动创建文件,仅应该在文件不存在时使用
-p:
明文密码
-d:
CRYPT格式加密,默认
-m:
md5格式加密
-s:
sha格式加密
-D:
删除指定用户 具体使用案例如下图所示。
[root@node101.yinzhengjie.org.cn ~]# htpasswd -c /etc/httpd/conf.d/httpdpasswd jason #创建第一个用户时需要使用"-c"选项创建的用户的同时会自动创建文件,若文件已经存在则清空文件所有内容重新写入咱们新创建的用户。
New password:
Re-type new password:
Adding password for user jason
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw-r--r-- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# date
Mon Dec :: CST
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# htpasswd -s /etc/httpd/conf.d/httpdpasswd jay #创建第二个用户时千万别在使用"-c"选项哟,不过咱们可以使用-s指定加密算法为sha格式加密哟~
New password:
Re-type new password:
Adding password for user jay
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# chmod /etc/httpd/conf.d/httpdpasswd #为了安全起见,可以将文件权限改小点。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
[root@node101.yinzhengjie.org.cn ~]#
htpasswd命令使用案例

3>.修改httpd的配置文件
[root@node101.yinzhengjie.org.cn ~]# ll /var/www/html/admin/
total
-rw-r--r-- root root Dec : index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/index.html
/var/www/html/admin/index.html
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
AuthType Basic #指明验证方式
AuthName "Welecon to Login" #指定客户端验证时的提示信息
AuthUserFile "/etc/httpd//conf.d/httpdpasswd" #指定账号验证文件,一定要确认httpd运行用户是否对该文件有执行权限哟~
Require user jason #此处我们只写了允许jason用户访问,若果想要jay用户也可以访问则输入"Require user jason jay",如果允许帐号验证文件中所有用户登录访问则这里可以写"Require valid-user"
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -t
Syntax OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#
4>.浏览器访问页面并使用jason用户登录

5>.用户名密码验证成功就可以访问成功啦~(如果不能访问的话,错误原因可以自行查看错误日志信息哟~)

6>.使用jay用户访问并不会成功,因为咱们在httpd的配置文件中配置的是"Require user jason" 表示只允许jason用户访问

7>.在配置文件中定义一个".htaccess"隐藏文件
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
AllowOverride AuthConfig #除了AuthConfig的其它指令都无法覆盖,即允许使用权限验证功能。
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/.htaccess #将之前的验证信息直接写在这里的隐藏文件即可
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/etc/httpd//conf.d/httpdpasswd"
Require user jason jay #此处我们允许jason和jay用户访问,若允许账号验证文件的所有用户均有权限访问可直接写"Require valid-user"即可。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#

8>.为什么".htaccess"文件客户端看不到呢?(如下图所示,那是因为以".ht*"开头的文件都被拒绝啦~)
[root@node101.yinzhengjie.org.cn ~]# grep -C htaccess /etc/httpd/conf/httpd.conf
# for more information.
#
Options Indexes FollowSymLinks #
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None --
<IfModule dir_module>
DirectoryIndex index.html
</IfModule> #
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ".ht*">
Require all denied
</Files>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# grep -C 5 htaccess /etc/httpd/conf/httpd.conf #查看匹配到"htaccess"内容的前后5行

三.基于组账号进行认证实战案例
1>.创建用户账号和组账号文件
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# htpasswd /etc/httpd/conf.d/httpdpasswd jerry
New password:
Re-type new password:
Adding password for user jerry
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdpasswd
jason:$apr1$fnoHrDaP$Q0ZGtsOj9D4W3xHzIKm9E/
jay:{SHA}o78nbN18sxTgXokaJRMEYOxV5b8=
jerry:$apr1$NC0Az6Ga$2ers2ZQZttbW.DPNrie.n0
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# vim /etc/httpd/conf.d/httpdgroup
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/httpdgroup #每一行定义一个组,组中的用户用空格分开
testgroup: jason jerry
[root@node101.yinzhengjie.org.cn ~]#
2>.定义安全域
[root@node101.yinzhengjie.org.cn ~]# cat /etc/httpd/conf.d/auth.conf
<Directory "/var/www/html/admin">
AllowOverride AuthConfig
</Directory>
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# vim /var/www/html/admin/.htaccess
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat /var/www/html/admin/.htaccess
AuthType Basic
AuthName "Welecon to Login"
AuthUserFile "/etc/httpd//conf.d/httpdpasswd"
AuthGroupFile "/etc/httpd/conf.d/httpdgroup"
Require group testgroup
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -t
Syntax OK
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# systemctl reload httpd
[root@node101.yinzhengjie.org.cn ~]#
3>.使用jerry用户访问

4>.jerry用户访问成功

5>.远程客户端和用户验证的控制
Satisfy ALL|Any
ALL:
客户机IP和用户验证都需要通过才可以
Any:
客户机IP和用户验证,有一个满足即可 示例:
Require valid-user #这种写法是httpd2.2版本的写法,在httpd2.4推荐使用Require all granted
Order allow,deny
Allow from 192.168.
Satisfy Any
四.认证时需要启动认证模块(默认是启动的)
1>.禁用基本认证模块
[root@node101.yinzhengjie.org.cn ~]# grep auth_basic_module /etc/httpd/conf.modules.d/-base.conf #禁用基本的身份验证模块,只需要在前面添加"#"号注释即可。
#LoadModule auth_basic_module modules/mod_auth_basic.so
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -M | grep basic #若没有输出说明动态模块被咱们禁用了
[root@node101.yinzhengjie.org.cn ~]#
2>.禁用认证模块后用户将无法使用认证功能
[root@node101.yinzhengjie.org.cn ~]# tail -10f /var/log/httpd/error_log #错误日志出现如下的报错信息哟~
......
[Mon Dec ::58.813900 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding module
[root@node101.yinzhengjie.org.cn ~]#

3>.启用基本认证模块
[root@node101.yinzhengjie.org.cn ~]# grep auth_basic_module /etc/httpd/conf.modules.d/-base.conf #"auth_basic_module"是基本的身份验证的模块,默认是开启的。
LoadModule auth_basic_module modules/mod_auth_basic.so #加载模块的指令使用的是LoadModule,加载模块的名称为"auth_basic_module",该模块在磁盘上存放的位置是"modules/mod_auth_basic.so"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/modules/mod_auth_basic.so #根据上面指定的位置咱们的确可以找到该模块哟~
-rwxr-xr-x root root Aug : /etc/httpd/modules/mod_auth_basic.so
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# httpd -M | grep basic #该动态模块已经被加载啦
auth_basic_module (shared)
[root@node101.yinzhengjie.org.cn ~]#
五.客户端验证失败原因
1>.查看错误日志
[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/access_log
172.30.1.254 - - -- :: "-" - "-" "-"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - jason -- :: "GET /admin/ HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
172.30.1.254 - - -- :: "GET /favicon.ico HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/access_log
[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/error_log
[Mon Dec ::58.813900 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding mod
ule[Mon Dec ::57.638316 ] [authn_core:error] [pid :tid ] [client 172.30.1.254:] AH01796: AuthType Basic configured without corresponding mod
ule[Mon Dec ::08.559118 ] [mpm_worker:notice] [pid :tid ] AH00297: SIGUSR1 received. Doing graceful restart
[Mon Dec ::08.567627 ] [lbmethod_heartbeat:notice] [pid :tid ] AH02282: No slotmem from mod_heartmonitor
[Mon Dec ::08.567967 ] [mpm_worker:notice] [pid :tid ] AH00292: Apache/2.4. (CentOS) configured -- resuming normal operations
[Mon Dec ::08.567977 ] [core:notice] [pid :tid ] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Dec ::20.795627 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::22.947555 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::34.561196 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[Mon Dec ::18.925494 ] [authn_file:error] [pid :tid ] ()Permission denied: [client 172.30.1.254:] AH01620: Could not open password file
: /etc/httpd/conf.d/httpdpasswd[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# tail /var/log/httpd/error_log

2>.错误原因分析
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd #错误原因可能会是客户端输入了错误密码,但是从上面的日志分析可以看出来应该是权限被拒绝,于是查看该文件发现果不其然,的确是没有权限访问的。
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
3>.解决方案
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw------- root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ps aux | grep httpd #需要查明httpd服务是被哪个用户启用的,不难发现是apache用户在运行httpd服务。
root 0.0 0.0 ? Ss : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? S : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
apache 0.0 0.0 ? Sl : : /usr/sbin/httpd -DFOREGROUND
root 0.0 0.0 pts/ S+ : : grep --color=auto httpd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:apache:r /etc/httpd/conf.d/httpdpasswd #于是我们需要为httpd服务添加ACL权限
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /etc/httpd/conf.d/httpdpasswd
-rw-r-----+ root root Dec : /etc/httpd/conf.d/httpdpasswd
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /etc/httpd/conf.d/httpdpasswd #再次确认一下httpd的验证文件是否有权限哟~确认有访问权限后再使用浏览器访问就可以成功啦,如下图所示。
getfacl: Removing leading '/' from absolute path names
# file: etc/httpd/conf.d/httpdpasswd
# owner: root
# group: root
user::rw-
user:apache:r--
group::---
mask::r--
other::--- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

Httpd服务入门知识-Httpd服务常见配置案例之基于用户账号实现访问控制的更多相关文章
- Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机
Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...
- Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面
Httpd服务入门知识-Httpd服务常见配置案例之Apache的工作做状态status页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.status功能概述 status页 ...
- Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项
Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...
- Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享
Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现用户家目录的http共享前提 在配置家目录共 ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名
Httpd服务入门知识-Httpd服务常见配置案例之定义路径别名 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建测试数据 [root@node101.yinzhengj ...
- Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集
Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...
- Httpd服务入门知识-Httpd服务常见配置案例之日志设定
Httpd服务入门知识-Httpd服务常见配置案例之日志设定 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志类型 [root@node101.yinzhengjie.org ...
- Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制
Httpd服务入门知识-Httpd服务常见配置案例之基于客户端来源地址实现访问控制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Options 1>.OPTIONS指 ...
- Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置
Httpd服务入门知识-Httpd服务常见配置案例之定义站点主页面及错误页面配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.定义站点主页面 [root@node101.yi ...
随机推荐
- git提交代码时出现was rejected by remote错误
git常见问题 git是大家在公司基本都项目管理工具,有一次在改了一个bug提交远程提交就出现问题了. 解决方案 首先这个是远程提交的时候被项目权限拦截掉了,一般在我们都用配置ssh公钥的方式操作,那 ...
- Circos图
Circos官网 http://circos.ca 在线绘图工具 http://mkweb.bcgsc.ca/tableviewer/visualize/ Circos图的诞生 Circos ...
- 正方教务系统客户端 error loading midas.dll.
在windows xp/7/10上安装了客户端,安装到注册字体一步,没有响应,强行结束.启动客户端,登录,出现 error loading midas.dll. 32位:先将 midas.dll 放 ...
- phpstrom 配置getter和setter
先看一段代码 protected $mddid; /** * @return mixed */ public function getMddid() { return $this->mddid; ...
- k8s删除pod一直处于terminating状态
我这里的pod是与nfs有关,nfs挂载有问题导致pod有问题,执行完删除命令以后看到pod一直处于terminating的状态. 这种情况下可以使用强制删除命令: kubectl delete po ...
- scala eval
package com.jason case class JJ(d: Double*) object Ss { def main(args: Array[String]): Unit = { impo ...
- Docker安装及简单使用(Ubuntu)
### Ubuntu18下docker安装 * step 1: 安装必要的一些系统工具 sudo apt-get update sudo apt-get -y install apt-transpor ...
- TeamViewer 一款远程控制软件
TeamViewer 一款远程控制软件,可以在任何防火圈和Nat代理的后台用于远程控制的应用程序. 主要功能:桌面共享和文件传输. 使用前提:两台计算机上同时运行TeamViewer, 使用方法:如果 ...
- package.json中dependencies 与devDependencies 的区别
首先,dependencies中安装的依赖是生产环境的依赖,即项目要运行所必须安装的包:devDependencies中安装的的依赖是开放环境的依赖,即在开发项目时需要安装的依赖. 其次,在安装依赖的 ...
- spring aop 一个挡板例子
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.ann ...