本周作业内容:

1、详细描述一次加密通讯的过程,结合图示最佳。
 (1) 客户端发送可供选择的加密方式,并向服务器请求证书;
    (2) 服务器端发送证书以及选定的加密方式给客户端;
    (3) 客户端取得证书并进行证书验正:
            如果信任给其发证书的CA:
                    (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名;
                    (b) 验正证书的内容的合法性:完整性验正
                    (c) 检查证书的有效期限;
                    (d) 检查证书是否被吊销;
                    (e) 证书中拥有者的名字,与访问的目标主机要一致;
    (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换;
    (5) 服务用此密钥加密用户请求的资源,响应给客户端;
--------------------------------------------------------------------------
2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。

 服务器端创建CA
  创建CA需要的目录和文件
  使用命令行工具生成证书
 客户端配置密钥并提请服务器签证
  生成密钥,并提交服务器端完成证书生成
 服务器给客户端签证
  收到客户提交的证书申请,利用客户端提交的申请生成证书
  将生成的证书保存一份到本地,并将证书传回客户端
 客户端使用证书
  将收到的证书放到本地的目录中
 客户端和服务器端相互验证则可以使用加密传输
---------------------------------------------------------------
3、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)

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

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

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

准备说明:
 为保证服务使用一主两备,主DNS提供查询,副DNS配置成只缓存服务器
 主服务器的地址为192.168.80.133
 从服务器的地址为192.168.80.131  192.168.80.132
 客户端的电脑一部分以131为主 132为从, 另一部分则相反,这样充分利用两台DNS提供服务

从服务器的配置(两台从服务器相同)
 vim /etc/named.conf  添加以下的内容,其他不需要配置
 options {

   forwarders { 192.168.80.133; };
   forward only;
   allow-query     { any; };
  
 };
主服务器
编辑主配置文件增加和修改以下内容
 acl trans_ip {
    192.168.80.131;
    192.168.80.132;

 };
 options {
   
   allow-query     { trans_ip; };
   recursion yes;

 };

编辑另一个配置文件添加以下区域,并开启区域传送
 vim /etc/named.rfc1912.zones
 zone "magedu.com" IN {
   type master;
   file "magedu.com.zone";
   allow-update { none; };
   allow-transfer { trans_ip; };
 };

 zone "80.168.192.in-addr.arpa" IN {
    type master;
    file "80.168.192.zone";
     allow-update { none; };
     allow-transfer { trans_ip; };
 };
在/var/named/添加以下两个文件用来解析对应的服务器
vim /var/named/magedu.com.zone
$TTL 86400
$ORIGIN magedu.com.
@ IN  SOA magedu.com. admin.magedu.com. (
                20161010;
                1D;
                1H;
                5D;
                1H;
);
        IN  NS    ns1
        IN  NS    ns2
        IN  MX  10   mx
ns1     IN  A     192.168.80.100
ns2     IN  A     192.168.80.101
mx      IN  A     192.168.80.200
www     IN  A     192.168.80.100
www     IN  A     192.168.80.101
web     IN  CNAME    www
         IN  NS    ns1.cdn             //子域授权
   IN  NS    ns2.cdn
ns1.cdn     IN  A     192.168.80.110
ns2.cdn     IN  A     192.168.80.111
www.cdn     IN  A     192.168.80.110
www.cdn     IN  A     192.168.80.111
 
vim /var/named/80.168.192.zone
$TTL 86400
80.168.192.in-addr.arpa.  IN SOA magedu.com. admin.magedu.com. (
                20161010;
                1D;
                1H;
                5D;
                1H;
);

80.168.192.in-addr.arpa. IN  NS  ns1.magedu.com.
80.168.192.in-addr.arpa. IN  NS  ns2.magedu.com.
200.80.168.192.in-addr.arpa. IN  PTR  mx.magedu.com.
100.80.168.192.in-addr.arpa. IN  PTR  www.magedu.com.
101.80.168.192.in-addr.arpa. IN  PTR  www.magedu.com.

80.168.192.in-addr.arpa. IN  NS  ns1.cdn.magedu.com.
80.168.192.in-addr.arpa. IN  NS  ns2.cdn.magedu.com.
110.80.168.192.in-addr.arpa. IN  PTR  www.cnd.magedu.com.
111.80.168.192.in-addr.arpa. IN  PTR  www.cnd.magedu.com.

---------------------------------------------------------------------------------------
4、请描述一次完整的http请求处理过程;
 (1)客户端请求HTTP资源,服务器收到数据包发现是HTTP请求,则首先与客户端建立TCP的三次握手,
 (2)如果需要加密传输则在TCP建立后再次建立SSl的三次握手
 (3)连接建立后则开始传输数据
 (4)服务器依据用户请求的数据,构建响应报文
 (5)服务器首先查看本地缓存是否有用户需要的数据,如果有且没有过期则取出数据构建响应报文
 (6)本地缓存没有或已经过期,则查询后端缓存服务器有则取回本地,需要缓存则缓存,不需要则直接构建响应报文
 (7)如果缓存服务器没有则向后端服务器查询,后端服务器由则取回本地,并构建缓存,响应用户的请求
 (8)当用户请求的资源为动态时,可能需要查询后端的数据库服务器或则PHP服务器,
  同样能缓存则构建缓存不能则取回本地构建响应报文
 (9)如果后端服务器也没有则构建请求资源不存在通常错误代码为404
 (10)如果资源存在前端服务器构建响应报文并发送给客户端
 (11)客户端如果任然需要请求则只要在配置的超时时间内就可继续响应
 (12)当请求完毕,则结束建立的连接,依次为SSl 的三次握手, TCP三次握手
------------------------------------------------------------------------------------- 
5、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。
 http支持的处理模块有 prefork , worker  和  event
 prefork:
  一个进程下负责n个子进程,每个子进程一次处理一个请求,可同时处理的能力为N
  突发处理是效果好,在大并发时反而慢了
 worker:
  一个进程创建n个子进程,每个子进程又可以创建m个线程 每个线程一次处理一个请求,可同时处理的能力为 n*m
  平稳的处理能力,数据流叫平均
 event:
  一个进程创建N个子进程, 每个子进程同时处理多个请求, 可同时处理的能力n*m
  承受更高的并发负载
------------------------------------------------------------------------------
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);

 新建需要用到的目录文件
  mkdir /web/vhsots/{www1,www2} -pv
 添加用户
  useradd status
 生成密码w文件
  htpasswd -c /etc/httpd24/.htpasswd jim
 配置主页文件
  vim /web/vhosts/www1/index.html
   www1.stu5.com

  vim /web/vhosts/www2/index.html
   www2.stu5.com 
  
 更改创建文件和目录的属主和属组
  chown apache.apache /web/vhosts/ -r
  chwon apache.apache /etc/httpd24/.htpasswd
  
 编辑虚拟机的主配置文件/etc/httpd24/http.conf
  使用虚拟主机时,要关闭系统全局下提供的路径等而使用虚拟机自己专用的
 编辑配置文件添加两个虚拟主机
 
  ServerName www1.stu5.com
  DocumentRoot "/web/vhosts/www1"
  ErrorLog /var/log/httpd/www1.err
  CustomLog /vr/log/httpd/www1.access
    
  
   options None
   #AllowOverride None
   AuthType Basic
   AuthName "enter a name"
   AuthUserFile "/web/vhosts/www1/.htpasswd"
   require valid-user
  

  
 

 
  ServerName www2.stu5.com
  DocumentRoot "/web/vhosts/www2"
  ErrorLog /var/log/httpd/www2.err
  CustomLog /var/log/httpd/www2.access
 
 
  
  
