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

A给B发送一份数据:只能B看到,不能被篡改。
 
A:
1)用单向加密提取数据的特征码。
2)用自己的私钥加密这个特征码并放在原有数据的后面。
3)用B的公钥加密,发送给B,于是只有B能解密。
 
B:
1)首先用自己的私钥解密,能解密,则身份得到验证。
2)用对方公钥解密特征码,得到特征码。
3)用同样的算法,对特征码进行加密,对比特征码是否相同,如果相同,则内容是完整的。


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

openssl是一个开源程序的套件、这个套件有三个部分组成:
libcryto:具有通用功能的加密库,里面实现了众多的加密库。
libssl:实现ssl机制的,它是用于实现TLS/SSL的功能。
openssl:多功能命令行工具,它可以实现加密解密,甚至还可以当CA来用,可以让你创建证书、吊销证书。

默认情况ubuntu和CentOS上都已安装好openssl。CentOS 6.x 上有关ssl证书的目录结构:
/etc/pki/CA/
    newcerts    存放CA签署(颁发)过的数字证书(证书备份目录)
     private     用于存放CA的私钥
     crl         吊销的证书

/etc/pki/tls/
    cert.pem    软链接到certs/ca-bundle.crt
    certs/      该服务器上的证书存放目录,可以房子自己的证书和内置证书
    ca-bundle.crt    内置信任的证书
    private    证书密钥存放目录
    openssl.cnf    openssl的CA主配置文件


1)创建所需要的初始文件
[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial

2)创建CA密钥
[root@localhost CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
..........................................+++
...+++
e is 65537 (0x10001)

3)创建CA自签证书
选项:
    -new:生成新证书签署请求;
    -x509:专用于CA生成自签证书;
    -key:生成请求时用到的私钥文件;
    -days n:证书的有效期限;
    -out /PATH/TO/SOMECERTFILE:证书的保存路径
    
[root@localhost CA]#  openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
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) [AU]:CN
State or Province Name (full name) [Some-State]:HB
Locality Name (eg, city) []:WH
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HYS
Organizational Unit Name (eg, section) []:OPS
Common Name (e.g. server FQDN or YOUR name) []:www.ops.com
Email Address []:admin@ops.com

