1、详细描述一次加密通讯的过程,结合图示最佳。

A和B之间要进行加密通讯,通讯的主体内容应选择对称加密算法(效率高),而对称秘钥自身在网络上的传输则通过非对称加密实现(安全性高)

以下为A与B之间通过加密通讯传送邮件的场景。


Linux第九周作业

A向B发一份邮件,用单向加密算法提取邮件内容的特征码,并用A的私钥加密特征码并附加在邮件的最后,A再用对称**将整个邮件内容(包括特征码)加密,并发送给B。A用B的公钥将对称**加密,最后将对称**发给B

B用自己的私钥将对称**解密。用对称秘钥将邮件内容和加密的特征码解密。用A的公钥解密(加密的特征码)。再用特征码提取邮件的内容。最后确认邮件的完整性!


2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。

私有CA的意义:对于一般企业来说,申请在互联网中被信任的CA证书过于昂贵。因此,如果只是用于企业内部服务器的认证,仅仅需要通过openssl来搭建私有ca即可。

###############################################################################

私有CA相关文件的作用

[[email protected] ~]# less /etc/pki/tls/openssl.cnf 
[ CA_default ]                          #默认CA配置用于在签发证书时,未指定相关参数时候,调用默认参数!
dir             = /etc/pki/CA           # openssl使用yum安装后,所有证书相关的内容都在该目录下
certs           = $dir/certs            # 发行的证书保存位置
crl_dir         = $dir/crl              # 撤销的证书保存位置
database        = $dir/index.txt        # 证书索引数据库
#unique_subject = no                    # 允许不同的证书拥有相同的subject
new_certs_dir   = $dir/newcerts         # 新发行证书的保存位置
certificate     = $dir/cacert.pem       # CA证书
serial          = $dir/serial           # 证书签发序列
crlnumber       = $dir/crlnumber        # 已经撤销的证书                         
crl             = $dir/crl.pem          # 当前的撤销证书
private_key     = $dir/private/cakey.pem# CA的私钥
RANDFILE        = $dir/private/.rand    # 私钥的随机数文件
x509_extensions = usr_cert




CA服务器端环境的部署

[[email protected] private]# rpm -qa openssl*                       #检查opennssl软件包是否安装
openssl-1.0.1e-42.el6_7.4.x86_64
openssl-devel-1.0.1e-42.el6_7.4.x86_64
[[email protected] ~]# cd /etc/pki/CA/private/
[[email protected] private]# (umask 077;openssl genrsa -out cakey.pem 2048)     
                                                                #在子shell中创建CA的私钥
Generating RSA private key, 2048 bit long modulus
..................+++
..........................
[[email protected] private]# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365
                                                                 #生成自签证书
##################################################################################
此处如使用-keyout myCAkey.pem 参数可以指定生成ca的私钥,而省去前一步中通过genrsa生成私钥的步骤!
此处如使用-newkey rsa:2048 代替-new选项,此参数可以指定生成的CA私钥的长度,同时生成一个自签证书的请求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shanghai 
Locality Name (eg, city) [Default City]:Shanghai  
Organization Name (eg, company) [Default Company Ltd]:sbc
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:Caserver     #此必须要填,不可省略!且必须要和CA主机名相同!
Email Address []:[email protected]
[[email protected] CA]# touch index.txt                              #创建CA缩影数据库
[[email protected] CA]# touch serial                                 #创建签署证书编号文件   
[[email protected] CA]# echo 01 >serial                              #设定编号文件的初始值
[[email protected] CA]# cat serial       
01


客户端环境的部署:

