首页 > 代码库 > 作业06

作业06

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

答:

1.    拓扑图


 技术分享

2.    加密通讯的过程

     客户端需要先获取并信任CA机构的证书

     客户端向Web服务器发送https请求

     服务器响应并处理请求,向客户端发送自己的证书

     客户端获取服务器的证书,检查证书的合法性,具体包括:

    1.     该证书是否是由自己所信任的颁发机构颁发

    2.     该证书是否过期

    3.     该证书是否已被吊销

    4.     主机名与证书中的是否一致

      证书验证通过后,从证书中获取Web服务器的公钥。客户端生成一个随机数作为加密用密钥,使用公钥进行加密,并传送给Web服务器

      Web服务器获取客户端发送来的密文,使用自己的私钥进行解密,获取随机数。之后的通信过程就使用该随机数作为密钥进行对称加密

      客户端获取到报文后,使用相同的随机数进行解密

 

 

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

答:

实验拓扑:

私有CA

192.168.1.101  Centos6

 

webserver

192.168.1.102  Centos6

 

实验过程:

1.    创建私有CA:

192.168.1.101上操作

检查私有CA所需的文件和目录

cat /etc/pki/tls/openssl.cnf              //查看openssl配置文件

技术分享

 

ll /etc/pki/CA/

技术分享

touch /etc/pki/CA/index.txt      //创建index.txt

 

echo 01 > /etc/pki/CA/serial    //创建序列号文件,序列号从01开始

技术分享

 

②CA自签证书

(umask 077; openssl genrsa -out/etc/pki/CA/private/cakey.pem 2048)

//使用openssl生成CA的私钥,保存在/etc/pki/CA/private/中,文件后缀必须是.pem,要确保私钥的文件的权限安全

技术分享

 

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

//使用私钥来自签证书,自签证书要使用x509,同时指定有效期为20年(看需求),最后把证书输出到任意路径,文件后缀必须是.pem。可以把该证书发给客户端,让客户端信任自建CA机构

技术分享

 

2.    向CA申请证书:

192.168.1.102上操作

①安装nginx用于做测试

yum install -y nginx

 

②创建私钥

mkdir /etc/nginx/ssl    //创建在webserver配置文件夹中,便于管理

 

(umask 077; openssl genrsa -out /etc/nginx/ssl/nginx.key 2048)

//创建私钥,要确保文件权限安全

技术分享

 

③使用私钥创建证书申请

openssl req -new -key /etc/nginx/ssl/nginx.key -days 365 -out /etc/nginx/ssl/nginx.csr

//可以指定申请的证书的有效期为多少天

技术分享

 

scp /etc/nginx/ssl/nginx.csr root@192.168.1.101:/tmp

//把证书申请文件发送给私有CA

 

④私有CA颁发证书

192.168.1.101上操作

openssl ca -in/tmp/nginx.csr -out/etc/pki/CA/certs/nginx.crt -days 700

//审核证书申请文件,并颁发证书,证书输出到certs目录中

技术分享

 

技术分享

 

scp /etc/pki/CA/certs/nginx.crt root@192.168.1.102:/etc/nginx/ssl

//把证书发给申请者

rm -rf /tmp/nginx.csr   //颁发证书后可以把申请文件删了

 

3.    使用证书创建https网站:

192.168.1.101上操作

①检查私钥和证书

rm -rf /etc/nginx/ssl/nginx.csr  //获得证书后,就可以把证书申请文件删了

技术分享

 

②创建网站

vim /etc/nginx/conf.d/test.conf      //创建一个https站点

技术分享

 

mkdir /www      //创建网站目录

 

vim /www/index.html  //创建首页

技术分享

 

service nginx restart         //重启nginx服务

技术分享

 

4.    测试:

配置hosts,使客户端可以使用www.test.com访问到192.168.1.102

技术分享技术分享


 

②使用ie访问https://www.test.com

技术分享

 

技术分享

 

③客户端信任CA的证书