4)发证
(a)用到证书的主机生成证书请求
创建密钥
[root@localhost httpd]# mkdir /etc/httpd/ssl
[root@localhost httpd]# cd /etc/httpd/ssl
[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
.......................................................................+++
.......................

创建证书
[root@localhost ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
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) [AU]:CN
State or Province Name (full name) [Some-State]:HB
Locality Name (eg, city) []:WH
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HYS
Organizational Unit Name (eg, section) []:OPS
Common Name (e.g. server FQDN or YOUR name) []:www.ops.com
Email Address []:admin@ops.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:

(b)CA签署证书
[root@localhost ] cd /etc/pki
[root@localhost pki]#  openssl ca -in /etc/httpd/ssl/httpd.csr  -out /etc/pki/CA/certs/httpd.crt -days 365
Using configuration from /opt/CollabNet_Subversion/openssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 20 06:53:08 2016 GMT
            Not After : Oct 20 06:53:08 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HB
            organizationName          = HYS
            organizationalUnitName    = OPS
            commonName                = www.ops.com
            emailAddress              = admin@ops.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                53:9C:7B:40:0B:EE:DE:93:05:E7:D8:DC:8F:F1:9D:3B:5D:E2:33:40
            X509v3 Authority Key Identifier: 
                keyid:3E:7D:73:EA:D7:62:78:77:42:DA:10:D7:E9:BC:05:16:9B:A4:61:A7

Certificate is to be certified until Oct 20 06:53:08 2017 GMT (365 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


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

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

修改主配置文件
[root@localhost ~]# vim /etc/named.conf 
options {     //全局配置段
    listen-on port 53 { any; };    //修改为监听所有地址上的53号端口
    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相关功能
    dnssec-validation no;        //关闭dnssec相关功能
 
    /* Path to ISC DLV key */
//  bindkeys-file "/etc/named.iscdlv.key";    //关闭dnssec相关功能
 
//  managed-keys-directory "/var/named/dynamic";    //关闭dnssec相关功能
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
    type hint;
    file "named.ca";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";



DNS正向解析区域
1、定义区域
[root@localhost ]# vim /etc/named.rfc1912.zones 
zone "magedu.com." IN  {    //magedu.com是需要定义的正向区域
        type master;    //master 为主服务器
        file "magedu.com"; //文件名为/var/named/下的magedu.com
        allow-update { none; };  //不允许自动更新文件
};

2、添加区域解析库
[root@localhost # vim /var/named/magedu.com 
$TTL 1D
$ORIGIN magedu.com.

@       IN SOA  @    lf.magedu.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                IN      NS      ns1
                IN      NS      ns2
ns1.magedu.com. IN      A       192.168.122.94
ns2.magedu.com. IN      A       192.168.122.95

www             IN      A       192.168.122.94
ftp             IN      A       192.168.122.95


3、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
[root@localhost named]# named-checkzone  magedu.com.  /var/named/magedu.com 
zone magedu.com/IN: loaded serial 0
OK
3)设定解析库权限
[root@localhost named]# chown :named /var/named/magedu.com 
[root@localhost named]# ll /var/named/magedu.com 
-rw-r----- 1 root named 307 10月 20 16:00 /var/named/magedu.com


4、重启并测试
[root@localhost named]# service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]

[root@localhost named]# dig -t NS magedu.com. @127.0.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS magedu.com. @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24014
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;magedu.com.			IN	NS

;; ANSWER SECTION:
magedu.com.		86400	IN	NS	ns1.magedu.com.
magedu.com.		86400	IN	NS	ns2.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.122.94
ns2.magedu.com.		86400	IN	A	192.168.122.95

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 20 16:03:59 2016
;; MSG SIZE  rcvd: 96



DNS反向解析区域
1、定义区域
[root@localhost ]# vim /etc/named.rfc1912.zones
zone "122.168.192.in-addr.arpa" IN {  //122.168.192.in-addr.arpa是需要定义的反向区域
        type master;    //master 为主服务器
        file "magedu.arpa";  //文件名为/var/named/下的magedu.arpa
        allow-update { none; }; //不允许自动更新文件
};
2、添加区域解析库
[root@localhost] vim magedu.arpa 
$TTL 1D
$ORIGIN 122.168.192.in-addr.arpa.

@       IN SOA  @    lf.magedu.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                IN      NS      ns1.magedu.com.
                IN      NS      ns2.magedu.com.
                IN      NS      ns3.magedu.com.

94              IN      PTR     ns1.magedu.com.
95              IN      PTR     ns2.magedu.com.
94              IN      PTR     www.magedu.com.
95              IN      PTR     ftp.magedu.com.


3、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
指明区域名称,和区域数据文件的位置
[root@localhost named]# named-checkzone "122.168.192.in-addr.arpa." /var/named/magedu.arpa 
zone 122.168.192.in-addr.arpa/IN: loaded serial 0
OK
3)设定解析库权限
[root@localhost named]# chown :named /var/named/magedu.arpa 
[root@localhost named]# ll /var/named/magedu.arpa
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/magedu.arpa

4、重启并测试
[root@localhost named]# service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]

[root@localhost ~]# dig -x 192.168.122.94 @127.0.0.1
[root@localhost named]#  dig -x 192.168.122.94 @127.0.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -x 192.168.122.94 @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22490
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 2

;; QUESTION SECTION:
;94.122.168.192.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
94.122.168.192.in-addr.arpa. 86400 IN	PTR	www.magedu.com.
94.122.168.192.in-addr.arpa. 86400 IN	PTR	ns1.magedu.com.

;; AUTHORITY SECTION:
122.168.192.in-addr.arpa. 86400	IN	NS	ns1.magedu.com.
122.168.192.in-addr.arpa. 86400	IN	NS	ns2.magedu.com.
122.168.192.in-addr.arpa. 86400	IN	NS	ns3.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.122.94
ns2.magedu.com.		86400	IN	A	192.168.122.95

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 20 16:09:38 2016
;; MSG SIZE  rcvd: 173

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

子域授权
    在前的magedu.com.这个域中,添加一个子域,子域的域名为:cdn.magedu.com. ,该子域自己内部有自己的DNS服务器
    这样在父域的DNS服务器上实现对子域的解析,都交给子域自己去实现,而不是直接利用父域上添加相应的资源记录来实现。

1、修改ops.com.这个域的配置
[root@localhost ~]# vim /var/named/magedu.com  
$TTL 1D
$ORIGIN magedu.com.

@       IN SOA  @    lf.magedu.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                IN      NS      ns1
                IN      NS      ns2
cdn             IN      NS      ns3
ns1             IN      A       192.168.122.94
ns2             IN      A       192.168.122.95
ns3             IN      A       192.168.122.105

www             IN      A       192.168.122.94
ftp             IN      A       192.168.122.95

2、重启服务
[root@localhost ~]# service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]

3、修改子域配置文件
[root@localhost 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";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

[root@localhost named]# vim /etc/named.rfc1912.zones 
zone "cdn.magedu.com." IN {
        type master;
        file "cdn.magedu.com";
        allow-update { none; };
};

4、添加子域解析库
$TTL 1D
$ORIGIN cdn.magedu.com.
@       IN SOA  @ admin.163.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

        NS      ns1
ns1     A       192.168.122.105
www     A       192.168.122.105

5、检查配置文件语法和区域数据文件语法
1)检查配置文件
named-checkconf
2)检查解析库文件
[root@localhost ~]#  named-checkzone  "cdn.magedu.com."  /var/named/cdn.magedu.com
zone cdn.magedu.com/IN: loaded serial 0
OK

3)设定解析库权限
[root@localhost named]# chown :named /var/named/cdn.magedu.com 
[root@localhost named]# ll /var/named/cdn.magedu.com
-rw-r----- 1 root named 351 10月 18 14:32 /var/named/cdn.magedu.com