--------------------------------------------------------------------------

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

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

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

 服务器端配置CA
 cd /etc/pki/CA
 (umask 077; openssl genrsa -out private/cakey.pem 2048)
 touch index.txt
 echo 01 > serial
 openssl req -new -x509 -in private/cakey.pem -out cacrt.pem -days 1000
 根据系统的提示输入证书信息

 配置客户端
 cd /etc/httpd/ssl/
 (umask 077; openssl -genrsa -out httpd.key 1024)
 openssl req -new -in httpd.key -out httpd.csr -days 365
 根据系统的提示输入证书的信息 (两次输入的信息要一致)
 scp httpd.csr  [email protected]:/tmp

 服务器端下发证书
 openssl ca -in  /tmp/httpd.csr -out certs/www2.stu5.com.crt/ -days 365
 scp certs/www2.stu5.com.crt  192.168.80.132/tmp

 客户端使用证书
 cp /tmp/www2.stu5.com.crt  /etc/http/ssl/

 http端安装SSL模块
 yum -y install mod-ssl.x86_64
 配置SSL 修改相关的路径
 由于编译安装所以修改vim /etc/http24/extra/httpd-ssl.conf
 ServerName www2.stu5.com
 DocumentRoot "/web/vhosts/www2"
 
 SSlEngin on
 sslprotocl all -SSlv2
 SSLCertificateFile /etc/http/ssl/www.magedu.com.crt
 SSLCertificateKeyFile /etc/http/ssl/httpd.key
 编辑http服务器的配置
 增加SSL模块
 并将SSL的路径添加主配置中
 Include /etc/httpd24/extra/httpd-ssl.conf
 
 重启服务器