[[email protected] ~]# mkdir /etc/httpd/ssl
[[email protected] ~]# cd /etc/httpd/ssl/
[[email protected] ssl]# rpm -qa openssl*                             #检查opennssl软件包是否安装
openssl-1.0.1e-42.el6_7.4.x86_64
openssl-devel-1.0.1e-42.el6_7.4.x86_64
[[email protected] ssl]# (umask 077;openssl genrsa -out httpCert.pem) #在子shell中创建主机的私钥
[[email protected] ssl]# openssl req -new -key httpCert.pem -out httpCert.csr -days 365
                                                                #创建证书申请文件
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN  
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:nichiyu
Organizational Unit Name (eg, section) []:Manage
Common Name (eg, your name or your server's hostname) []:www.nichiyu.net
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[[email protected] ~]# scp /etc/httpd/ssl/httpCert.csr 192.168.230.116:/etc/pki/CA/tmp
                                                                        #将证书申请发送给CA
[email protected]'s password: 
httpCert.csr                                                             100%  708     0.7KB/s   00:00

CA服务器端签署客户端的证书申请

[[email protected] CA]# openssl ca -in /etc/pki/CA/tmp/httpCert.csr -out /etc/pki/CA/newcerts/httpCert.crt -days 1000                              #签发收到的证书申请
#################################################################################

 其余未使用的重要参数:
 -cert                                                #手动指定CA的证书
 -keyfile                                             #手动指定CA的私钥

Using configuration from /etc/pki/tls/openssl.cnf
unable to load number from /etc/pki/CA/serial
error while loading serial number
140134958831432:error:0D066096:asn1 encoding routines:a2i_ASN1_INTEGER:short line:f_int.c:215:
[[email protected] CA]# echo 01 >serial
[[email protected] CA]# openssl ca -in /etc/pki/CA/tmp/httpCert.csr -out /etc/pki/CA/newcerts/httpCert.crt -days 1000
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 25 03:05:51 2016 GMT
            Not After : Jul 22 03:05:51 2019 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = shanghai
            organizationName          = nichiyu
            organizationalUnitName    = Manage
            commonName                = www.nichiyu.net
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                9F:3A:2B:E5:FC:B2:0D:D8:D9:E3:71:FD:AA:49:07:D2:20:00:B1:A4
            X509v3 Authority Key Identifier: 
                keyid:7F:49:A9:12:74:FE:0F:32:B8:57:C8:CF:6C:AE:2D:5B:3B:24:FC:A4
Certificate is to be certified until Jul 22 03:05:51 2019 GMT (1000 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


CA将签署的证书返还给申请者

[[email protected] CA]# scp newcerts/httpCert.crt 192.168.230.120:/etc/httpd/ssl/
The authenticity of host '192.168.230.120 (192.168.230.120)' can't be established.
RSA key fingerprint is 84:60:12:a0:ab:1e:f5:ca:b6:6c:7f:70:8c:bf:f7:05.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.230.120' (RSA) to the list of known hosts.
[email protected]'s password: 
httpCert.crt                                                             100% 3761     3.7KB/s   00:00

3、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)

(1)、能够对一些主机名进行正向解析和逆向解析;

(2)、对子域cdn.magedu.com进行子域授权,子域负责解析对应子域中的主机名;

(3)、为了保证DNS服务系统的高可用性,请设计一套方案,并写出详细的实施过程实

实验环境: DNS:192.168.230.121    DNS(slave):192.168.230.122

webserver:192.168.230.120            CAserver:192.168.230.116         subDNS:192.168.230.123


DNS服务通过bind9实现,通过yum安装后,主要的文件分布如下:


服务脚本:         /etc/rc.d/init.d/named

主要配置文件:     /etc/named.rfc1912.zones";

                /etc/rndc.key

解析库文件:       /var/named/ZONE_NAME.ZONE


############################################################################


DNS 主服务器部署

[[email protected] ~]# rpm -qa bind*                            #检查本地是否安装bind9相关组件
bind-chroot-9.8.2-0.47.rc1.el6_8.2.x86_64
bind-libs-9.8.2-0.47.rc1.el6_8.2.x86_64
bind-9.8.2-0.47.rc1.el6_8.2.x86_64
bind-sdb-9.8.2-0.47.rc1.el6_8.2.x86_64
bind-dyndb-ldap-2.3-8.el6.x86_64
bind-devel-9.8.2-0.47.rc1.el6_8.2.x86_64
bind-utils-9.8.2-0.47.rc1.el6_8.2.x86_64
[[email protected] ~]# vim /etc/named.conf                       #修改主配置文件
options {
        listen-on port 53 { 127.0.0.1;192.168.230.121;};      #添加监听IP
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };                             #任何主机都可以查询解析
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
[[email protected] ~]# vim /etc/named.rfc1912.zones            #在区域配置文件中添加新区域
......................
zone "magedu.com" IN {
        type master;
        file "magedu.com.ZONE"
};                                                          #正向解析区域
zone "230.168.192.in-addr.arpa" IN {                        #反向解析区域
        type master;
        file "192.168.230.ZONE";
};


[[email protected] ~]# vim /var/named/magedu.com.ZONE

$ORIGIN magedu.com.                    #结尾的.非常重要,不能漏掉,代表*域!
$TTL 100
@     IN     SOA  ns1.magedu.com. wuuzhenliang.magedu.com. (
                                    2016102501  
#  代表这个Zone的***。供Slave DNS判断是否从Master DNS获取新数据。每次Zone文件更新,都需要修改Serial数值。20161025为当前日期,01代表修订号
                                    1H      #代表slave DNS服务器多久向主服务器发起一起刷新请求,在bind的notify功能开启时候无意义
                                    15      #代表slave DNS在一起请求同步失败以后重试的时间
                                    10H     #代表slave DNS在多久未获得祝福器响应后不再发起重试请求
                                    1H      #代表slave DNS否定回答的持续时间
)
          IN     NS   ns1
          IN     NS   ns2
          IN     MX  10   mail
mail      IN     A    192.168.230.130
ns1       IN     A    192.168.230.121
ns2       IN     A    192.168.230.122
www       IN     A    192.168.230.120
web       IN     CNAME www
ops       IN     NS   ns1.ops               #定义子域ops.magedu.com
ns1.ops   IN     A    192.168.230.123
[[email protected] ~]# vim /var/named/192.168.230.ZONE   
$ORIGIN 230.168.192.in-addr.arpa.
$TTL 100
@     IN     SOA  ns1.magedu.com. wuzhenliang.magedu.com. (
                                    2016102501              #
                                    1H
                                    15
                                    10H
                                    1H
)
      IN     NS   ns1.magedu.com.                            #此处的域名必须要填全
120   IN     PTR  www.magedu.com.
[[email protected] ~]# named-checkconf                           #检查配置是否正确
[[email protected] ~]# named-checkzone "magedu.com" /var/named/magedu.com.ZONE 
zone magedu.com/IN: loaded serial 2016102501
OK
[[email protected] named]# rndc reload                    
server reload successful
[[email protected] ~]# dig -t A www.magedu.com @192.168.230.121   #测试正向解析是否正常
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> -t A www.magedu.com @192.168.230.121
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37984
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.magedu.com.                        IN      A
;; ANSWER SECTION:
www.magedu.com.         100     IN      A       192.168.230.120
;; AUTHORITY SECTION:
magedu.com.             100     IN      NS      ns1.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         100     IN      A       192.168.230.121
;; Query time: 11 msec
;; SERVER: 192.168.230.121#53(192.168.230.121)
;; WHEN: Tue Oct 25 15:05:04 2016
;; MSG SIZE  rcvd: 82
[[email protected] ~]# dig -x 192.168.230.120 @192.168.230.121    #测试反向解析是否正常
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 192.168.230.120 @192.168.230.121
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50351
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;120.230.168.192.in-addr.arpa.  IN      PTR
;; ANSWER SECTION:
120.230.168.192.in-addr.arpa. 100 IN    PTR     www.magedu.com.
;; AUTHORITY SECTION:
230.168.192.in-addr.arpa. 100   IN      NS      ns1.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         100     IN      A       192.168.230.121
;; Query time: 43 msec
;; SERVER: 192.168.230.121#53(192.168.230.121)
;; WHEN: Wed Oct 26 09:01:42 2016
;; MSG SIZE  rcvd: 108


DNS从服务器部署:

1.主配置文件
options {
        listen-on port 53 { any;};    
        listen-on-v6 port 53 { ::1; };             
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
        ......

2.区域配置文件

[[email protected] ~]# vim /etc/named.rfc1912.zones 
.......
zone "magedu.com" IN {
        type slave;
        masters { 192.168.230.121; };
        file "slaves/magedu.com.ZONE";                          #解析库文件名必须与主nds上的解析库文件名相同!
};


在设置的主从dns同步时间达到后,查看同步情况

[[email protected] ~]# ll /var/named/slaves/
total 8
-rw-r--r--. 1 named named 388 Oct 26 13:21 192.168.230.ZONE
-rw-r--r--. 1 named named 474 Oct 26 13:21 magedu.com.ZONE


DNS子服务器部署:

[[email protected] ~]# vim /var/named/ops.magedu.com.ZONE
$ORIGIN ops.magedu.com.
$TTL 100
@         IN     SOA  ns1.ops.magedu.com. wuzhenliang.ops.magedu.com. (
                                    2016102501
                                    10M
                                    1H
                                    10H
                                    1H
)
          IN     NS   ns1
          IN     NS   ns2
ns1       IN     A    192.168.230.123
ns2       IN     A    192.168.230.124
www       IN     A    192.168.230.125
web       IN     CNAME www
[[email protected] ~]# dig -t A www.ops.magedu.com @192.168.230.123  #在CA服务器上测试解析webServer的IP地址
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.ops.magedu.com @192.168.230.123
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40889
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.ops.magedu.com.            IN      A
;; ANSWER SECTION:
www.ops.magedu.com.     100     IN      A       192.168.230.125
;; AUTHORITY SECTION:
ops.magedu.com.         100     IN      NS      ns1.ops.magedu.com.
ops.magedu.com.         100     IN      NS      ns2.ops.magedu.com.
;; ADDITIONAL SECTION:
ns1.ops.magedu.com.     100     IN      A       192.168.230.123
ns2.ops.magedu.com.     100     IN      A       192.168.230.124
;; Query time: 0 msec
;; SERVER: 192.168.230.123#53(192.168.230.123)
;; WHEN: Wed Oct 26 14:18:45 2016
;; MSG SIZE  rcvd: 120


DNS的高可用方案

  1. 对于仅用于解析企业内部资源的DNS来说,一般的主从DNS架构就能满足需求

  2. 对于解析的资源位于不用的物理位置,特别是两处的网络接入资源由不同的ISP来提供时,则可通过bind9的view功能来实现DNS的高可用,方案如下


部署环境拓扑

Linux第九周作业

[[email protected] named]# vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        dnssec-enable no;
        dnssec-validation no;
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};
acl inet {                                                     #定义3个acl用于view控制范围
        192.168.232.0/24;
};
acl net229 {
        192.168.230.122;                                       #为测试的方便。。此处仍定义为230网段的地址
acl net230 {
        192.168.230.116;                                       #定义为另一个230网段的地址
};
view  "." {
match-clients { inet; };                                       #只有来源是192.168.232网段的请求才会去根域查找
zone "." IN {
         type hint;
         file "named.ca";
};
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


#####################################################################################

[[email protected] named]# vim /etc/named.rfc1912.zones 
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};
};
view "net230" {
match-clients { net230; };
zone "magedu.com" IN {
        type master;
        file "magedu.com.ZONE";
};
zone "230.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.230.ZONE";
        allow-transfer { 192.168.230.122; };
};
};
view "net229" {                                                   #定义区域magedu.com的另一个解析文件                      
match-clients { net229; };
zone "magedu.com" {
        type master;
        file "magedu.com.other.ZONE";
};
};