6、重启并测试
[root@yaojianju named]# service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]
[root@localhost named]# dig -t NS "cdn.magedu.com." @192.168.122.105

[root@localhost ~]# dig -t NS "cdn.magedu.com." @192.168.122.105

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS cdn.magedu.com. @192.168.122.105
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35905
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;cdn.magedu.com.			IN	NS

;; ANSWER SECTION:
cdn.magedu.com.		86400	IN	NS	ns1.cdn.magedu.com.

;; ADDITIONAL SECTION:
ns1.cdn.magedu.com.	86400	IN	A	192.168.122.105

;; Query time: 0 msec
;; SERVER: 192.168.122.105#53(192.168.122.105)
;; WHEN: Thu Oct 20 16:22:58 2016
;; MSG SIZE  rcvd: 66





7、父域测试是否能解析
[root@localhost named]# dig -t NS cdn.magedu.com. @127.0.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.1 <<>> -t NS cdn.magedu.com. @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41730
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;cdn.magedu.com.			IN	NS

;; ANSWER SECTION:
cdn.magedu.com.		86395	IN	NS	ns1.cdn.magedu.com.

;; ADDITIONAL SECTION:
ns1.cdn.magedu.com.	86395	IN	A	192.168.122.105

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Oct 20 16:27:37 2016
;; MSG SIZE  rcvd: 66

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

可以使用主从DNS来保障DNS服务器的高可用

主从复制:

1)应该为一台独立的名称服务器;

2)主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;

3)从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;

4)主服务器得允许从服务器作区域传送;

5)主从服务器时间应该同步,可通过ntp进行;

6)bind程序的版本应该保持一致;否则,应该从高,主低;


1、主服务器配置

[root@localhost ~]# vim /var/named/magedu.com
$TTL 1D  
$ORIGIN magedu.com.

