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

以Bob和Alice安全通讯为例:

    Bob<--------->Alice

  1. Bob要和Alice安全通信首先要取得对方的公钥,即对方的证书,并验证证书的合法性。验证过程和内容:

    1)、用CA的公钥(双方已知)解密对方证书中CA的签名;能解密说明证书来原可靠;

    2)、用证书中标记的“签名算法”来计算证书的相关信息,并将散列计算的结果与证书“发行者签名”解密的结果(证书特征码)进行比较,如果一致说明证书完整性可靠;

    3)、检查证书的有效期限是否在合法范围内,防止证书过期;

    4)、验证证书的“主体名称”和预通信的人是否对应;

    5)、检查证书是否被吊销;

    以上验证成功则说明对方证书可靠,并信任该证书。

  2. 取得对方证书(即公钥)后进行如下操作:

    加密:

    1)、Bob对明文数据进行散列计算,提取出数据指纹(特征码,也叫信息摘要);

    2)、Bob使用自己的私钥对该数据指纹进行加密,生成数字签名,并将该数字签名附加在明文数据之后;

    3)、Bob使用一个一次性的对称加密算法密钥对明文和数字签名进行加密,生成密文;

    4)、Bob再使用Alice的公钥对对称加密算法的密钥进行加密,生成数字信封;

    5)、Bob将密文和数字信封打包发送给Alice;

    解密:

    1)、Alice收到数据(密文+数字信封)后,使用自己的私钥解密数字信封,得到对称加密算法的密钥;

    2)、使用对称加密密钥解密密文,得到明文数据和数字签名。保证了数据的私密性;

    3)、使用Bob的公钥解密数字签名,得到明文的数据指纹(特征码)。如果能解出,说明数据为Bob发送,保证了数据的不可否认性;

    4)、Alice使用同样的散列算法对明文计算得出数据指纹(特征码),并与Bob计算的数据指纹进行比对,如果一致,说明数据没有被篡改。保证的数据的完整性;

 

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

1.首先在CA服务器上创建所需要的文件在/etc/pki/CA中,新建两个文件

touch index.txt

echo 01 > serial

2.CA服务器自签证书

先生成私钥:(umask 077; openssl genrsa -out/etc/pki/CA/private/cakey.pem 2048)

再生成自签证书:openssl req -new -x509 -key/etc/pki/CA/private/cakey.pem -days 7300 -out cacert.pem

选项说明:  new: 生成新证书签署请求;

-x509:专用于CA生成子签证书;

-key:生成请求时用到的私钥文件;

-out:/path/to/somecertfile:证书的保存路径;

3.请求证书的服务器生成证书请求

先生成私钥:(umask 077; openssl genrsa -out/etc/httpd/ssl/httpd.key 2048)

再生成证书请求: openssl req -new -key/etc/httpd/ssl/httpd.key -days 365 -out/etc/httpd/ssl/httpd.csr    

###我这是做的https服务器,所以起名httpd.csr

4.把情求文件传输给CA

scp /etc/httpd/ssl/httpd.csr  root@CAIPADRESS:/tmp/httpd.csr

 5.CA签署证书并放证书发还给请求者;

#openssl ca -in /tmp/httpd.csr -out/etc/pki/CA/certs/httpd.crt -days 365

scp /tmp/httpd.csr root@HTTPIPADRESS:/etc/httpd/ssl/httpd.crt

 

 

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

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

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

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

]#  yum install bind

~]# yum install bind-utils   用于dns测试使用

]# setenforce 0

~]# service iptables stop

]# vim /etc/named.conf  

 listen-on port 53 { any;};  修改为any;表示监听所有地址的53端口

      //      listen-on-v6 port 53 { ::1; };   注释掉了IPV6的监听功能

  allow-query  { any; };  修改为any;表示允许所有主机进行dns查询

 recursion yes;  默认yes不改动,表示是否允许递归

 dnssec-enable no;   改为no; 

         dnssec-validation no; 改为no;

保存退出

 service named start    启动服务

 dig -t A www.souhu.com @192.168.1.111    dns查询测试。dns服务器IP为192.168.1.111

下边配置区域解析文件:

# vim /etc/named.rfc1912.zones

zone "magedu.com" IN {

        type master;

        file "magedu.com.zone";

        allow-update { none;};表示不允许任何主机更新解析文件,安装考虑

};

保存退出

]# vim /var/named/magedu.com.zone

 

下边创建反向解析文件:

]# vim /etc/named.rfc1912.zones 

zone "168.192.in-addr.arpa" IN {

         type master;

         file "192.168.zone";

};

]# vim 192.168.zone

 

下面进行子域授权;

首先在父域dns服务器上添加子域dns服务器的区域解析

添加一条子域dns的NS记录和A记录。我的子域dns服务器IP为192.168.1.110

然后子域节点安装bind程序包,配置主配置文件首先成为dns缓存服务器,配置和父域节点一样。

再在子域中添加区域解析文件

# vim /etc/named.rfc1912.zones

zone "cdn.magedu.com" IN {

        type master;

        file "cdn.magedu.com.zone";

        allow-update { none; };

};

保存退出后启动dns服务,]#service named start  

 最后在子域节点上进行dns测试,能够解析自己的域,父域不能解析。

至此,完成子域授权操作。

下面介绍下高可用性,dns的服务器可以是一个主服务多个从服务器。每当主服务器发生解析文件变更时,会主动通知从节点,从而把变更后的解析库文件传递给从服务器。当有一台dns服务器不能提供服务时,可暂时由另外一台dns服务器提供服务。从而实现了高可用性。

Dns主节点的配置就是在/etc/named.rfc1912.zones文件中定义解析区域时,保证type master;即可。还有一点,主节点的区域解析文件中要有从节点的NS记录和A记录。

ns从节点的配置首先是定义区域

]# vim /etc/named.rfc1912.zones 

zone "magedu.com" IN {区域名称必须和主节点一致

        type slave;类型为从节点

        masters { 192.168.1.111; };   给定主节点的IP地址

        file "slaves/magedu.com.zone";区域解析文件的保存位置在slaves文件夹下

};

 

还有一点就是要保证主从节点的时间同步,和保证主从节点的通信。

两边重启服务后,查看日志信息就能看到是否成功。

 

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

一次完整的http请求的过程:

1 建立连接或处理连接;接收请求或拒绝请求

2接受请求 接受来自于网络的请求报文中对某资源的一次请求的过程;

3处理请求:对请求报文进行分析,并获取请求的资源及请求方法等相关信息元数据:请求报文首部

4访问资源;获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求这提供对方请求的静态资源,或动态生成后的资源;这些资源放置于本地文件系统某路径下,此路径通常称为docroot

5创建响应报文;

6发送响应报文

7记录日志

 

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

prefork :多进程模型,每个进程响应一个请求; 一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;

worker:多线程模型,每个线程响应一个请求;一个主进程,生成多个子进程;每个子进程负责生成多个线程,每个线程响应一个请求 ;

event:事件驱动模型,每个线程响应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)

# wget http://apache.fayea.com/httpd/httpd-2.4.23.tar.gz

]# wget http://apache.fayea.com/apr/apr-1.5.2.tar.gz

# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz

安装开发工具

]# yum -y groupinstall "Development tools" "Server Platform Development"

解决依赖关系

]# tar zxvf apr-1.5.2.tar.gz 

# cd apr-1.5.2

]# ./configure --prefix=/usr/local/apr

# make && make install

# tar zxvf apr-util-1.5.4.tar.gz

]# cd apr-util-1.5.4

]# ./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr

# make && make install

]# yum install pcre-devel

添加用户和用户组

#groupadd -r apache

#useradd -r -g apache apache

编译安装http2.4

]# tar zvxf httpd-2.4.23.tar.gz 

]# cd httpd-2.4.23

]#./configure --prefix=/usr/apache --sysconf=/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

]# make && make install

启动服务 # cd /usr/apache/bin; ./apachectl -k start

 

 

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

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

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

在CA服务器上子签证书;

1,首先/etc/pki/tls/openssl.conf配置文件创建serial和index.txt文件

 

2,生成CA的私钥文件:

# (umask 077; openssl genrsa -out private/cakey.pem 2048)

