本周作业内容:

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

SSL/TLS协议的基本思路是采用公钥加密法,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

其基本过程:

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

前两步称为握手阶段,其具体过程:

homework week09_homework

a. 客户端发出请求(clienthello),包含以下信息:

  支持的协议

  用于生成对话密钥的随机数

  支持的加密方法

  支持的压缩算法

b. 服务端回应(serverhello),包含以下信息:

 确认协议版本

  用于生成对话密钥的随机数

  确认加密算法

  服务器证书

c. 客户端回应,客户端首先验证服务器证书,如果证书不是可信机构颁布、或者证书域名与实际域名不一致、或者证书过期,就会向访问者显示一个警告,是否还要继续通信。如果证书没问题,客户端会从证书中取出服务器的公钥,并向服务器发送信息:

  用于服务器公钥加密的随机数

  使用双方商定的加密算法和密钥发送信息

  客户端握手结束通知,表示客户端握手阶段结束

d. 服务端最后回应

服务端收到客户端第三个随机数后,计算本次会话所用的会话密钥,然后向客户端发送以下信息:

  使用双方商定的加密算法和密钥发送信息

  服务器端握手结束。

整个握手阶段全部结束,此后,客户端与服务端进入加密通信。



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

a. 首先在/etc/pki/CA目录下要创建必要的文件:
[root@CentOS7 CA]# touch index.txt  #创建index.txt文件
[root@CentOS7 CA]# echo 01 > serial  #创建序列号文件,这里使用01作为第一个序列号

b. 生成密钥对
#生成密钥对保存在/etc/pki/CA/private/cakey.pem中
[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)

c. 给私有CA自签证书
#自签证书
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
Country Name (2 letter code) [XX]:cn    #国家缩写,只有2位
State or Province Name (full name) []:Beijing    #地区名称,全称
Locality Name (eg, city) [Default City]:Beijing    #城市名称
Organization Name (eg, company) [Default Company Ltd]:captain    #组织名称或公司名称
Organizational Unit Name (eg, section) []:ops    #部门名称
Common Name (eg, your name or your server's hostname) []:www.captain.com    #主机名,这里是CA主机通过DNS解析出来的名称,请不要填错
Email Address []:admin@captain.com    #邮箱地址
[root@CentOS7 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)

openssl req命令中各选项的含义:
            -new:生成新证书签署请求;
            -x509:专用于CA生成自签证书;
            -key:生成请求时用到的私钥文件;
            -days:证书的有效期限;
            -out:证书的保存路径;
            
d. 对证书进行签证
#对/root/htppd.csr进行签证,有效期356天,生成的证书是/root/httpd.crt
[root@CentOS7 CA]# openssl ca -in /root/httpd.csr -out /root/httpd.crt -days 3650
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 17 09:57:50 2016 GMT
            Not After : Oct 15 09:57:50 2026 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = Beijing
            organizationName          = captain
            organizationalUnitName    = ops
            commonName                = www.captain.com
            emailAddress              = admin@captain.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                DA:E7:F7:5C:AE:17:5F:A0:F8:86:14:0E:F9:31:42:E9:E1:AE:D3:02
            X509v3 Authority Key Identifier: 
                keyid:BA:6F:FD:D0:B8:5D:BC:F2:AD:C5:F1:7E:38:23:45:5E:C8:9E:0A:64
Certificate is to be certified until Oct 15 09:57:50 2026 GMT (3650 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)、能够对一些主机名进行正向解析和逆向解析;

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

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

(1)

1. 安装bind、bind-utils

[root@node1 named]# yum install bind bind-utils

2. 修改/etc/named.conf

options {
        listen-on port 53 { any; };  // 监听主机、端口
        listen-on-v6 port 53 { ::1; };  //IPv6的支持
        directory       "/var/named";  //区域文件存储目录
        dump-file       "/var/named/data/cache_dump.db";  //dump cache目录
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; }; //指定可以查询的主机,any表所有
        recursion yes;  // 是否允许递归
        
//      dnssec-enable yes;   
//      dnssec-validation yes;
//      dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
};