######################################################################################

[[email protected] named]# vim /var/named/magedu.com.other.ZONE$ORIGIN magedu.com.
$TTL 100
@         IN     SOA  ns1.magedu.com. wuzhenliang.magedu.com. (
                                    2016102507
                                    10M
                                    1H
                                    10H
                                    1H
)
          IN     NS   ns1
          IN     NS   ns2
          IN     MX  10   mail
mail      IN     A    192.168.229.130                               #解析到229网段的地址
ns1       IN     A    192.168.230.121
ns2       IN     A    192.168.230.122
www       IN     A    192.168.229.120                               #解析到229网段的地址
web       IN     CNAME www
ops       IN     NS   ns1.ops
ns1.ops   IN     A    192.168.230.123

########################################################################################

在不同终端上测试解析结果

[[email protected] ~]# dig -t A www.magedu.com @192.168.230.121
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A www.magedu.com @192.168.230.121
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21852
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.magedu.com.                        IN      A
;; ANSWER SECTION:
www.magedu.com.         600     IN      A       192.168.230.120                  #得到230网段的地址
;; AUTHORITY SECTION:
magedu.com.             600     IN      NS      ns1.magedu.com.
magedu.com.             600     IN      NS      ns2.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         600     IN      A       192.168.230.121
ns2.magedu.com.         600     IN      A       192.168.230.122
;; Query time: 24 msec
;; SERVER: 192.168.230.121#53(192.168.230.121)
;; WHEN: Fri Oct 28 13:45:59 2016
;; MSG SIZE  rcvd: 116
[[email protected] ~]# dig -t A www.magedu.com @192.168.230.121
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> -t A www.magedu.com @192.168.230.121
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10152
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;www.magedu.com.                        IN      A
;; ANSWER SECTION:
www.magedu.com.         100     IN      A       192.168.229.120                  #得到229网段的解析地址
;; AUTHORITY SECTION:
magedu.com.             100     IN      NS      ns1.magedu.com.
magedu.com.             100     IN      NS      ns2.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         100     IN      A       192.168.230.121
ns2.magedu.com.         100     IN      A       192.168.230.122
;; Query time: 1 msec
;; SERVER: 192.168.230.121#53(192.168.230.121)
;; WHEN: Fri Oct 28 13:46:53 2016
;; MSG SIZE  rcvd: 116