技术分享

技术分享

技术分享

 

④重新访问https://www.test.com

技术分享

 

 

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

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

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

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

答:

DNS高可用方案:

使用区域复制的方式部署两台DNS服务器(一主一从),客户端同时添加这两台DNS服务器地址,实现高可用

 

实验拓扑:

主DNS服务器

192.168.1.101  Centos6

 

辅DNS服务器

192.168.1.102  Centos6

 

子域DNS服务器

192.168.1.103  Centos6

 

实验过程:

  1. 1.    部署主DNS服务器:

  2. 192.168.1.101上操作

   安装bind

yum install -y bind

 

   修改主配置文件

cp /etc/named.conf{,.back}              //先做备份

 

vim /etc/named.conf

技术分享

 

   配置解析域

cp /etc/named.rfc1912.zones{,.back}       //先备份

 

vim /etc/named.rfc1912.zones

技术分享

 

named-checkconf              //检查是否有语法错误

 

    添加正向域的资源记录

vim /var/named/magedu.com.zone   

//在/var/named/路径下创建文件,文件名要与配置文件中的一致

技术分享

 

named-checkzone "magedu.com"/var/named/magedu.com.zone

//检查是否有语法错误

技术分享

 

chown :named /var/named/magedu.com.zone       

//为了安全,修改文件属组为named

 

chmod 640 /var/named/magedu.com.zone           //修改文件权限

 

   添加反向域的资源记录

vim /var/named/192.168.1.zone

技术分享

 

named-checkzone "1.168.192.in-addr.arpa"/var/named/192.168.1.zone

//检查是否有语法错误

 

chown :named /var/named/192.168.1.zone

chmod 640 /var/named/192.168.1.zone

//修改文件权限

 

service named start

//启动服务

 

chkconfig named on

//设置为开机启动

 

2.    部署辅DNS服务器:

192.168.1.102上操作

   模拟一次区域复制

dig -t axfr magedu.com @192.168.1.101

技术分享

 

   安装bind

yum install -y bind

 

   修改主配置文件

cp /etc/named.conf{,.back}              //先做备份

 

vim /etc/named.conf

技术分享

 

   配置解析域

cp /etc/named.rfc1912.zones{,.back}       //先备份

 

vim /etc/named.rfc1912.zones

 

技术分享

 

named-checkconf          //检查配置文件是否有语法错误

 

service named start

chkconfig named on

//启动服务并配置为开机启动

 

技术分享

 

    测试主从复制

技术分享

rndc reload

//重载配置文件

技术分享

 

3.    部署辅子域DNS服务器:

   安装bind

yum install -y bind

 

   修改主配置文件

cp /etc/named.conf{,.back}              //先做备份

 

vim /etc/named.conf

技术分享

 

   配置解析域

cp /etc/named.rfc1912.zones{,.back}       //先备份

 

vim /etc/named.rfc1912.zones

技术分享

 

named-checkconf              //检查是否有语法错误

 

   添加正向域的资源记录

vim /var/named/cdn.magedu.com.zone

技术分享

 

named-checkzone "cdn.magedu.com" /var/named/cdn.magedu.com.zone

//检查是否有语法错误

技术分享

 

chown :named /var/named/cdn.magedu.com.zone

chmod 640 /var/named/cdn.magedu.com.zone

//修改文件权限

 

service named start

chkconfig named on

//启动服务并设置为开机启动

 

4.    验证:

技术分享

 


 

技术分享

 

技术分享

 

模拟主DNS服务器宕机:

技术分享

 

 

 

 

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

答:

    客户端发起http请求,通常包含请求方法(GET | POST | PUT | HEAD),主机名host,请求资源记录url,HTTP版本号,以及其他请求首部

    web服务器根据自己的配置,接收请求或处理请求

    web服务器处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息

    访问资源,依次获取请求报文中请求的所有资源

   构建响应报文

   发送响应报文

    最终记录访问日志

 

 

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