3. 在/etc/named.rfc1912.zones文件中添加以下内容

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
        allow-update { none; };
};

zone "162.168.192.in-addr.arpa" IN {
        type master;
        file "162.168.192.zone";
        allow-update { none; };
};

4. 在/var/named目录中,新建magedur.com.zone及162.168.192.zone文件,同时修改其属组为named

[root@node1 named]# cat magedu.com.zone 
$TTL 1D  ;域名解析记录在DNS中存留时间
@       IN SOA  magedu.com.  admin.magedu.com. (
                                2016102001    ; serial 序列号
                                 1D ; refresh 刷新时间
                                 1H ; retry 重试次数
                                 1W ; expire 过期时间
                                 3H ); minimum 否定答案的TTL值
        IN      NS      ns1
        IN      MX      10 mail
ns1     IN      A          192.168.162.132
www     IN      A          192.168.162.132
ftp     IN      A          192.168.162.132
bbs     IN      A          192.168.162.132
mail    IN      A          192.168.162.132

[root@node1 named]# cat 162.168.192.zone
$TTL 1D
@       IN SOA  magedu.com.  admin.magedu.com. (
                                2016102001      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      ns1.magedu.com.
132     IN      PTR     www.magedu.com.
132     IN      PTR     ftp.magedu.com.
132     IN      PTR     bbs.magedu.com.
132     IN      PTR     

[root@node1 named]# chown .named magedu.com.zone 162.168.192.zone 
[root@node1 named]# ll magedu.com.zone 162.168.192.zone 
-rw-r-----. 1 root named 272 Oct 23 17:09 162.168.192.zone
-rw-r-----. 1 root named 312 Oct 23 15:05 magedu.com.zone

5. 检查配置文件及区域文件

[root@node1 named]# named-checkconf 
[root@node1 named]# named-checkzone 162.168.192 162.168.192.zone 
zone 162.168.192/IN: loaded serial 2016102001
OK
[root@node1 named]# named-checkzone magedu.com. magedu.com.zone 
zone magedu.com/IN: loaded serial 2016102001
OK

6. 启动named服务并测试

[root@node1 ~]# service named start
Starting named: [  OK  ]

# 测试
[root@node1 ~]# dig -t A www.magedu.com @192.168.162.132
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.magedu.com @192.168.162.132
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10159
;; 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.         86400   IN      A       192.168.162.132
;; AUTHORITY SECTION:
magedu.com.             86400   IN      NS      ns1.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         86400   IN      A       192.168.162.132
;; Query time: 0 msec
;; SERVER: 192.168.162.132#53(192.168.162.132)
;; WHEN: Sun Oct 23 17:33:50 2016
;; MSG SIZE  rcvd: 82


[root@node1 ~]# dig -x 192.168.162.132 @192.168.162.132
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.162.132 @192.168.162.132
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40659
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;132.162.168.192.in-addr.arpa.  IN      PTR
;; ANSWER SECTION:
132.162.168.192.in-addr.arpa. 86400 IN  PTR     bbs.magedu.com.
132.162.168.192.in-addr.arpa. 86400 IN  PTR     www.magedu.com.
132.162.168.192.in-addr.arpa. 86400 IN  PTR     ftp.magedu.com.
;; AUTHORITY SECTION:
162.168.192.in-addr.arpa. 86400 IN      NS      ns1.magedu.com.
;; ADDITIONAL SECTION:
ns1.magedu.com.         86400   IN      A       192.168.162.132
;; Query time: 0 msec
;; SERVER: 192.168.162.132#53(192.168.162.132)
;; WHEN: Sun Oct 23 17:50:51 2016
;; MSG SIZE  rcvd: 144

# 或者使用nslookup
[root@node1 ~]# nslookup 
> 192.168.162.132
Server:         192.168.162.132
Address:        192.168.162.132#53

132.162.168.192.in-addr.arpa    name = www.magedu.com.
132.162.168.192.in-addr.arpa    name = ftp.magedu.com.
132.162.168.192.in-addr.arpa    name = bbs.magedu.com.
> www.magedu.com
Server:         192.168.162.132
Address:        192.168.162.132#53

Name:   www.magedu.com
Address: 192.168.162.132
> ftp.magedu.com
Server:         192.168.162.132
Address:        192.168.162.132#53

Name:   ftp.magedu.com
Address: 192.168.162.132
> bbs.magedu.com
Server:         192.168.162.132
Address:        192.168.162.132#53

Name:   bbs.magedu.com
Address: 192.168.162.132
> mail.magedu.com
Server:         192.168.162.132
Address:        192.168.162.132#53

Name:   mail.magedu.com
Address: 192.168.162.132

(2)使用DNS主备

备机配置/etc/named.rfc1912.zones
zone "magedu.com" IN {
        type slave;
        masters { 192.168.162.132; };
        file "slaves/magedu.com.zone";
};
zone "162.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.162.132; };
        file "slaves/162.168.192.zone";
};
新建/var/named/slaves,并修改其主信息为named:named
重启named服务,在/var/named/slaves目录中,生成新的文件
[root@node3 slaves]# ll
total 8
-rw-r--r--. 1 named named 384 Nov  1 10:47 162.168.192.zone
-rw-r--r--. 1 named named 521 Nov  1 10:47 magedu.com.zone



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