@	IN SOA  @    lf.magedu.com (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum

		IN	NS      ns1
		IN	NS      ns2
cdn		IN	NS      ns3
ns1      	IN	A	192.168.122.94
ns2	        IN	A	192.168.122.95 ;从服务器IP
ns3	        IN	A	192.168.122.105

www		IN	A	192.168.122.94
ftp		IN	A	192.168.122.95


2、从服务器配置

[root@localhost ~]# 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;
//	dnssec-lookaside auto;

	/* Path to ISC DLV key */
//	bindkeys-file "/etc/named.iscdlv.key";

//	managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
	type hint;
	file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


[root@localhost ~]# vim /etc/named.rfc1912.zones 
zone "magedu.com." IN {
        type slave;
        file "slaves/magedu.com";
        masters { 192.168.122.94; };
};


3、重启并测试
[root@localhost ~]# service named restart
停止 named:.                                              [确定]
启动 named:                                               [确定]


[root@localhost ~]# cat /var/named/slaves/magedu.com 
$ORIGIN .
$TTL 86400	; 1 day
magedu.com		IN SOA	magedu.com. lf.magedu.com.magedu.com. (
				0          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	ns1.magedu.com.
			NS	ns2.magedu.com.
$ORIGIN magedu.com.
cdn			NS	ns3
ftp			A	192.168.122.95
ns1			A	192.168.122.94
ns2			A	192.168.122.95
ns3			A	192.168.122.105
www			A	192.168.122.94
[root@localhost ~]# ll /var/named/slaves/
总用量 4
-rw-r--r-- 1 named named 444 10月 24 09:03 magedu.com


[root@localhost ~]# dig -t NS "magedu.com." @192.168.122.95

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t NS magedu.com. @192.168.122.95
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21719
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;magedu.com.			IN	NS

;; ANSWER SECTION:
magedu.com.		86400	IN	NS	ns2.magedu.com.
magedu.com.		86400	IN	NS	ns1.magedu.com.

;; ADDITIONAL SECTION:
ns1.magedu.com.		86400	IN	A	192.168.122.94
ns2.magedu.com.		86400	IN	A	192.168.122.95

;; Query time: 0 msec
;; SERVER: 192.168.122.95#53(192.168.122.95)
;; WHEN: Mon Oct 24 09:07:19 2016
;; MSG SIZE  rcvd: 96


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

(1) 建立或处理连接:接收客户端的请求,建立连接,或是拒绝其请求

(2) 接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程时,web服务器也分几种模型对并发请求进行响应:

  1).单进程I/O结构:启动一个进程处理用户请求,而且一次只处理一个;多个请求被串行响应;实质就是排队机制,第一个用户的请求处理完再处理第二个,其它排队等待。这种方式串行执行,效率不高。

  2). 多进程I/O结构:并行启动多个进程,每个进程响应一个请求;

  3). 复用I/O结构:一个进程响应n个请求;

  4). 多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

  5). 复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求;此模式实质上为事件驱动:event-driven,效率最高。

(3) 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息

(4) 访问资源:获取请求报文中请求的资源

(5) 拿到需要的资源之后,就会构建响应报文,准备向用户回复

(6) 发送响应报文,回复请求

(7) 记录日志:对每个请求资源,详细记录访问日志信息,以便于以后的安全审查或数据分析。



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

httpd所支持的事务处理模型主要有:

prefork

worker

event

他们分别使用于以下场景:、

 

prefork: 多进程模型,每个进程负责响应一个请求。prefork模型在工作时,由一个主进程负责生成n个子进程,即工作进程,每个工作进程响应一个用户请求,即使当前没有用户请求,它亦会预先生成多个空闲进程,随时等待请求连接,这样的好处是,服务器不用等到请求到达时,才去临时建立进程,缩短了进程创建的时间。提高连接效率。但受限于linux的特性,工作进程数上限为1024个,如超出该数量,服务器性能会急剧降低。

prefork模型的最大并发连接数量最大为1024。由于每个工作进程相对独立,就算崩溃了,也不会对其它进程有明显影响。所以,该模型的特点是稳定可靠,

适合于并发量适中而又追求稳定的用户使用。

 

worker:多线程模型,每个线程响应一个请求。worker模型在工作时,也有一个主进程负责生成多个子进程,同时每个子进程负责生个多个线程,每个线程响应一个用户请求。同理,worker模型也会预先创建一些空闲线程来等待用户连接。并发连接数,如果生成进程数为m,线程为n,则并发数可达到m*n个。但由于在linux中,原生不支持线程,且进程本身就足够轻量化,与线程的区别不是十分巨大,因而,worker模型在linux环境中的实际性能表现与prefork相差无几。

 

event:事件驱动模型,每个线程响应多个用户请求。event模型工作时,由主进程生成n个子进程,每个单独的子进程可响应n个用户请求。因而,event的并发数量可达到m*n个,同时,因为event的子进程为一对多,节省了大量CPU进程间切换上下文的时间,也没有了linux系统的1024个进程限制,所以,event模型是三种模型中效率最高的一种。

可以实破c10k的限制(即并发数1w),对海量并发的系统特别适用。


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);


1)编译安装httpd

编译安装apr

[root@localhost ]# cd apr-1.5.1
[root@localhost apr-1.5.1]# ./configure --prefix=/usr/local/apr
[root@localhost apr-1.5.1]#make && make install

编译安装apr-util