4、请描述一次完整的http请求处理过程

域名一个完整的httpd请求和处理工程大致包括以下的几步,

  1. 客户端通过DNS域名解析,得到请求域名对应的web服务器端IP地址 TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户

  2. 客户端和服务器端建立TCP链接

    TCP链接的建立需要通过客户端与服务器端的三次握手来实现。首先客户端发送连接请求报文(SYN),服务器端接受连接后回复确认报文(ACK),并为这次连接分配资源。客户端接收到ACK报文后也向服务器端发送确认报文(ACK),并分配资源,这样TCP连接就建立了。

3.  TCP链接建议以后,客户端开始向服务器端发送http请求报文。请求报文报文的格式如下

<method>  <request-URL> <version>

<headers>

<entity-body>

请求报文包括请求的方法,请求的url,还是http的版本号,一般来说请求报文不包括实体内容。


4. Web服务器应答 
客户机向服务器发出请求后,服务器会响应客户端的请求,发送响应报文(reponse)给客户端,

reponse报文的格式

<version> <status> <reason-phrase>

<headeres>

<entity-body>


status(状态码)

1XX:100-101 信息提示

2XX:200-206  成功

3XX:300-305  重定向

4XX:400-415 错误类信息,客户端错误

5XX:500-505  错误类型。服务器错误