答:

    prefork模型

工作特性:

  一个主进程,负责生成n个子进程(被称为工作进程),每个子进程处理一个请求,即使没有请求,也会预先生成多个空闲进程以随时等待请求到达

 

适用场景:

  适用于没有线程安全库,需要避免线程兼容性问题的系统。若一个请求出现问题,不会影响到其他请求

 

   worker模型

工作特性:

  一个主进程,生成多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求

 

适用场景:

  线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些

 

   event模型

工作特性:

  一个主进程,生成m个子进程,每个进程响应n个请求。该模型在httpd2.4版本中可作为生产使用,httpd2.2版本中为测试用

 

适用场景:

  它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。在event模型中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

 

 

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

答:

实验拓扑:

webserver

ip:           192.168.1.102

httpd版本:   2.4

系统版本:      Centos 6.8

 

实验过程:

1. 编译安装httpd2.4:

① 安装编译环境

yum groupinstall -y "Developmenttools" "Server Platform Development"

 

② 安装新版本apr

技术分享

 

cd apr-1.5.0

./configure--prefix=/usr/local/apr         //指定apr安装路径,避免覆盖旧版本

make && make install

//编译安装apr

 

cd apr-util-1.5.3

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

//指定自己安装的apr的路径

make && make install

//编译安装apr-util

 

③ 安装pcre-devel

yum install -y pcre-devel

 

   安装httpd2.4

技术分享

 

技术分享

 

./configure --prefix=/usr/local/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

//指定安装路径和配置文件路径,使用自己装的apr和apr-util,启用大多数模块(选择all为所有模块),指定默认的工作模式为prefork(可选择worker和event)

 

make && make install

 

    后续工作

vim /etc/profile.d/http24.sh

技术分享

source /etc/profile.d/http24.sh      //使环境变量立即生效

 

echo "MANPATH/usr/local/apache/man/" >> /etc/man.config     //添加man路径

 

ln -s/usr/local/apache/include/ /usr/include/httpd24       //链接头文件

 

cp /etc/rc.d/init.d/httpd/etc/rc.d/init.d/httpd24    //以服务动脚本为模板编辑服务脚本

 

vim /etc/rc.d/init.d/httpd24      //修改服务脚本

技术分享

 

chkconfig --add httpd24        //添加为服务脚本

chkconfig httpd24 on           //设置开机启动

技术分享

 

2.配置www1.stuX.com

mkdir /etc/httpd24/hosts

//创建文件夹,存放虚拟主机配置文件

 

cp/etc/httpd24/httpd.conf{,.bak}

vim /etc/httpd24/httpd.conf

//修改主配置文件

技术分享

 

vim/etc/httpd24/hosts/www1_stuX_com.conf 

 技术分享

mkdir -p /web/vhosts/www1

vim /web/vhosts/www1/index.html

//编辑网页文件

技术分享

 

 

3.     配置www2.stuX.com

vim /etc/httpd24/hosts/www2_stuX_com.conf

技术分享

 

mkdir -p /web/vhosts/www2

vim /web/vhosts/www2/index.html

//编辑网页文件

技术分享

 

4. 配置httpd状态页面

htpasswd -c -m/etc/httpd24/.htpasswd status

//创建用户账户文件,并添加一个用户

技术分享

 

vim/etc/httpd24/hosts/www1_stuX_com.conf

//修改虚拟主机配置文件

技术分享

 

service httpd24 start

//启动httpd服务

 

效果:

技术分享

 

技术分享

 

技术分享

 


 技术分享

技术分享

 

 

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

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

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

答:

1.    申请CA证书

   创建私钥

mkdir /etc/httpd24/ssl

(umask 077; openssl genrsa -out/etc/httpd24/ssl/httpd.key 2048)

 

   使用私钥创建证书申请文件

openssl req -new -key /etc/httpd24/ssl/httpd.key-days 365 -out /etc/httpd24/ssl/httpd.csr

