zoukankan      html  css  js  c++  java
  • 简述站点访问控制、基于用户的访问控制、httpd虚拟主机、持久链接等应用配置实例

    1 站点访问控制

    可基于两种机制指明对哪些资源进行何种访问控制;

    • 文件系统路径
    • URL路径

    注意:
    从上到下匹配,匹配到一个就立即执行
    如果没有子目录的访问控制,但是有父目录的访问控制,则子目录继承父目录的访问控制

    1.1 IP访问规则设置

    HTTPD-2.2

    Order allow,deny		##Order是固定关键字,后面的allow和deny是参数,哪个在后面,就表示默认策略是什么;所以说要根据默认策略配置下面的条目;这条配置永远放在IP访问规则部分的第一条;
    Deny from host www.jzbg.com		##拒绝这个域名对应的主机访问;
    Deny from 10.207.51.0/28			##拒绝这个网段的IP访问
    Deny from 10.207.51.8				##决绝某个主机访问
    Allow from web.jzbg.com
    Allow from 10.207.51.0/25
    Allow from 10.207.51.128
    Allow from all		##允许所有人访问;
    Deny from all           ##拒绝所有人访问;
    

    HTTPD-2.4

    <Requireall>			##当同时存在not和非not语句是,要将所有rule写在<RequireAll>或者<RequireAny>标签容器中;
    Require host web.jzbg.com
    Require not host web.jzbg.com
    Require not host www.jzbg.com		##not表示拒绝的意思
    Require ip 10.207.51.0/25
    Require ip 10.207.51.128 10.207.51.130
    Require ip 10 172.20 192.168.2
    Require not ip 10.207.51.0/28
    Require not ip 10.207.51.8
    Require all granted	##允许所有人访问;
    或
    Require all denied	##拒绝所有人访问;2.4版本没有Order了,因为默认就是Deny;
    <Requireall>
    
    
    

    1.2 文件系统路径

    根据需要将上面的IP访问规则放到里面
    对指定目录下的内容做访问控制

    <Directory "/PATH">
    ...
    </Directory>
    

    对指定目录下的目录做访问控制,在双引号前面加上~,则可以使用正则表达式

    <Directory ~"^/www/[0-9]{3}">
    ...
    </Directory>
    

    对PATTERN可以匹配到的目录进行范文控制,支持正则表达式

    <DirectoryMatch "^/www/(.+/)?[0-9]{3}/">
    ...
    </DirectoryMatch>
    

    对PATTERN可以匹配到的文件进行访问控制,PATTERN支持通配符

    <Files "PATTERN">
    ...
    </Files>
    

    对PATTERN可以匹配到的文件进行访问控制,在双引号前面加上~,则可以使用正则表达式

    <Files ~"^/www/[0-9]{3}">
    ...
    </Files>
    

    对PATTERN可以匹配到的文件进行访问控制,支持正则表达式

    <FilesMatch ".+.(gif|jpe?g|png)$ ">
    ...
    </FileMatch>
    

    1.3 基于URL路径做访问控制

    根据需要将上面的IP访问规则放到里面
    对指定的URL进行访问控制

    <Location "URL-path|URL">
    ...
    </Location>
    

    对指定的URL进行访问控制

    <Location "^/www/[0-9]{3}">
    ...
    </Location>
    

    对PATTERN可以匹配到的URL进行范文控制,PATTERN支持通配符和正则表达式

    <LocationMatch "PATTERN">
    ...
    </LocationMatch>
    

    2 基于用户的访问控制

    2.1 认证过程简述

    服务器收到client发来的request之后,服务器会发送认证质询(WWW-Authenticate,响应码为401,拒绝客户端请求)给client,client会看到一个提示框,要求输入账号和密码,当client输入了账号和密码之后,client发送请求报文Authorization给server,server收到之后验证是否正确,如果正确则通过验证,发送响应资源;

    2.2 一次失败的认证过程

    客户端发送了请求报文


    因为网页需要认证,服务器端会相应一个认证质询WWW-Authenticate,响应码为401,拒绝客户端请求;


    客户端收到后会先回复一个ACK进行确认


    此时网页上出现一个弹框,等待用户输入完用户密码之后客户端发送请求报文Authorization给服务器端;


    信息完全是明文的(因为AuthType Basic),如果使用digest则为密文


    因为认证失败,所以网页界面变成了


    因为客户端输入的用户和密码不正确,所以服务器端又发送了认证质询报文;


    3.3 基于用户进行认证

    定义安全域

    <Directory "/var/www/html">
        Options Indexes
        AllowOverride None
        AuthType Basic														##使用什么认证方式(None|Basic|Digest|Form)
        AuthName "Admin Area, Please enter username and passwd"		##显示给客户端的提示;
        AuthUserFile "/var/www/passwd"									##存储用户认证用户信息的文件(账号密码);
    
    选择一个配置
        Require user Allen													##允许哪个用户访问;
        Require valid-user													##允许账号文件中的所有用户登录
    </Directory>
    

    创建账号文件

    [root@centos7 ~]# htpasswd -m -b -n Allen 123456 | xargs > /var/www/passwd 
    [root@centos7 ~]# htpasswd -m -b -n Barry 123456 | xargs >> /var/www/passwd 
    [root@centos7 ~]# cat /var/www/passwd
    Allen:$apr1$4zE.hBCF$9hMwE161RPsDaGiN1AZqW1
    Barry:$apr1$9l.CBxWR$i8WW7zcOPuVLJvcvDAn73/
    

    这种basic的方式十分不安全,通过抓包能看到用户输入的账户名和密码

    3.4 基于组账号进行认证

    定义安全域
    <Directory "/var/www/html">
    Options Indexes
    AllowOverride None
    AuthType Basic ##使用什么认证方式(None|Basic|Digest|Form)
    AuthName "Admin Area, Please enter username and passwd" ##显示给客户端的提示;
    AuthUserFile "/var/www/passwd" ##存储用户认证用户信息的文件(账号密码);
    AuthGroupFile "/var/www/group" ##指定组信息文件
    Require group Super ##允许哪个组的用户访问

    创建账号文件

    [root@centos7 ~]# htpasswd -m -b -n Allen 123456 | xargs > /var/www/passwd 
    [root@centos7 ~]# htpasswd -m -b -n Barry 123456 | xargs >> /var/www/passwd 
    [root@centos7 ~]# cat /var/www/passwd
    Allen:$apr1$4zE.hBCF$9hMwE161RPsDaGiN1AZqW1
    Barry:$apr1$9l.CBxWR$i8WW7zcOPuVLJvcvDAn73/
    

    创建组信息文件

    [root@centos7 ~]# vim /var/www/group
    Super:Allen Barry		##每行定义一个组,GROUP_NAME:username1 username2 .....
    

    3 持久连接

    配置命令

    KeepAlive On|Off				##开启或关闭KeepAlive
    KeepAliveTimeout 15			##设置KeepAlive的最大持续连接时间为15s,httpd-2.2只能是秒,httpd-2.4可以是毫秒(后面加ms表示毫秒,不加表示秒);
    MaxKeepAliveRequests 100		##设置每个长连接在建立过程中,最大处理100个请求;
    

    这表示配置了长连接
    通过telnet也可以测试

    4 HTTP虚拟主机

    实现方法
    有三种表示方法,也就有三种实现方法

    • 基于IP:为每个虚拟主机准备至少一个IP地址;
    • 基于PORT:为每个虚拟主机使用至少一个独立PORT;
    • 基于FQDN:为每个虚拟主机使用至少一个FQDN;
      注意:httpd-2.2中,一般虚拟主机不能与中心主机混用;因此,要使用虚拟主机,得先禁用“main”主机(禁用方法:注释中心主机得DocumentRoot指令即可);

    基于IP的虚拟主机示例


    基于端口的虚拟主机示例


    基于FQDN的虚拟主机示例


    注意:httpd-2.2,配置基于FQDN的虚拟主机必须事先使用如下指令

    NameVirtualHost IPADDRESS:PORT		##在VirtualHost前面加一条命令,每个VirtualHost都需要;
    <VirtualHost IPADDRESS:PORT>
    .....
    </VirtualHost>
    
  • 相关阅读:
    ajax提交表单,包括跳入的坑!
    js继承
    文本的选取和复制
    js 绑定的键盘事件
    webpack的使用 一、webpack 和webpack的安装
    json转化为C#、Java、TypeScript、VisualBasic、Python实体类
    ASP.NET MVC Route详解
    .net面试技术要点总结
    C#利用反射实现简单记事本功能插件
    ASP.NET网页请求以及处理全过程(反编译工具查看源代码)
  • 原文地址:https://www.cnblogs.com/jzbgltb/p/10059640.html
Copyright © 2011-2022 走看看