常用的状态码

200:成功

301(永久重定向):请求的资源已经永久被删除,但在响应报文中通过location指明资源现在所处的位置

302(临时重定向):请求的资源已经永久被删除,但在响应报文中通过location指明资源现在所处的临时位置

303:客户端发起条件式请求(请求的资源已在本地缓存,请求服务器端确认有无变化—),服务器发现客户端请求的内容自从上次以后未发生变化。发送303给客户端!

401: 需要输入帐号和密码认证访问资源:Unauthorize

403: 请求被禁止(无权限访问)

404: 服务器无法找到客户端请求的资源:not found

500: 服务器内部错误   Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应:bad gateway


5.  一般情况下,当客户端需要请求的资源全部结束后,就要申请关闭TCP连接,然而如果浏览器或者服务器在其头信息包含Connection:keep-alive,则TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

TCP链接的中断是通过客户端与服务器端4次交互来实现。过程大致为Client端发起中断连接请求(FIN报文)。服务器端接到FIN报文后,回复ACK,确认收到中断请求。这时客户端就进入FIN_WAIT状态,继续等待服务器端的FIN报文。当服务器端确定数据已发送完成,则向客户端端发送FIN报文,客户端收到FIN报文后,继续等待了一段时间依然没有收到回复,则证明服务器端已正常关闭,于是TCP中断连接。



5、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。

   httpd支持的处理模型包括prefork,workor,event,他们都属于多路处理模块(MPM)其中event只有在httpd2.4才是稳定的版本



1)prefork采用预派生子进程方式,用单独的子进程来处理不同的请求,进程之间彼此独立。即一个进程响应一个httpd请求!

 Prefork适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。



httpd.conf中prefork的配置信息:

<IfModule prefork.c>                          

StartServers       8                              #服务启动后httpd父进程创建的子进程数,只有子进程才响应http请求。

MinSpareServers    5                              #最小的空闲进程数

MaxSpareServers   20                              #最大的空闲进程数

ServerLimit      256                              #在服务器的生命周期内MaxClient的最大值,此处必须设置>=MaxClients

MaxClients       256                              #可以同时相应的最大http请求数

MaxRequestsPerChild  4000                         #每个进程可以处理的最大http请求数.此处如果设置为0,则代表子进程永不销毁

</IfModule>


2.Worker 
   相对于prefork,worker是支持线程进程混合模型,使用线程来处理http请求,一个线程响应一个http请求。系统资源的开销要小于基于进程的服务器。

   由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

httpd.conf中worker的配置信息:

<IfModule worker.c>

StartServers         4                          #服务启动后httpd父进程创建的子进程数,   

MaxClients         300                          #可以同时相应的最大http请求数

MinSpareThreads     25                          #最小的空闲线程

MaxSpareThreads     75                          #最大的空闲线程

ThreadsPerChild     25                          #每个进程包含的worker线程数

MaxRequestsPerChild  0                          #每个进程可以处理的最大请求数

</IfModule>



3.event

   是基于信号驱动I/O 通知机制的模型。工作方式是:一个线程响应多个http请求。event的工作模型要优于prefork和worker.

    Event MPM可以用来处理更高负载,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。但是Event MPM不能使用https。 

httpd.conf中event的配置信息:

<IfModule mpm_event_module>

    StartServers             2                  #服务启动的时候创建的子进程数,该子进程共生成25个线程等待客户端的连接请求

    MinSpareThreads         25                  #线程池中保持最少25个空闲线程

    MaxSpareThreads         75                  #线程池中保持最多75个空闲线程

    ThreadsPerChild         25                  #每个进程最多可以生成25个线程

    MaxRequestWorkers      150                  #可同时处理的最大的http请求数

    MaxConnectionsPerChild   0                  #每个线程能够处理的用户请求数,0 表示不做限定

</IfModule>


6、建立httpd服务器(基于编译的方式进行),要求:

提供两个基于名称的虚拟主机:

(a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;

(b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;

(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;

(d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);

#########################################################################################

一.检查apache2.4安装环境环境

apache2.4需要apr库的支持,且版本需在1.4以上,centOS6自带的apr只有1.39,因此在安装apache-2.4之前,需要先安装新版本的apr以及apr-util,此外还需要prc-deve库的支持。

解决依赖关系

[[email protected] apr-1.5.2]# yum grouplist|grep "Development"    #检查编译所依赖的软件包,如果未安装,则yum groupinstall “包名” 安装
   Development tools
   Additional Development
   Desktop Platform Development
   Server Platform Development


二.编译安装httpd2.4所依赖的软件包


httpd2.4依赖于更高版本的apr和apr-util,apr全称为apache portable runtime(可认为是apache的虚拟机)。它是个能够让Apache跨平台工作的工具,是个底层库,安装上apr后。如果在win和linux上安装上apr后,Apache的同一个代码,即可以在win上运行也可在linux上运行;

  1. 安装apr-1.5.2.tar.gz

[[email protected] ~]# wget http://apache.fayea.com/apr/apr-1.5.2.tar.gz
[[email protected] ~]# tar xf apr-1.5.2.tar.gz
[[email protected] ~]# cd apr-1.5.2
[[email protected] apr-1.5.2]# ./configure --prefix=/usr/local/apr
[[email protected] apr-1.5.2]# make && make install

2.安装apr-util-1.5.4

[[email protected] ~]# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz 
[[email protected] ~]# tar xf apr-util-1.5.4.tar.gz
[[email protected] ~]# cd apr-util-1.5.4
[[email protected] apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[[email protected] apr-util-1.5.4]#make && make install

三.编译httpd-2.4.23.tar.gz

[[email protected] ~]# wget http://apache.fayea.com/httpd/httpd-2.4.23.tar.gz
[[email protected] ~]# tar xf httpd-2.4.23.tar.gz
[[email protected] ~]# cd httpd-2.4.23
[[email protected] httpd-2.4.23]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
--prefix=/usr/local/apache 安装路径
--sysconfdir=/etc/httpd24 配置文件路径
--enable-so 允许运行时加载DSO模块
--enable-ssl 如果不加载将无法使用使用https
--enable-cgi 允许使用cgi脚本
--enable-rewrite 支持URL重写机制
--with-zlib 支持网络通用压缩库
--with-pcre 支持pcre
--with-apr=/usr/local/apr 指定apr的安装路径
--with-apr-util=/usr/local/apr-util/ 指定apr-util的安装路径
--enable-modules=most 启用大多数常用的模块
--enable-mpms-shared=all 启用MPM所有支持的模式
--with-mpm=prefork 默认使用prefork模式
[[email protected] httpd-2.4.23]#make &&make install

四、安装后所需配置;

1、导出头文件,以软连接的方法实现

[[email protected] ~]# ln -sv /usr/local/apache/include/ /usr/include/httpd
`/usr/include/httpd' -> `/usr/local/apache/include/'



2、导出二进制程序

[[email protected] ~]# vim /etc/profile.d/httpd24.sh
export PATH=/usr/local/apache/bin:$PATH
[[email protected] ~]. /etc/profile.d/httpd24.sh


3、导出man文件

[[email protected] ~]# vim /etc/man.config
 MANPATH /usr/local/apache/man
[[email protected] ~]# man -M /usr/local/apache/man httpd              #设置httpd的man手册搜索路径


4、启动httpd

[[email protected] ~]# apachectl start                  
[[email protected] ~]# ss -tlun|grep 80                          #测试80端口是否开启监听
tcp    LISTEN     0      128                   :::80                    :::*

5、配置虚拟主机

[[email protected] ~]# vim /etc/httpd24/httpd.conf 
........
#DocumentRoot "/usr/local/apache/htdocs"                       #注释掉中心主机
#Virtual hosts
Include /etc/httpd24/extra/httpd-vhosts.conf                   #在主配置文件中导入虚拟主机配置文件!
[[email protected] ~]# vim /etc/httpd24/extra/httpd-vhosts.conf 
<Directory "/web/vhosts/">
    Options Indexes FollowSymLinks                             #启用索引,符号链接跟踪
    Require all granted                                        #对所有的用户授权可以访问!httpd2.4版本必备
</Directory>
<VirtualHost 192.168.230.120:80>
    ServerAdmin [email protected]
    DocumentRoot "/web/vhosts/www1"
    ServerName www1.stuX.com
    ErrorLog "/var/log/httpd24/www1.err"
    CustomLog "/var/log/httpd24/www1.access" common
    <Location /server-status>
       SetHandler server-status        
       Auth Type Basic                                    #用户认证的类型
       AuthName "status"                                  #安全域的名称
       AuthUserFile "/usr/local/apache/.htpasswd"         #认证用户密码存放位置
       Require valid-user                                 #允许合法的用户访问
    </Location>
</VirtualHost>
<VirtualHost 192.168.230.120:80>
    ServerAdmin [email protected]
    DocumentRoot "/web/vhosts/www2"
    ServerName www2.stuX.com
    ErrorLog "/var/log/httpd24/www2.err"
    CustomLog "/var/log/httpd24/www2.access" common
</VirtualHost>
[[email protected] ~]# htpasswd -m -c /usr/local/apache/.htpasswd wuzhenliang  #添加认证的用户信息,-c自动创建passwordfile,因此仅在创建第一个用户时候使用。
[[email protected] ~]# vim /etc/hosts                      #添加两台虚拟主机的域名映射     #
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.230.120 www1.stuX.com www2.stuX.com
[[email protected] ~]# curl www1.stuX.com                  #测试虚拟主机
website www1 is working!
[[email protected] ~]# curl www2.stuX.com
website www2 is working!


7、为第6题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;

(1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu);

(2)设置部门为Ops,主机名为www2.stuX.com,邮件为[email protected]


一.CA服务器生成自签证书,并签署http服务器发来的证书签署请求,最后发还给http服务器,存放在/etc/httpd24/extra/ssl/httpd.crt

过程同题二,此处省略。http服务器发给CA签署的证书的内容中,国家,州,城市,组织必须相同,common name 中除了主机名以外的内容必须相同,不然CA服务器无法签署证书!


二.http服务器配置ssl相关内容,测试环境基于apache2.4

[[email protected] ~]# vim /etc/httpd24/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so   #这两项模块必须加载
LoadModule ssl_module modules/mod_ssl.so                       #这两项模块必须加载
Include /etc/httpd24/extra/httpd-ssl.conf                      #将ssl的配置文件载入主配置文件中
[[email protected] ~]# vim /etc/httpd24/extra/httpd-ssl.conf      
SSLCertificateFile "/etc/httpd24/extra/ssl/httpkey.crt"        #设置http服务器端的证书位置
SSLCertificateKeyFile "/etc/httpd24/extra/ssl/httpkey.pem"     #设置http服务器端的证书私钥
[[email protected] ~]# apachectl restart
[[email protected] ~]# ss -tuln                                   #检测端口状态
Netid State      Recv-Q Send-Q                   Local Address 
tcp   LISTEN     0      128                                 :::80                                 :::*     
......
tcp   LISTEN     0      128                                 :::443                                :::*


[[email protected] ~]# sz /etc/pki/CA/cacert.pem     #将CA证书传给测试的客户端

最后在windows客户端通过浏览器https访问http服务器。

Linux第九周作业

遇到的错误:

AH00526: Syntax error on line 92 of /etc/httpd24/extra/httpd-ssl.conf:

SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

解决的方法:在httpd.conf加载shmcb模块


8、建立samba共享,共享目录为/data,要求:(描述完整的过程)

1)共享名为shared,工作组为magedu;

2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;

3)添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;

4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;

5)此samba共享服务仅允许来自于172.16.0.0/16网络的主机访问;


[[email protected] ~]# rpm -qa samba                          #检查是否安装samba相关组件
[[email protected] ~]# yum install samba -y 
[[email protected] ~]# for user in gentoo centos ubuntu;do useradd $user;echo $user|passwd --stdin $user;done 
[[email protected] ~]# groupadd develop 
[[email protected] ~]# usermod -G develop gentoo 
[[email protected] ~]# usermod -G develop centos 
[[email protected] ~]# pdbedit -a centos
[[email protected] ~]# pdbedit -a ubuntu
[[email protected] ~]# pdbedit -a gentoo
[[email protected] ~]# mkdir /data
[[email protected] ~]# chmod 777 /data                        #设置共享目录的文件系统权限为全放开
[[email protected] ~]# vim /etc/samba/smb.conf
        workgroup = magedu                             #共享组名称
        server string = Samba Server Version %v
        netbios name = MYSERVER
        hosts allow = 172.16.0.0/16                    #允许访问的ip网段
        ...... 
        security = user                                #验证模式为samba数据库验证
        passdb backend = tdbsam
[data]
        comment =shared                  
        path = /data        
        browseable = yes                               #允许所有用户可查看次目录
        writable = yes                                 
        write list = +develop                          #允许develop组的用户访问
[[email protected] ~]# smbclient //192.168.1.6/data -U gentoo     #验证
Enter gentoo's password: 
Domain=[MAGEDU] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> lcd /etc
smb: \> put passwd
putting file passwd as \passwd (1123.9 kb/s) (average 1124.0 kb/s)
smb: \> exit
[[email protected] ~]# smbclient //192.168.1.6/data -U ubuntu      #验证
Enter ubuntu's password: 
Domain=[MAGEDU] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \> lcd /etc
smb: \> put passwd
NT_STATUS_ACCESS_DENIED opening remote file \passwd



9、搭建一套文件vsftp文件共享服务,共享目录为/ftproot,要求:(描述完整的过程)


1)基于虚拟用户的访问形式;