3,生成子签证书:

]# openssl req -x509 -new -key private/cakey.pem -days 7300 -out cacert.pem 

 

在httpd服务器上获得证书

1,首先生成私钥

#(umask 077; openssl genrsa -out httpd.key 2048)

2,生成证书请求文件

 openssl req -new -key httpd.key -days 365 -out httpd.csr

 

3.将请求文件发送给CA服务器

]# scp httpd.csr root@192.168.1.112:/tmp

  4.CA服务器签发证书

]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

 

把证书传给htppd服务器即可。#scp httpd.crt root@192.168.1.111:/etc/httpd24/extra

现在就可以配置www2.satux.com的ssl功能了

   vim /etc/httpd/conf.d/ssl.conf

在末尾添加以下内容

<VirtualHost 192.168.1.111:443>

DocumentRoot /web/vhosts/www2/

ServerName  www2.stuX.com:443

SSLEngine on

SSLCertificateFile /etc/httpd24/extra/httpd.crt

SSLCertificateKeyFile /etc/httpd24/extra/httpd.key

</VirtualHost>

重启服务,即可。

 

 

 

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

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

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

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

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

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

    [root@ moban ~]#yum install samba -y        #新增用户和组

    [root@ moban ~]#groupadd develop

    [root@ moban ~]# useradd -G develop gentoo

    [root@ moban ~]# useradd -G develop centos

    [root@ moban ~]# useradd ubuntu

    [root@ moban ~]# echo "gentoo"|  passwd --stdin gentoo   #更改用户 gentoo 的密码

    [root@ moban ~]# echo "centos"|  passwd --stdin centos

    [root@ moban ~]# echo "ubuntu"|  passwd --stdin ubuntu

     

#增加samba用户,新增的samba用户必须是系统中已经存在的

    [root@ moban ~]# smbpasswd -a gentoo

    New SMB password:

    Retype new SMB password:

    Added user gentoo.

    [root@nod1 ~]# smbpasswd -a centos

    New SMB password:

    Retype new SMB password:

    Added user centos.

    [root@nod1 ~]# smbpasswd -a ubuntu

    New SMB password:

    Retype new SMB password:

    Added user ubuntu.

 

     

#编辑配置文件

   

 [root@ moban ~]# vim /etc/samba/smb.conf

    [global]

    workgroup = magedu

    server string = Samba Server Version %v

    security = user

    passdb backend = tdbsam

    load printers = yes

    cups options = raw

    hosts allow = 172.16.

    [shared]

    comment = my samba

    path = /data

    public = no

    valid users = gentoo,centos,ubuntu,@develop

    read list = ubuntu

    write list = @develop

    writable = yes

    printable = no 

#启动服务 

    [root@ moban ~]# service nmb start

    [root@ moban ~]# service smb start

 

 

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

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

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

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

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

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

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

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

代码语言

# yum -y install  mysql-server mysql-devel pam_mysql

创建vsftpd数据库和虚拟用户账号

 mysql> create database vsftpd;

    mysql> grant select on vsftpd.* to centos@localhost identified by ‘centos‘;

    mysql> grant select on vsftpd.* to centos@127.0.0.1 identified by ‘centos‘;

    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)

     );

配置vsftpd

先建立pam认证所需文件

    #vi /etc/pam.d/vsftpd.mysql

    添加如下两行

    auth required /lib/security/pam_mysql.so user=centos passwd=centos  host=localhost db=vsftpd table=users usercolumn=centos passwdcolumn=centos crypt=2

    account required /lib/security/pam_mysql.so user=centos  passwd=centos  host=localhost db=vsftpd table=users usercolumn=gentoo passwdcolumn=gentoo crypt=2

 建立虚拟用户映射的系统用户及对应的目录

    # useradd -s /sbin/nologin -d /var/ftproot vuser

# chmod go+rx /var/ftproot

修改vsftpd的配置文件,使其适应mysql认证

    anonymous_enable=UES

    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=YES

    pasv_min_port=30000

    pasv_max_port=30999

    pam_service_name=vsftpd.mysql  指明使用/etc/pam.d/vsftpd.mysql 来认证