[root@localhost ]# cd apr-util-1.5.4
[root@localhost apr-util-1.5.4]# ./configure  --with-apr=/usr/local/apr --prefix=/usr/local/apr-util 
[root@localhost apr-util-1.5.4]# make && make install

编译安装htppd

[root@localhost ]# cd httpd-2.4.23
[root@localhost httpd-2.4.23]# ./configure --prefix=/usr/local/apache --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
[root@localhost httpd-2.4.23]# make && make install


创建站点目录

[root@localhost httpd-2.4.23]# mkdir -pv /web/vhosts/{www1,www2}/
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/vhosts"
mkdir: 已创建目录 "/web/vhosts/www1/"
mkdir: 已创建目录 "/web/vhosts/www2/"


创建站点文件

[root@localhost httpd-2.4.23]# echo "www1.stuX.com" > /web/vhosts/www1/index.html
[root@localhost httpd-2.4.23]# echo "www2.stuX.com" > /web/vhosts/www2/index.html


创建虚拟主机

编译主配置文件

[root@localhost httpd-2.4.23]# vim /usr/local/apache/conf/httpd.conf 
#DocumentRoot "/usr/local/apache/htdocs"
Include conf/extra/httpd-vhosts.conf


编译虚拟主机文件

[root@localhost httpd-2.4.23]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
 #   ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/web/vhosts/www1"
    ServerName www1.stuX.com
 #   ServerAlias www.dummy-host.example.com
    ErrorLog "/var/log/httpd/www1.err"
    CustomLog "/var/log/httpd/www1.access" common

<Directory "/web/vhosts/www1">
  options none
  allowoverride none
  Require all granted
</Directory>

</VirtualHost>

<VirtualHost *:80>
 #   ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot "/web/vhosts/www2"
    ServerName www2.stuX.com
    ErrorLog "/var/log/httpd/www2.err"
    CustomLog "/var/log/httpd/www2.access" common

<Directory "/web/vhosts/www2">
  options none
  allowoverride none
  Require all granted
</Directory>

</VirtualHost>


创建status监控页面并添加认证功能

[root@localhost apache]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf 
<VirtualHost *:80>
 #   ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/web/vhosts/www1"
    ServerName www1.stuX.com
 #   ServerAlias www.dummy-host.example.com
    ErrorLog "/var/log/httpd/www1.err"
    CustomLog "/var/log/httpd/www1.access" common

  <location /server-status>
    SetHandler server-status
    AuthType Basic
    AuthName "Server-Status"
    AuthUserFile "/usr/local/apache/.htpasswd"
    Require valid-user
  </location>

<Directory "/web/vhosts/www1">
  options none
  allowoverride none
  Require all granted
</Directory>

</VirtualHost>

创建虚拟用户
[root@localhost ]#htpasswd -c -m  /usr/local/apache/.htpasswd status

重启并测试
[root@localhost]# /usr/local/apache/bin/apachectl restart

[root@localhost apache]# curl www1.stuX.com
www1.stuX.com
[root@localhost apache]# curl www2.stuX.com
www2.stuX.com


[root@localhost ]# elinks www1.stuX.com/server-status

第九周作业_作业

第九周作业_作业_02


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

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