1)接收请求

接收来自网络的请求报文对资源的请求,或者拒绝请求;

2)处理请求

对请求报文进行解析,并获取资源及请求方法;

3)访问资源

获取请求报文中的资源,向请求者提供请求的资源;

5)构建响应报文

6)发送响应报文

7)记录相关日志



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

httpd处理模型包括prefork,worker,event。

prefork:多进程模型,每个进程响应一个请求。

    有一个主进程,负责生成n个子进程,每个子进程处理一个用户的请求。主进程会预先生成多个空闲子进程,最大不会超过1024个。可以响应n个请求。

worker:多线程模型,每个线程响应一个请求

    一个主进程,生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。可以响应m*n个请求。

event:事件驱动模型,每个线程响应n个请求

    一个主进程,生成m个子进程,每个子进程可以响应n个请求。共可以响应m*n个请求。


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

[root@node1 ~]# mkdir -pv /web/vhosts/www{1,2}
mkdir: created directory `/web'
mkdir: created directory `/web/vhosts'
mkdir: created directory `/web/vhosts/www1'
mkdir: created directory `/web/vhosts/www2'

修改/usr/local/apache2/conf/httpd.conf,添加
NameVirtualHost *:80
Include conf.d/*
修改/usr/local/apache2/conf.d/vhosts.conf,添加
<VirtualHost *:80>
    ServerAdmin admin@stuX.com
    DocumentRoot /web/vhosts/www1
    ServerName www1.stuX.com
    ErrorLog /var/log/httpd/www1.err
    CustomLog /var/log/httpd/www1.access common
    <Directory /web/vhosts/www1>
        Allow from all
        AllowOverride AuthConfig
        AuthType Basic
        AuthName "input your account and passwod"
        AuthUserFile /web/vhosts/www1/.htpasswd
        Require valid-user
    </Directory>
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 192.168.162.1
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@stuX.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>
        Allow from all
    </Directory>
</VirtualHost>

创建密码文件
[root@node1 conf.d]# htpasswd -c -m /web/vhosts/www1/.htpasswd admin
New password: 
Re-type new password: 
Adding password for user admin


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

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

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


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

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@captain ~]# groupadd develop
[root@captain ~]# useradd -G develop gentoo
[root@captain ~]# useradd -G develop centos
[root@captain ~]# useradd ubuntu

[root@captain ~]# echo 'gentoo' | passwd --stdin gentoo
Changing password for user gentoo.
passwd: all authentication tokens updated successfully.
[root@captain ~]# echo 'centos' | passwd --stdin centos
Changing password for user centos.
passwd: all authentication tokens updated successfully.
[root@captain ~]# echo 'ubuntu' | passwd --stdin ubuntu
Changing password for user ubuntu.
passwd: all authentication tokens updated successfully.

# 创建samba用户密码
[root@captain ~]# smbpasswd -a gentoo
New SMB password:
Retype new SMB password:
Added user gentoo.
[root@captain ~]# smbpasswd -a centos
New SMB password:
Retype new SMB password:
Added user centos.
[root@captain ~]# smbpasswd -a ubuntu
New SMB password:
Retype new SMB password:
Added user ubuntu.

# 查看samba用户信息
[root@captain samba]# pdbedit -L
centos:3057:
gentoo:3056:
ubuntu:3058:

# 修改/etc/samba/smb.conf文件
[global]
        workgroup = maedu
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        client signing = required
        idmap config * : backend = tdb
        hosts allow = 192.168.162.  # 这里以192.168.162.0网络为例
        cups options = raw
[shared]
        comment = my shared data
        path = /mydata
        valid users = gentoo, centos, ubuntu
        write list = +develop
修改/mydata目录权限
chmod -R o+rwx /mydata/
在windows下测试
gentoo、centos用户可以浏览且有写权限,ubuntu只有读权限。


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

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

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

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

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

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

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

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

1)yum安装vsftp
yum install -y vsftpd
编辑/etc/vsftpd/vsftpd.conf,设置以下参数
anonymous_enable=YES

2)编辑/etc/vsftpd/vsftpd.conf,设置以下参数
anon_upload_enable=NO
anon_mkdir_write_enable=NO

3)编辑/etc/vsftpd/vsftpd.conf,设置以下参数
chroot_local_user=YES
chroot_list_enable=NO

4)编辑/etc/vsftpd/vsftpd.conf,设置以下参数
max_clients=200

5)编辑/etc/vsftpd/vsftpd.conf,设置以下参数
anon_max_rate=512k

6) vftp安装在192.168.162.134主机上,mariadb安装在192.168.162.135主机上。
安装epel源,yum install -y pam_mysql
a. 在数据库中创建vsftpd库,及vsftp相关的用户
create database vsftpd;
grant select on vsftpd.* 'vsftp'@'192.168.162.%' identified by 'vsftp123';
create table users (
id int unsigned not null primary key,
name varchar(30) not null,
passwd char(48) not null);
插入测试用户
insert into users(name, passwd) values ('tom', password('tom123')),('jerry', password('jerry123'));

b. 新建/etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftp passwd=vsftp123 host=192.168.162.135 db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2
account required pam_mysql.so user=vsftp passwd=vsftp123 host=192.168.162.135 db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2

c. 新建系统账号
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rw /var/ftproot

d. 编辑/etc/vsftpd/vsftpd.conf,设置以下参数
pam_service_name=vsftpd.mysql
guest_enable=YES   # 开启来宾账号
guest_username=vuser # 来宾账号映射为vuser用户

e 测试
<0>[root@captain ~]# ftp 192.168.162.134
Connected to 192.168.162.134 (192.168.162.134).
220 Welcome to blah FTP service.
Name (192.168.162.134:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> by
221 Goodbye.
<0>[root@captain ~]# ftp 192.168.162.134
Connected to 192.168.162.134 (192.168.162.134).
220 Welcome to blah FTP service.
Name (192.168.162.134:root): jerry
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> by
221 Goodbye.

7)安装nfs (CentOS7系统,192.168.162.135)
yum install -y nfs-utils
修改/etc/exports文件
/mysql *(rw,no_root_squash)
新建/mysql、/data目录,并mount
mount 192.168.162.135:/mysql /data
查看
[root@CentOS7 /]# df /data/
Filesystem             1K-blocks    Used Available Use% Mounted on
192.168.162.135:/mysql  13642752 1620224  10065920  14% /data