一、詳細描述一次加密通信的過程,結合圖示最佳。html
答:mysql
1. 拓撲圖linux
2. 加密通信的過程nginx
① 客戶端須要先獲取並信任CA機構的證書web
② 客戶端向Web服務器發送https請求sql
③ 服務器響應並處理請求,向客戶端發送本身的證書數據庫
④ 客戶端獲取服務器的證書,檢查證書的合法性,具體包括: apache
1. 該證書是不是由本身所信任的頒發機構頒發ubuntu
2. 該證書是否過時vim
3. 該證書是否已被吊銷
4. 主機名與證書中的是否一致
⑤ 證書驗證經過後,從證書中獲取Web服務器的公鑰。客戶端生成一個隨機數做爲加密用密鑰,使用公鑰進行加密,並傳送給Web服務器
⑥ Web服務器獲取客戶端發送來的密文,使用本身的私鑰進行解密,獲取隨機數。以後的通訊過程就使用該隨機數做爲密鑰進行對稱加密
⑦ 客戶端獲取到報文後,使用相同的隨機數進行解密
二、描述建立私有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
三、搭建一套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. 部署主DNS服務器:
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服務器宕機:
四、請描述一次完整的http請求處理過程;
答:
① 客戶端發起http請求,一般包含請求方法(GET | POST | PUT | HEAD),主機名host,請求資源記錄url,HTTP版本號,以及其餘請求首部
② web服務器根據本身的配置,接收請求或處理請求
③ web服務器處理請求,對請求報文進行解析,並獲取請求的資源及請求方法等相關信息
④ 訪問資源,依次獲取請求報文中請求的全部資源
⑤ 構建響應報文
⑥ 發送響應報文
⑦ 最終記錄訪問日誌
五、httpd所支持的處理模型有哪些,他們的分別使用於哪些環境。
答:
① prefork模型
工做特性:
一個主進程,負責生成n個子進程(被稱爲工做進程),每一個子進程處理一個請求,即便沒有請求,也會預先生成多個空閒進程以隨時等待請求到達
適用場景:
適用於沒有線程安全庫,須要避免線程兼容性問題的系統。若一個請求出現問題,不會影響到其餘請求
② worker模型
工做特性:
一個主進程,生成多個子進程,每一個子進程負責生成多個線程,每一個線程響應一個請求
適用場景:
線程一般會共享父進程的內存空間,所以,內存的佔用會減小一些。在高併發的場景下,由於比起prefork有更多的可用線程,表現會更優秀一些
③ event模型
工做特性:
一個主進程,生成m個子進程,每一個進程響應n個請求。該模型在httpd2.4版本中可做爲生產使用,httpd2.2版本中爲測試用
適用場景:
它解決了keep-alive場景下,長期被佔用的線程的資源浪費問題(某些線程由於被keep-alive,空掛在哪裏等待,中間幾乎沒有請求過來,甚至等到超時)。在event模型中,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又容許它釋放。這樣加強了高併發場景下的請求處理能力。
六、創建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服務
效果:
七、爲第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端口,須要重啓服務
效果:
八、創建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
//重載配置
效果:
九、搭建一套文件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服務器