(2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com;

创建CA
[root@dockerM CA]# touch index.txt
[root@dockerM CA]#  echo 01 > serial
[root@dockerM CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
................+++
.........................................................................................................................+++
e is 65537 (0x10001)
[root@dockerM CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
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) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www2.stux.com
Email Address []:admin@stux.com

创建主机证书
[root@dockerS ssl]# cd /etc/httpd/ssl
[root@dockerS ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
....+++
.+++
e is 65537 (0x10001)
[root@dockerS ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
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) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:MageEdu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www2.stux.com
Email Address []:admin@stux.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

发证
[root@dockerM CA]# cd /etc/pki
[root@dockerM pki]# openssl ca -in /root/httpd.csr  -out /etc/pki/CA/certs/httpd.crt -days 365
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 28 09:06:03 2016 GMT
            Not After : Oct 28 09:06:03 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HA
            organizationName          = MageEdu
            organizationalUnitName    = Ops
            commonName                = www2.stux.com
            emailAddress              = admin@stux.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                F4:43:72:0A:24:A7:84:2A:61:D0:78:5C:C1:17:65:79:0D:32:F8:4D
            X509v3 Authority Key Identifier: 
                keyid:2F:AB:89:DE:C4:B8:8B:A6:22:1D:76:9A:00:89:1A:14:F2:09:FB:31

Certificate is to be certified until Oct 28 09:06:03 2017 GMT (365 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

配置https
[root@dockerS ssl]# vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/web/vhosts/www2"
ServerName www2.stuX.com
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
<Directory "/web/vhosts/www2">
  options none
  allowoverride none
  Require all granted
</Directory>


[root@dockerM ~]# curl --cacert /etc/pki/CA/cacert.pem https://www2.stux.com
www2.stuX.com

第九周作业_作业_03


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网络的主机访问;

[root@localhost ~]#yum install samba -y
#新增用户和组
######################################
[root@localhost ~]# groupadd develop
[root@localhost ~]# useradd -G develop gentoo
[root@localhost ~]# useradd -G develop centos
[root@localhost ~]# useradd ubuntu
[root@dockerM ~]# echo "gentoo"|  passwd --stdin gentoo
Changing password for user gentoo.
passwd: all authentication tokens updated successfully.
[root@dockerM ~]#  echo "centos"|  passwd --stdin centos
Changing password for user centos.
passwd: all authentication tokens updated successfully.
[root@dockerM ~]# echo "ubuntu"|  passwd --stdin ubuntu
Changing password for user ubuntu.
passwd: all authentication tokens updated successfully.
     
#增加samba用户,新增的samba用户必须是系统中已经存在的
####################################
[root@localhost ~]# smbpasswd -a gentoo
New SMB password:
Retype new SMB password:
Added user gentoo.
[root@localhost ~]# smbpasswd -a centos
New SMB password:
Retype new SMB password:
Added user centos.
[root@localhost ~]# smbpasswd -a ubuntu
New SMB password:
Retype new SMB password:
Added user ubuntu.
     
#编辑配置文件
#######################################
[root@localhost ~]# vim /etc/samba/smb.conf
[global]
hosts allow = 172.16.

[shared]
[shared]
comment = my samba    
path = /data            #共享路径
write list = +develop   #允许develop组写入
public = no             #不允许匿名访问
writable = no           #不允许其他用户写入
 

#启动服务 
#########################################
[root@localhost ~]# service nmb start
启动 NMB 服务:                                            [确定]
[root@localhost ~]# service smb start
启动 SMB 服务:                                            [确定]
##连接samba共享存储:
[root@localhost ~]# smbclient //172.16.200.200/shared -U centos
Enter centos's password: 
Domain=[MAGEEDU] OS=[Unix] Server=[Samba 3.6.23-36.el6_8]
smb: \>


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

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

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

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

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

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

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

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

安装nfs mysql vsftpd
[root@localhost ~]#yum install nfs-utils rpcbind  mariadb-server vsftpd

配置NFS
[root@localhost ~]#vim /etc/exports    
/nfs *(rw,sync,no_root_squash)

[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/ftproot *

配置mysql
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
datadir=/ftproot

[root@localhost ~]# mkdir /ftproot
[root@localhost ~]# chown mysql.mysql -R /ftproot/
[root@localhost ~]# systemctl start  mariadb
[root@localhost ~]# mysql
MariaDB [(none)]> create database vsftpd; 
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]>  grant select on vsftpd.* to vsftpd@'%' identified by 'magedu'; 
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> use vsftpd;
Database changed
MariaDB [vsftpd]> create table users (id int AUTO_INCREMENT NOT NULL,name char(30) binary NOT NULL,password char(50) binary NOT NULL,primary key(id));
Query OK, 0 rows affected (0.04 sec)
MariaDB [vsftpd]> insert into users(name,password) values('magedu',password('magedu'));
Query OK, 1 row affected (0.03 sec)
MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

配置vsftp
[root@localhost ~]#vim /etc/pam.d/vsftpd.m
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=magedu host=172.20.200.200  db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
account required /lib64/security/pam_mysql.so user=vsftpd passwd=magedu host=172.20.200.200  db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

[root@localhost ~]# useradd -s /sbin/nologin -d /ftproot/ vsftpuser
[root@localhost ~]# chmod go+rx /ftproot
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES 
pam_service_name=vsftpd.m
max_clients=200 
anon_max_rate=524288
guest_enable=YES
guest_username=vsftpuser