2)匿名用户只允许下载,不允许上传;

3)禁锢所有的用户于其家目录当中;

4)限制最大并发连接数为200:;

5)匿名用户的最大传输速率512KB/s

6)虚拟用户的账号存储在mysql数据库当中。

7)数据库通过NFS进行共享。


一.mysql,pam,vsftpd相关软件包的安装

[[email protected] ~]# yum install vsftpd -y
[[email protected] ~]# yum install mysql mysql-server mypam-mysql -y
[[email protected] ~]# service vsftpd start
[[email protected] ~]# service mysqld start
[[email protected] ~]# ss -tlun|grep "21"          
tcp    LISTEN     0      32                     *:21                    *:*
[[email protected] ~]# ss -tlunp|grep "3306" 
;
tcp    LISTEN     0      50                     *:3306                  *:*      users:(("mysqld",1824,10))


二.准备数据库及相关表

mysql> create database vsftpd;mysql> grant select on vsftpd.* to [email protected] identified by 'vsftpd';mysql> grant select on vsftpd.* to [email protected] identified by 'vsftpd';    mysql> flush privileges;    mysql> use vsftpd;    mysql> create table users (     id int AUTO_INCREMENT NOT NULL,     name char(20) binary NOT NULL,    password char(48) binary NOT NULL,     primary key(id)     );
mysql> insert into users(name,passwword) values ('wuzhenliang',password('vsftpd'));
mysql> insert into users(name,passwword) values ('wangyan',password('vsftpd'));

   

