全面分析RHCE7(紅帽認證工程師)考試題目之 ----WEB 服務器 篇
獨立Web服務
Web通信基本概念
基於B/S
服務端提供網頁
瀏覽器下載並顯示網頁
Hyper Text Markup Language (HTML)超文本標記語言
Hyper Text Transfer Protocol(http)超文本傳輸協議
RHEL7中的Web服務
軟件包:httpd
系統服務:httpd
提供的默認配置
Listen:監聽地址:端口(80)
ServerName:本站點註冊的DNS名稱
DcocumentRoot:網頁根目錄(/var/www/html)
DirectoryIndex:起始頁/首頁文件名(index.html)
一.搭建Web服務器
1.安裝httpd軟件
[root@server0 ~]# yum -y install httpd
2.啟動httpd服務,並設置為開機自啟
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# systemctl enable httpd.service
3.書寫網頁文件
[root@server0 ~]# echo My First Web > /var/www/html/index.html
4.安裝elinks軟件,並使用elinks瀏覽Web網站
[root@desktop0 ~]# yum -y install elinks.x86_64
[root@server0 ~]# elinks -dump 172.25.0.11
My First Web
二.配置DNS解析
1.修改主配置文件內容/etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
/ServerName
...
ServerName server0.example.com:80 #95行
...
2.重啟服務,並驗證
[root@server0 ~]# systemctl restart httpd
[root@desktop0 ~]# elinks -dump server0.example.com:80
My First Web
三.網頁根目錄(/var/www/html)
查看主配置文件內容/etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
/Docu
...
DocumentRoot "/var/www/html" #119行
...
例如:
客戶端訪問路徑:#elinks -dump server0.example.com/abc
服務端查找路徑:/var/www/html/abc/index.html
虛擬Web主機
由同一臺服務器提供多個不同的Web站點
區分方式
基於域名的虛擬主機
基於端口的虛擬主機
基於IP地址的虛擬主機(沒有人用 )
配置一個虛擬站點
配置文件路徑
/etc/httpd/conf/httpd.conf #主配置文件
/etc/httpd/conf.d/*.conf #從配置文件
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
...
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
主配置文件最後調用所有從配置文件
目的:
為了配置方便
為了精簡主配額文件
為每個虛擬站點添加配置
<VirtualHost IP地址:端口>
ServerName 此站點的DNS名稱
DocumentRoot 此站點的網頁根目錄
</VirtualHost>
1.在幫助文檔中找到虛擬站點配置文件模版
[root@server0 ~]# vi /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
2.建立配置文件 test01.conf
[root@server0 ~]# vi /etc/httpd/conf.d/test01.conf
<VirtualHost *:80>
DocumentRoot /var/www/test
ServerName www0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/nsd
ServerName webapp0.example.com
</VirtualHost>
2.建立目錄及相應的網頁內容
[root@server0 ~]# mkdir /var/www/test
[root@server0 ~]# mkdir /var/www/nsd
[root@server0 ~]# echo 'wo shi test' > /var/www/test/index.html
[root@server0 ~]# echo 'wo shi nsd' > /var/www/nsd/index.html
3.重啟httpd 服務
[root@server0 ~]# systemctl restart httpd.service
4.用elinks驗證
[root@desktop0 ~]# elinks -dump www0.example.com
wo shi test
[root@desktop0 ~]# elinks -dump webapp0.example.com
wo shi nsd
啟用虛擬Web主機,所有的站點都必須用虛擬Web主機來實現
保證 server0.example.com可以訪問
1.修改從配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/test01.conf
<VirtualHost *:80>
DocumentRoot /var/www/test
ServerName www0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/nsd
ServerName webapp0.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/abc
ServerName server0.example.com
</VirtualHost>
2. 重起httpd服務
httpd服務訪問控制
客戶集地址限制
使用<Directory>配置區段
每個文件夾自動繼承其父目錄的ACL訪問權限
除非針對子目錄有明確設置
<Directory 目錄的絕對路徑>
.. ..
Require all denied|granted
Require ip IP或網段地址
</Directory>
例:
Require all denied #禁止任何客戶機訪問
Require all granted #允許任何客戶機訪問
Require ip 172.0.0.1 ::1 172.25.0.11 #僅允許部分客戶機訪問
實現客戶集地址限制
1.創建目錄與網頁文件
[root@server0 ~]# mkdir /var/www/abc/private
[root@server0 ~]# echo 'xiao ke duo zhao 媽媽'> /var/www/abc/private/index.html
2.建立新的配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/test02.conf
<Directory "/var/www/abc/private">
Require ip 172.25.0.11 172.0.0.1 #僅允許本機訪問
</Directory>
3.重啟httpd服務
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# elinks -dump server0.example.com/private
xiao ke duo zhao 媽媽
[root@desktop0 ~]# elinks -dump server0.example.com/private
Forbidden
You don't have permission to access /private on this server.
思路:客戶端是否能夠訪問服務端資源
1.防火墻是否限制
2.服務本身的訪問控制
3.SELinux 是否限制
SELinux策略保護
1.安全上下文(標簽)
SELinux 會為文件打上標簽
[root@server0 ~]# semanage fcontext -l #查看SELinux給所有文件打的標簽
例:
[root@server0 ~]# ls -Zd /var/www/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/
使用自定義Web根目錄
題目: 調整Web站點http://server0.example.com的網頁 使用/webroot,作為此站點新的網頁目錄
1.修改配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/test01.conf
...
<VirtualHost *:80>
DocumentRoot /webroot
ServerName server0.example.com
</VirtualHost>
...
2.創建目錄與網頁文件
[root@server0 ~]# mkdir /webroot
[root@server0 ~]# echo 'wo shi webroot'> /webroot/index.html
3.修改訪問控制配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/test02.conf
...
<Directory "/webroot">
Require all granted
</Directory>
...
4.修改SELinux標簽值
[root@server0 ~]# chcon -R --reference=/var/www /webroot/
#將/var/www 的文件標簽 給 /webroot 文件目錄
[root@server0 ~]# ls -Zd /webroot/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /webroot/
5.重啟httpd服務驗證
[root@server0 ~]# systemctl restart httpd.service
[root@desktop0 ~]# elinks -dump server0.example.com
wo shi webroot
安全Web服務
https 安全的超文本協議 端口號:443
數字證書基礎
PKI公鑰基礎設施 Public Key Infrastructure
公鑰:主要用來加密數據
私鑰:主要用來解密數據(與相應的公鑰匹配)
數字證書:證明擁有著的合法性/權威性(單位名稱,有效期,公鑰,頒發機構及簽名)
Certificate Authority (CA) 數字證書授權中心:負責證書的申請/審核/頒發/鑒定/撤銷等管理工作
//本文使用的數字證書 ,公鑰,私鑰 均為網上下載
//如果想要了解如何搭建 CA服務器 可以瀏覽 http://blog.51cto.com/13558754/2057718
搭建https
可以訪問https://server0.example.com
1.安裝mod_ssl軟件包
[root@server0 ~]# yum -y install mod_ssl.x86_64
2.部署網站的證書
[root@server0 tls]# cd /etc/pki/tls/certs/A
[root@server0 certs]# wget http://172.25.254.254/pub/tls/certs/server0.crt
3.部署網站的根證書
[root@server0 tls]# cd /etc/pki/tls/certs/
[root@server0 certs]# wget http://172.25.254.254/pub/example-ca.crt
4.部署私鑰
[root@server0 certs]# cd /etc/pki/tls/private/
[root@server0 private]# wget http://172.25.254.254/pub/tls/private/server0.key
5.修改配置文件
[root@server0 private]# vim /etc/httpd/conf.d/ssl.conf
...
DocumentRoot "/webroot" #59行
ServerName server0.example.com:443
...
SSLCertificateFile /etc/pki/tls/certs/server0.crt #100行
...
SSLCertificateKeyFile /etc/pki/tls/private/server0.key #107行
...
SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt #122行
...
6.重啟服務
[root@server0 private]# systemctl restart httpd.service
7.驗證
[root@desktop0 ~]# firefox https://server0.example.com
//如果想要了解更多關於 搭建https服務的知識可以瀏覽 http://blog.51cto.com/13558754/2057837
部署動態網站
部署並測試WSGI站點
題目: 為站點webapp0.example.com配置提供動態Web
要求:
此虛擬主機監聽在端口8909
測試網頁為webinfo.wsgi
從瀏覽器訪問 http://webapp0.example.com:8909 可以接收到動態生成的Web界面
1.安裝mod_wsgi軟件
[root@server0 /]# yum -y install mod_wsgi.x86_64
2.切換到相應/var/www/nsd目錄下下載動態頁面
[root@server0 /]# cd /var/www/nsd/
[root@server0 nsd]# wget http://172.25.254.254/pub/materials/webinfo.wsgi
[root@server0 nsd]# cat webinfo.wsgi
3.在Desktop0上查看,可以看到源代碼
[root@desktop0 ~]# firefox webapp0.example.com/webinfo.wsgi
4.server0上修改
[root@server0 nsd]# vim /etc/httpd/conf.d/test01.conf
...
<VirtualHost *:80>
DocumentRoot /var/www/nsd
ServerName webapp0.example.com
wsgiscriptalias / /var/www/nsd/webinfo.wsgi
</VirtualHost>
...
5.重啟服務,驗證
[root@server0 nsd]# systemctl restart httpd.service
[root@desktop0 ~]# elinks -dump webapp0.example.com
UNIX EPOCH time is now: 1509700659.44
#UINX 時間戳:自1970-1-1 0:0:0 到達當前所經過的秒數
6.修改webapp0.example.com端口號8909
[root@server0 nsd]# vim /etc/httpd/conf.d/test01.conf
Listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/nsd
ServerName webapp0.example.com
wsgiscriptalias / /var/www/nsd/webinfo.wsgi
</VirtualHost>
7.重啟服務,(發現不能啟動)
[root@server0 nsd]# systemctl restart httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
SELinux策略保護
標配Web端口
使用semanage工具可查看
當嘗試監聽非標配端口時,SELinux會阻止
導致httpd 服務啟動失敗
查看/var/log/messages文件中會有記錄
8.SELinux限制8909端口
[root@server0 nsd]# semanage port -l | grep http #查看http允許的端口
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@server0 nsd]# semanage port -a -t http_port_t -p tcp 8909 #添加8909端口加入http允許端口中
[root@server0 nsd]# semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 8909, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
[root@server0 nsd]# systemctl restart httpd.service #重啟成功
驗證
[root@desktop0 ~]# elinks -dump webapp0.example.com:8909
UNIX EPOCH time is now: 1509767472.39
關於web服務器 在RHCE7的考試中有這麽5道題 :
實現一個Web服務器
為 http://server0.example.com 配置 Web 服務器:
從URL地址 http://classroom.example.com/pub/materials/station.html 下載一個主頁文件,並將該文件重命名為 index.html
將文件 index.html 拷貝到您的 web 服務器的 DocumentRoot 目錄下
不要對文件 index.html 的內容進行任何修改
[root@system1 ~]#yum -y install httpd
[root@system1 ~]#vim /usr/local/share/
[root@system1 ~]#vim /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf #尋找虛擬主機模版
[root@system1 ~]#vim /etc/httpd/conf.d/test01.conf
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName server0.example.com
</VirtualHost>
[root@system1 ~]#wget -O /var/www/html/index.html http://classroom/pub/materials/station.html
[root@system1 ~]#systemctl restart httpd
[root@system1 ~]#systemctl enable httpd
[root@system2 ~]# curl http://server0.example.com
配置安全Web服務
為站點 http://server0.example.com 配置TLS加密:
一個已簽名證書從 http://classroom.example.com/pub/tls/certs/server0.crt 獲取
此證書的密鑰從 http://classroom.example.com/pub/tls/private/server0.key 獲取
此證書的簽名授權信息從 http://classroom.example.com/pub/example-ca.crt 獲取
[root@system1 ~]# yum -y install mod_ssl.x86_64
[root@system1 ~]# cd /etc/pki/tls/certs/
[root@system1 ~]# wget http://classroom/pub/example-ca.crt
[root@system1 ~]# wget http://classroom/pub/tls/certs/server0.crt
[root@system1 ~]# cd ../private/
[root@system1 ~]# wget http://classroom/pub/tls/private/server0.key
[root@system1 ~]# vim /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName www.example.com:443
...
SSLCertificateFile /etc/pki/tls/certs/server0.crt
SSLCertificateKeyFile /etc/pki/tls/private/server0.key
SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
[root@system1 ~]# systemctl restart httpd
[root@system2 ~]# firefox https://server0.example.com
實現一個Web服務器
為 http://server0.example.com 配置 Web 服務器:
從URL地址 http://classroom.example.com/pub/materials/station.html 下載一個主頁文件,並將該文件重命名為 index.html
將文件 index.html 拷貝到您的 web 服務器的 DocumentRoot 目錄下
不要對文件 index.html 的內容進行任何修改
[root@system1 ~]# mkdir /var/www/virtual
[root@system1 ~]# wget -O /var/www/virtual/index.html http://classroom/pub/materials/www.html
[root@system1 ~]# vim /etc/httpd/conf.d/test01.conf
<VirtualHost *:80>
DocumentRoot /var/www/virtual
ServerName www0.example.com
</VirtualHost>
[root@system1 ~]# useradd fleyd
[root@system1 ~]# setfacl -m u:fleyd:rwx /var/www/virtual/
[root@system1 ~]# systemctl restart httpd
[root@system2 ~]# curl www0.example.com
配置Web內容訪問
在您的 server0 web服務器的 DocumentRoot 目錄下創建一個名為 private 的目錄,要求如下:
從 http://classroom.example.com/pub/materials/private.html 下載一個文件副本到這個目錄,並且命名為 index.html
不要對這個文件的內容做任何修改
從 system1 上,任何人都可以瀏覽 private 的內容,但是從其他系統不能訪問這個目錄的內容
[root@system1 ~]# wget -O /var/www/html/private/index.html http://classroom/pub/materials/private.html
[root@system1 ~]# vim /etc/httpd/conf/httpd.conf #尋找模版
[root@system1 ~]# vim /etc/httpd/conf.d/test02.conf
<Directory "/var/www/html/private">
Require ip 127.0.0.1 ::1 172.25.0.11
</Directory>
[root@system1 ~]# systemctl restart httpd.service
[root@system1 ~]# firefox http://server0.example.com/private
[root@system2 ~]# firefox http://server.example.com/private
實現動態Web內容
在system1 上配置提供動態Web內容,要求如下:
動態內容由名為 webapp0.example.com 的虛擬主機提供
虛擬主機偵聽在端口 8909
從 http://classroom.example.com/pub/materials/webinfo.wsgi 下載一個腳本,然後放在適當的位置,無論如何不要修改此文件的內容
客戶端訪問 http://webapp0.example.com:8909 可接收到動態生成的 Web 頁
此 http://webapp0.example.com:8909/必須能被 example.com 域內的所有系統訪問
[root@system1 ~]#mkdir /var/www/webapp0
[root@system1 ~]#cd /var/www/webapp0
[root@system1 ~]#wget http://classroom/pub/materials/webinfo.wsgi
[root@system1 ~]#vim /etc/httpd/conf.d/test01.conf
listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/webapp0
wsgiscriptalias / /var/www/webapp0/webinfo.wsgi
ServerName webapp0.example.com
</VirtualHost>
[root@system1 ~]#yum -y install mod_wsgi
[root@system1 ~]#semanage port -l | grep http
[root@system1 ~]#semanage port -a -t http_port_t -p tcp 8909
[root@system1 ~]#vim /etc/httpd/conf.d/test01.conf
[root@system1 ~]#systemctl restart httpd
[root@system2 ~]# firefox http://webapp0.example.com:8909
全面分析RHCE7(紅帽認證工程師)考試題目之 ----WEB 服務器 篇