技术分享

 

   私有CA颁发证书

scp /etc/httpd24/ssl/httpd.csr root@192.168.1.101:/tmp

//把证书申请发送给私有CA

 

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

//颁发证书,有效期为700天

技术分享

 

scp root@192.168.1.101:/etc/pki/CA/certs/httpd.crt/etc/httpd24/ssl/

//获取CA证书

 

rm -f /etc/httpd24/ssl/httpd.csr

//证书申请文件可删除

技术分享

 

 

2.    配置https站点

cp /etc/httpd24/extra/httpd-ssl.conf/etc/httpd24/hosts/https_www2_stuX_com.conf

//复制默认配置

 

vim /etc/httpd24/hosts/https_www2_stuX_com.conf

技术分享

 

技术分享

 

vim /etc/httpd24/httpd.conf

//修改主配置文件

 

技术分享

 

技术分享

 

service httpd24 restart

//由于需要监听443端口,需要重启服务

 

效果:

技术分享

 

技术分享

 

技术分享

 

 

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

答:

实验拓扑:

smbserver

172.16.1.102  Centos6

 

client

172.16.1.52   Win7

 

实验过程:

1. 创建共享目录

mkdir /data

 

2. 创建用户和组,配置目录权限

groupadd develop

 

useradd gentoo -G develop && echo"gentoo" | passwd --stdin gentoo

useradd centos -G develop && echo"centos" | passwd --stdin centos

useradd ubuntu && echo "ubuntu" |passwd --stdin ubuntu

 

setfacl -m g:develop:rwx /data

//赋予develop组读写权限

技术分享

 

3. 安装并配置samba

①安装samba

yum install -y samba

service nmb start; service smb start

//启动samba服务

 

②添加samba用户

smbpasswd -a gentoo

smbpasswd -a centos

smbpasswd -a ubuntu

技术分享

 

配置samba

cp /etc/samba/smb.conf{,.bak}

//先备份

 

vim /etc/samba/smb.conf

技术分享

 

技术分享

 

testparm

//检查配置是否有误

技术分享

 

 

service nmb reload; service smb reload

//重载配置

 

 

效果:

技术分享

 

技术分享

 

技术分享

 


 

技术分享

 

技术分享

 


 

技术分享

 技术分享

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

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

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

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

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

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

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

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

答:

实验拓扑:

nfsServer

192.168.1.101  Centos6

 

mysqlServer

192.168.1.200  Centos7

 

vsftpServer

192.168.1.102  Centos6

 

Client

192.168.1.104  Centos6

 

实验过程:

1. 配置nfs

在192.168.1.101上操作

rpm -q nfs-utils

//检查是否安装nfs服务

技术分享

 

mkdir /share

//创建目录,用于共享

 

vim /etc/exports

技术分享

 

useradd -r -u 306 -s /sbin/nologin mysql

//创建mysql用户

 

setfacl -m u:mysql:rwx /share/

//赋予mysql用户读写权限

技术分享

 

service nfs start

//启动nfs服务

 

 

2. 配置mysql

在192.168.1.200上操作

   挂载nfs

mkdir /data

//创建挂载点

 

echo "192.168.1.101:/share  /data nfs  defaults,_netdev   0 0"  >> /etc/fstab

//设置开机自动挂载

 

mount -a

//挂载nfs

技术分享技术分享

 

 

   添加mysql用户

groupadd -r -g 306 mysql

 

useradd -r -u 306 -g 306 -s /sbin/nologin mysql

//uid必须和nfs服务器上的mysql用户一致

 

visudo

//配置sudo权限


 

   安装mysql

技术分享

 

tar -xzvf mariadb-5.5.46-linux-x86_64.tar.gz -C/usr/local/

//解压

 

ln -s /usr/local/mariadb-5.5.46-linux-x86_64//usr/local/mysql

 

chown -R root:mysql /usr/local/mysql/

//修改权限

 

 

   初始化数据库