三.vsftp服务器相关配置

[[email protected] ~]#mkdir -pv /ftproot                             #创建ftp根目录
[[email protected] ~]#chown vuser.vuser /ftproot
[[email protected] ~]useradd vuser -s /sbin/nologin -d /var/ftproot  #创建ftp虚拟用户
[[email protected] ~]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES                               #允许匿名用户登录
anon_umask=022                                                #匿名用户创建的文件权限默认为644!此处即是之后虚拟用户上传文件获得的默认权限,不设置的话默认为700,将导致上传的文件无法读取和下载
local_enable=YES                                              #允许系统用户登录
write_enable=NO                                               #系统用户拥有写权限     
anon_upload_enable=NO                                         #匿名用户不允许上传
anon_mkdir_write_enable=NO                                    #匿名用户不允许创建目录anon_other_write_enable=NO                                      #匿名用户不允许删除文件,目录
chroot_local_user=YES                                         #将用户禁锢在自己的家目录中
guest_enable=YES           
guest_username=vuser                                          #指明虚拟用户映射到的系统用户listen=YESpam_service_name=vsftpd.mysql                   #指明使用/etc/pam.d/vsftpd.mysql 来认证
anon_max_rate=512000                                          #匿名用户的最大传输速率为200kb/s
max_client=200                                                #最大的并发数为200
user_config_dir=/etc/vsftpd/vusers_config                     #设置虚拟用户的配置文件路径(可设定某虚拟用户拥有上传和删除的权限,只需要在虚拟用户的配置文件中做相关设定即可
[[email protected] ~]#mkdir /etc/vsftpd/vusers_config/
[[email protected] ~]#cd /etc/vsftpd/vusers_config/
[[email protected] ~]#vim wuzhenliang
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

四.共享mysql数据库


nfs服务器端部署

-----------------------------------------------------------------------------

[[email protected] ~]# yum install nfs-utils rpcbind      #选择另一台主机作为nfs的服务器安装nfs相关
的组件
[[email protected] ~]# service rpcbind start              #按照顺序启动rpcbind以及nfs服务
[[email protected] ~]# service nfs start   
[[email protected] ~]# mkdir /nfs/                        #创建共享目录
[[email protected] ~]# chown nfsnobody.nfsnobody /nfs     #更改共享目录属主属组
[[email protected] ~]# vi /etc/exports                    #编辑nfs主配置文件
/nfs 192.168.230.0/24(rw,sync,no_root_squance)   #nfs服务器参数设置,no_root_squance任何登录该共享目录的用户
[ro[email protected] ~]# showmount -e localhost             #查看本机nfs的共享目录


nfs客户端部署

------------------------------------------------------------------------------------------

[[email protected] ~]# yum install nfs-utils rpcbind      #在vsftpd与mysql的同一台主机上安装nfs相关组件,作为nfs的客户端
[[email protected]]# mount -t nfs 192.168.230.117:/nfs/mydata /var/mysql/


五.测试部署的结果

[[email protected] ~]# ftp 192.168.230.123
Connected to 192.168.230.123 (192.168.230.123).
220 (vsFTPd 2.2.2)
Name (192.168.230.123:root): wuzhenliang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.  
ftp> put www.txt                                                   #文件下载测试
local: www.txt remote: www.txt
227 Entering Passive Mode (192,168,230,123,74,144).
150 Ok to send data.
226 Transfer complete.
118 bytes sent in 0.0671 secs (1.76 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,230,123,121,250).
150 Here comes the directory listing.
drwx------    3 504      505          4096 Nov 16 05:46 132
drwx------    3 504      505          4096 Nov 16 05:46 Notes
-rw-------    1 504      505           118 Nov 16 07:29 www.txt 
ftp> get www.txt                                                  #文件下载测试
local: www.txt remote: www.txt
227 Entering Passive Mode (192,168,230,123,21,154).
150 Opening BINARY mode data connection for www.txt (0 bytes).
226 Transfer complete.