1、獨立Web站點的快速部署html
目標:python
本例要求爲 http://server0.example.com 配置Web站點,要求以下:web
1> 從http://classroom/pub/materials/station.html下載一個主頁文件,將其重命名爲 index.html
2> 將此文件拷貝到站點的 DocumentRoot 目錄下,不要對文件 index.html 的內容做任何修改
3> 使用 elinks 或firefox 瀏覽上述Web站點vim
方案:瀏覽器
Web網站服務端:軟件包httpd、系統服務httpd安全
Web網站瀏覽器:軟件包elinks或fireox服務器
傳輸協議及端口:TCP 80app
Web網站服務端配置文件: webapp
1> /etc/httpd/conf/httpd.conf
2> /etc/httpd/conf.d/*.conf
tcp
默認首頁文件:index.html
httpd網站文檔的默認根目錄:/var/www/html
URL(Uniform Resource Locator,統一資源定位器)網址的基本組成:
http://服務器地址[:端口號]/目錄/文件名
對於須要驗證的FTP資源,還須要指定用戶名密碼信息:
ftp://用戶名:密碼@服務器地址[:端口號]/目錄/文件名
步驟:
步驟一:構建及部署網站服務器
1)安裝軟件包httpd
[root@server0 ~]# yum -y install httpd
.. ..
2)部署網頁
[root@server0 ~]# cd /var/www/html/ //進入網頁目錄
[root@server0 html]# wget http://classroom/pub/materials/station.html -O index.html //下載網頁
.. ..
2016-11-26 19:33:49 (1.36 MB/s) - ‘index.html’ saved [14/14]
[root@server0 html]# cat index.html //檢查網頁文件
Default Site.
3)啓動系統服務httpd,並設置開機自啓
[root@server0 html]# systemctl restart httpd
[root@server0 html]# systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
步驟二:訪問網站服務器
1)使用elinks瀏覽器查看
Elinks瀏覽器能夠在命令行模式顯示出網頁文本,常常用來測試網站的可用性。
[root@desktop0 ~]# yum -y install elinks //安裝elinks
.. ..
[root@desktop0 ~]# elinks -dump http://server0.example.com/ //訪問指定網址
Default Site.
2)使用firefox瀏覽器查看
Firefox瀏覽器支持更多網頁特性,是訪問複雜網頁、網址的優秀工具。
在桌面終端直接運行「firefox http://server0.examle.com/」,或者經過菜單快捷方式打開Firefox瀏覽器再輸入對應網址,均可以看到目標網頁(以下圖所示)。
2、虛擬Web主機的部署
目標:
本例要求爲server0擴展Web站點,新建虛擬主機 http://www0.example.com,具體要求以下:
1> 設置 DocumentRoot 爲 /var/www/virtual
2> 從 http://classroom/pub/materials/www.html 下載主頁文件,並重命名爲 index.html
3> 不要對文件 index.html 的內容做任何修改,將其放到此虛擬主機的 DocumentRoot 目錄下
4> 確保 fleyd 用戶能在 /var/www/virtual 目錄建文件
5> 確保站點 http://server0.example.com 仍然可用
方案:
單一網站平臺(好比172.25.0.11):
虛擬主機平臺(好比172.25.0.11):
多個虛擬主機站點的典型設置(/etc/httpd/conf.d/*.conf):
<VirtualHost *:80>
ServerName 網站1的FQDN
DocumentRoot 網站1的網頁根目錄
</VirtualHost>
<VirtualHost *:80>
ServerName 網站2的FQDN
DocumentRoot 網站2的網頁根目錄
</VirtualHost>
.. ..
步驟:
步驟一:部署網頁文檔
1)創建網頁目錄
[root@server0 ~]# mkdir /var/www/virtual
[root@server0 ~]# useradd fleyd
[root@server0 ~]# setfacl -m u:fleyd:rwx /var/www/virtual/
2)部署網頁文件
[root@server0 ~]# cd /var/www/virtual/
[root@server0 virtual]# wget http://classroom/pub/materials/www.html -O index.html
.. ..
100%[=====================>] 14 --.-K/s in 0s
2016-11-26 20:01:14 (826 KB/s) - ‘index.html’ saved [14/14]
[root@server0 virtual]# cat index.html //檢查網頁文件
Virtual Site.
步驟二:配置虛擬主機 http://www0.example.com/
1)爲新站點建立獨立的配置文件
[root@server0 virtual]# vim /etc/httpd/conf.d/01-www0.conf
<VirtualHost *:80>
ServerName www0.example.com
DocumentRoot /var/www/virtual
</VirtualHost>
[root@server0 virtual]# httpd -t //確保語法檢查OK
Syntax OK
2)重啓系統服務httpd
[root@server0 virtual]# systemctl restart httpd
步驟三:訪問虛擬主機 http://www0.example.com/
訪問此虛擬站點,能夠看到預期的網頁內容:
[root@desktop0 ~]# elinks -dump http://www0.example.com/
Virtual Site.
步驟四:完善原始站點 http://server0.example.com/
須要注意的是,原始的獨立站點可能出現異常,訪問時並非原始的網頁:
[root@desktop0 ~]# elinks -dump http://server0.example.com/
Virtual Site.
緣由是一旦啓用虛擬站點機制之後:
若要解決此異常,須要將原始站點轉換爲第一個虛擬主機,啓用順序的設置能夠經過文件名開頭的數字來實現。
1)爲原始站點創建虛擬主機配置
[root@server0 ~]# vim /etc/httpd/conf.d/00-default.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /var/www/html
</VirtualHost>
2)重啓系統服務httpd
[root@server0 virtual]# systemctl restart httpd
3)訪問兩個虛擬站點,確保各自的網頁內容正確
[root@desktop0 ~]# elinks -dump http://server0.example.com/
Default Site.
[root@desktop0 ~]# elinks -dump http://www0.example.com/
Virtual Site.
3、配置網頁內容訪問
目標:
本例要求在 Web 網站 http://server0.example.com 的 DocumentRoot 目錄下建立一個名爲 private 的子目錄,要求以下:
1> 從 http://classroom/pub/materials/private.html 下載一個文件副本到這個目錄,重命名爲 index.html
2> 不要對文件 index.html 的內容做任何修改
3> 從 server0 上,任何人均可以瀏覽 private 的內容,可是從其餘系統不能訪問這個目錄的內容
方案:
配置Web內容的訪問控制須要添加Directory區段,主要形式可參考
<Directory "父目錄路徑">
Require all denied //上層目錄拒絕任何訪問
</Directory>
<Directory "子目錄1路徑">
Require all granted //子目錄1容許任何訪問
</Directory>
<Directory "子目錄2路徑">
Require ip IP或網段地址 .. .. //子目錄2容許少數客戶機
</Directory>
步驟:
步驟一:部署網頁子目錄及文檔
1)創建子目錄
[root@server0 ~]# mkdir /var/www/html/private
2)部署網頁
[root@server0 ~]# cd /var/www/html/private
[root@server0 private]# wget http://classroom/pub/materials/private.html -O index.html
.. ..
2016-11-26 20:30:28 (1.90 MB/s) - ‘index.html’ saved [14/14]
[root@server0 private]# cat index.html //檢查網頁文件
Private Site.
步驟二:爲指定的網頁子目錄限制訪問
在httpd服務的標準配置中,根目錄 / 默認拒絕任何訪問,但網頁目錄/var/www/默認容許任何訪問。所以,只須要爲個別子目錄增長訪問控制便可。
1)調整虛擬站點server0.example.com的配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/00-default.conf
.. ..
<Directory "/var/www/html/private">
Require ip 127.0.0.1 ::1 172.25.0.11
</Directory>
2)重啓系統服務httpd
[root@server0 ~]# systemctl restart httpd
步驟三:測試目錄訪問限制
1)從desktop0上訪問http://server0.example.com/private/被拒絕
[root@desktop0 ~]# elinks -dump http://server0.example.com/private/
Forbidden
You don't have permission to access /private/ on this server.
2)從desktop0上訪問http://server0.example.com/仍然是正常的
[root@desktop0 ~]# elinks -dump http://server0.example.com/
Default Site.
3)從server0本機上訪問http://server0.example.com/private/也不受限制
[root@server0 ~]# elinks -dump http://server0.example.com/private/
Private Site.
4、使用自定Web根目錄
目標:
本例要求調整 Web 站點 http://server0.example.com 的網頁目錄,要求以下:
1> 新建目錄 /webroot,做爲此站點新的網頁目錄
2> 從 http://classroom/pub/materials/station.html 下載一個文件副本到這個目錄,重命名爲 index.html
3> 不要對文件 index.html 的內容做任何修改
4> 確保站點 http://server0.example.com 仍然可訪問
方案:
在SELinux強制啓用模式下,增長新的合規網頁目錄的方法:
1)參照標準目錄,重設新目錄的屬性
chcon [-R] --reference=模板目錄 新目錄
或者
2)將新目錄增長到預設的標準Web目錄範圍
semanage fcontext -a -t httpd_sys_content_t '新目錄(/.*)?'
步驟:
步驟一:部署網頁目錄及文檔
1)創建網頁目錄
[root@server0 ~]# mkdir /webroot
2)部署網頁文件
[root@server0 ~]# cd /webroot/
[root@server0 webroot]# wget http://classroom/pub/materials/station.html -O index.html
.. ..
2016-11-26 20:01:14 (826 KB/s) - ‘index.html’ saved [14/14]
[root@server0 webroot]# cat index.html //檢查網頁文件
Default Site.
步驟二:調整虛擬站點http://server0.example.com/的配置
1)修改配置文件
[root@server0 ~]# vim /etc/httpd/conf.d/00-default.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtualHost>
.. ..
2)重啓系統服務httpd
[root@server0 ~]# systemctl restart httpd
步驟三:確保虛擬站點http://server0.example.com/仍然能夠訪問
1)未調整網頁目錄SELinux上下文件的狀況
爲虛擬站點http://server0.example.com/更換了新的網頁目錄之後,從瀏覽器訪問將會失敗,只能看到紅帽測試頁。
[root@desktop0 ~]# elinks -dump http://server0.example.com/
Red Hat Enterprise Linux Test Page
This page is used to test the proper operation of the Apache HTTP server
after it has been installed. If you can read this page, it means that the
Apache HTTP server installed at this site is working properly.
.. ..
針對此問題,能夠參考目錄/var/www的屬性爲網頁目錄/webroot設置SELinux安全上下文。
[root@server0 ~]# chcon -R --reference=/var/www /webroot/
[root@server0 ~]# ls -Z /webroot/index.html //確認結果
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /webroot/index.html
2)未配置目錄內容訪問的狀況
儘管已經調整過/webroot的SELinux安全上下文,可是從瀏覽器訪問此虛擬站點時仍然會被拒絕,仍是隻能看到紅帽測試頁。
還須要修改對應的配置文件,添加內容訪問控制:
[root@server0 ~]# vim /etc/httpd/conf.d/00-default.conf
<VirtualHost *:80>
ServerName server0.example.com
DocumentRoot /webroot
</VirtualHost>
<Directory "/webroot">
Require all granted
</Directory>
<Directory "/webroot/private">
Require ip 127.0.0.1 ::1 172.25.0.11
</Directory>
[root@server0 ~]# systemctl restart httpd //重啓httpd服務
若要保持原有private子目錄,建議也拷貝過來:
[root@server0 ~]# cp -rf /var/www/html/private/ /webroot/
3)最終訪問測試
從瀏覽器能成功訪問調整後的虛擬站點http://server0.example.com/。
[root@desktop0 ~]# elinks -dump http://server0.example.com/
Default Site.
5、配置安全Web服務
目標:
本例要求爲站點 http://server0.example.com 配置TLS加密
1> 一個已簽名證書從如下地址獲取 http://classroom/pub/tls/certs/server0.crt
2> 此證書的密鑰從如下地址獲取 http://classroom/pub/tls/private/server0.key
3> 此證書的簽名受權信息從如下地址獲取http://classroom/pub/example-ca.crt
方案:
安全Web傳輸協議及端口:TCP 443
訪問HTTP站點(未加密):http://server0.example.com/
訪問HTTPS站點(加密):https://server0.example.com/
爲httpd服務端實現TLS加密的條件:1)啓用一個 mod_ssl 模塊;2)提供加密的素材:網站服務器的數字證書、網站服務器的私鑰、根證書(證書頒發機構的數字證書)
TLS證書部署位置:/etc/pki/tls/certs/*.crt
TLS私鑰部署位置:/etc/pki/tls/private/*.key
步驟:
步驟一:配置HTTPS網站服務器
1)安裝mod_ssl模塊軟件包
[root@server0 ~]# yum -y install mod_ssl
.. ..
2)部署密鑰、證書等素材
[root@server0 ~]# cd /etc/pki/tls/certs/
[root@server0 certs]# wget http://classroom/pub/example-ca.crt
.. ..
2016-11-27 01:04:51 (116 MB/s) - ‘example-ca.crt’ saved [1220/1220]
[root@server0 certs]# wget http://classroom/pub/tls/certs/server0.crt
.. ..
2016-11-27 01:04:06 (62.1 MB/s) - ‘server0.crt’ saved [3505/3505]
[root@server0 certs]# ls *.crt //確認部署結果
ca-bundle.crt example-ca.crt server0.crt
ca-bundle.trust.crt localhost.crt
[root@server0 certs]# cd /etc/pki/tls/private/
[root@server0 private]# wget http://classroom/pub/tls/private/server0.key
.. ..
2016-11-27 01:07:09 (39.0 MB/s) - ‘server0.key’ saved [916/916]
3)爲SSL加密網站配置虛擬主機
[root@server0 ~]# vim /etc/httpd/conf.d/ssl.conf
Listen 443 https
.. ..
<VirtualHost _default_:443>
DocumentRoot "/var/www/html" //網頁目錄
ServerName server0.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 //根證書
4)重啓系統服務httpd
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# netstat -antpu | grep httpd //確認已監聽80、443端口
tcp6 0 0 :::443 :::* LISTEN 7954/httpd
tcp6 0 0 :::80 :::* LISTEN 7954/httpd
步驟二:驗證HTTPS加密訪問
使用firefox瀏覽器訪問加密站點https://server0.example.com/,能夠看到頁面提示未信任鏈接「Untrusted Connection」(以下圖所示)。
若要繼續訪問,須要在頁面下方單擊超連接「I Understand the Risks」,表示用戶已理解相關風險。而後在展開的頁面內點擊「Add Exception」按鈕(以下圖所示)。
彈出添加安全例外對話窗口(以下圖所示),單擊界面左下角的「Confirm Security Exception」按鈕確認安全例外。
確認成功後便可看到對應的網頁內容(以下圖所示)。
6、部署並測試WSGI站點
目標:
本例要求爲站點 webapp0.example.com 配置提供動態Web內容,要求以下:
1> 此虛擬主機偵聽在端口8909
2> 測試網頁從如下地址下載,不要做任何更改http://classroom/pub/materials/webinfo.wsgi
3> 從瀏覽器訪問 http://webapp0.example.com:8909 可接收到動態生成的 Web 頁面
4> 此站點必須能被 example.com 域內的全部系統訪問
方案:
爲httpd增長對Python網頁程序的支持,能夠安裝mod_wsgi模塊。關於此模塊的配置說明,建議參考軟件包提供的readme文檔。
在SELinux處於Enforcing模式時,若要開放非80、81等常規Web端口,須要調整SELinux保護策略。
步驟:
步驟一:部署動態網頁文檔
1)建立網頁目錄
[root@server0 ~]# mkdir /var/www/webapp0
2)部署webinfo.wsgi網頁程序
[root@server0 ~]# cd /var/www/webapp0
[root@server0 webapp0]# wget http://classroom/pub/materials/webinfo.wsgi
.. ..
2016-11-27 01:52:26 (16.0 MB/s) - ‘webinfo.wsgi’ saved [397/397]
[root@server0 webapp0]# cat webinfo.wsgi //檢查下載文件
#!/usr/bin/env python
import time
.. ..
步驟二:配置新的虛擬主機http://webapp0.example.com:8909/
1)安裝mod_wsgi模塊軟件包
[root@server0 ~]# yum -y install mod_wsgi
.. ..
2)爲新虛擬主機創建配置
[root@server0 ~]# vim /etc/httpd/conf.d/02-webapp0.conf
Listen 8909
<VirtualHost *:8909>
DocumentRoot /var/www/webapp0
ServerName webapp0.example.com
WSGIScriptAlias / /var/www/webapp0/webinfo.wsgi
</VirtualHost>
3)調整SELinux策略,容許Web服務使用8909端口
列出當前許可的Web端口:
[root@server0 ~]# semanage port -l | grep ^http_port
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
添加新的Web端口:
[root@server0 ~]# semanage port -a -t http_port_t -p tcp 8909
[root@server0 ~]#
確認配置結果:
[root@server0 ~]# semanage port -l | grep ^http_port
http_port_t tcp 8909, 80, 81, 443, 488, 8008, 8009, 8443, 9000
4)重啓系統服務httpd
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# netstat -antpu | grep httpd //確認已監聽8909端口
tcp6 0 0 :::443 :::* LISTEN 2477/httpd
tcp6 0 0 :::8909 :::* LISTEN 2477/httpd
tcp6 0 0 :::80 :::* LISTEN 2477/httpd
步驟三:測試動態網頁效果
使用elinks或firefox訪問此動態站點http://webapp0.example.com:8909/。
多刷新訪問幾回,每次看到的是動態網頁內容,內容並不固定。
[root@desktop0 ~]# elinks -dump http://webapp0.example.com:8909/ UNIX EPOCH time is now: 1480184916.52 //第1次訪問 [root@desktop0 ~]# elinks -dump http://webapp0.example.com:8909/ UNIX EPOCH time is now: 1480184919.21 //第2次訪問 [root@desktop0 ~]# elinks -dump http://webapp0.example.com:8909/ UNIX EPOCH time is now: 1480184951.99 //第3次訪問