sudo -u mysql mkdir /data/database

//以mysql用户身份创建数据库目录

 

sudo -u mysql/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/data/database

//以mysql用户身份进行初始化操作

技术分享

 

    准备配置文件

mkdir /etc/mysql

 

cp /usr/local/mysql/support-files/my-large.cnf/etc/mysql/my.cnf

 

vim /etc/mysql/my.cnf

技术分享

 

   后续工作

vim  /etc/profile.d/mysqld.sh

//添加环境变量

技术分享

 

source /etc/profile.d/mysqld.sh

 

echo ‘/usr/local/mysql/lib/‘ >/etc/ld.so.conf.d/mysqld.conf

ldconfig

//添加lib库路径

 

ln -s /usr/local/mysql/include/mysql/ /usr/include/mysqld

 

echo ‘MANPATH /usr/local/mysql/man/‘ >>/etc/man.config

 

mkdir /var/log/mariadb

chown mysql:mysql /var/log/mariadb

//创建mysql日志目录

 

mkdir /var/run/mariadb/

chown mysql:mysql /var/run/mariadb/

//创建pid存放目录

 

vim /usr/lib/systemd/system/mariadb.service

//设置开机启动

技术分享

 

systemctl daemon-reload

 

systemctl enable mariadb.service

systemctl start mariadb.service

//设置开机启动,并启动mysql

技术分享

 

   创建数据库

mysql -h 127.0.0.1 –uroot

//登录Mysql

 

create database vsftpd;

grant select on vsftpd.* to vsftpd@localhost identifiedby ‘12345‘;

grant select on vsftpd.* to vsftpd@127.0.0.1 identifiedby ‘12345‘;

grant select on vsftpd.* to vsftpd@192.168.1.102identified by ‘12345‘;

//创建数据库,并添加数据库用户

 

use vsftpd

create table user ( id int AUTO_INCREMENT NOT NULLPRIMARY KEY, name char(20) binary NOT NULL, password char(48) binary NOT NULL);

//创建vsftpd用户表,name和password添加binary属性,比较时区分大小写

 

insert into user(name,password)values (‘fuser1‘,password(‘fuser1‘)),(‘fuser2‘,password(‘fuser2‘));

//创建两个虚拟用户,密码以密文方式保存

 

exit

//断开数据库连接

 

 

3. 配置vsftpd

在192.168.1.102上操作

yum install -y vsftpd pam_mysql

//安装vsftpd和pam的mysql驱动

 

vim /etc/pam.d/vsftpd.mysql

auth required /lib64/security/pam_mysql.souser=vsftpd passwd=12345 host=192.168.1.200 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=mysql

account required /lib64/security/pam_mysql.souser=vsftpd passwd=12345 host=192.168.1.200 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=mysql

//定义连接mariadb的信息:用户名,密码,mariadb的ip,使用哪个数据库,使用哪个表,哪个字段作为用户名,哪个字段作为密码,密码的加密方式使用mysql方式

技术分享

 

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

//创建一个系统用户,用于给vsftpd的虚拟用户映射用

 

chmod go+rx /ftproot/

//给其他用户添加访问权限

 

cp /etc/vsftpd/vsftpd.conf{,.bak}

//备份vsftpd配置文件

 

vim /etc/vsftpd/vsftpd.conf

技术分享

 

技术分享

 

mkdir /etc/vsftpd/vusers_config

vim /etc/vsftpd/vusers_config/fuser1

//配置虚拟用户权限,文件名以用户名来命名

技术分享

 

vim /etc/vsftpd/vusers_config/fuser2

//配置fuser2权限

技术分享

 

service vsftpd start

//启动vsftpd

 

 

效果:

touch /var/ftp/test.txt

touch /ftproot/test.txt

//在ftp服务器上创建文件

 

ftp 192.168.1.102

//访问ftp服务器

技术分享

 

技术分享

 

技术分享

 

 

技术分享

 

技术分享

 

技术分享


作业06