---------------------------------------------------------------------------
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网络的主机访问;

 新建用户和组
  groupadd develop
  useradd gentoo -g  develop
  useradd centos -g develop
  useradd ubuntu
 给SAMBA添加密码
  smbpasswd -a  gentoo
  smbpasswd -a  centos
  smbpasswd -a  ubuntu
  使用命令后提示输入密码,输入两次后即可
   验证
    pdbedit -l
 新建用到的工作目录
  mkdir /data/
  给共享的目录授权
  setfacl -m g:develop:rxw /data/

 vim /etc/samba/smb.conf增加
  [shared]
  comment = share the /data/
  path = /data/
  wirte list = @develop

 编辑/etc/exports配置共享所允许的主机
  /data  172.16.0.0/16(rw)

 挂载文件
  mount -t nfs //172.16.0.100:/shared  /mnt/nfs
 要是挂载文件一直生效编辑配置文件
  vim /etc/fstab
  172.16.0.100:/shared /nfs/data nfs  defaults,_netdev 0 0
 验证
  smbstatus -b
 登录
  smbclient //172.16.0.100/shared -U gentoo

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

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

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

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

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

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

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

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

使用YUM安装vsftpd包,nfs包,pam_mysql包
编译安装mysql数据包


一、创建所有要的用户和组

 1、创建数据库管理用户和组
   在数据库安装的主机和共享数据目录的主机都需要安装
   两处的数据库组和用户必须拥有相同的用户ID和组ID
   如果不一样修改配置文件/etc/passwd, /etc/group
  groupadd -r mysql
  groupadd -g mysql -r mysql -d /mysql/data
  
 2、创建映射的账号
  useradd -s /sbin/nologin -d /ftproot ftpuser
  chmod go+rw /ftproot

二、编辑NFS共享(该目录为数据库的数据目录,编译MYSQL时要指定为位置在本地的挂在)
 vim /etc/exports
 /mysql/data 192.168.80.131(rw,no_root_squash)
 
三、在数据库程序的编译安装主机上挂载NFS共享
 
 NFS服务要已经启动
 挂载要注意防火墙和SELinux的拦截,配置允许通过
 并注意用户和组的ID是否一致,共享目录MYSQL组和用户是否有访问权限

 mount -t nfs 192.168.80.130:/mysql/data  /mysql/data
  
 安装Mysql服务器并配置虚拟用户

  tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
  cd /usr/local
  ln -s mysql-5.5.24-linux2.6-i686 mysql
  cd mysql
  chown -R mysql:mysql .
  scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/mysql/data

  CREATE DATABASE vsftpd;
  GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
  GRANT SELECT ON vsftpd.* TO vsftpd@'localhost' IDENTIFIED BY 'magedu';
  FLUSH PRIVILEGES;
  CREATE TABLE users (
    id INT  UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) BINARY NOT NULL,
    passwd CHAR(48) BINARY NOT NULL  );
  INSERT INTO users(name, passwd) VALUES('centos', password('magedu')),('fedora',password('magedu'));

四、配置PAM
 要查看数据包中PAM-MYSQL的生成的模块的位置,在配置文件总指定
 vim /etc/pam.d/vsftpd.mysql
 auth required /lib64/security/pam_mysql.so user=vsftpd passwd=magedu host=localhost db=vsftpd table=users usercolumn=name passwdcoloum=passwd crypt=2
 account required /lib/security/pam_mysql.so user=vsftpd passwd=magedu host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 

五、编辑vsftpd服务并配置
 vim /etc/vsftpd/vsftpd.conf
 local_enable=YES
 anonymous_enable=YES
 anon_upload_enable=NO
 anon_mkdir_write_enable=NO
 chroot_local_user=YES
 anon_max_rate=512000
 max_clients=200
 pam_service_name=vsftpd
 guest_enable=YES
 guest_username=ftpuser

六、启动服务即可开始共享
 新的数据库只要挂载NFS的共享数据目录,编译安装指定数据目录为挂在的位置即可