1. 程式人生 > >全面分析RHCE7(紅帽認證工程師)考試題目之 ----WEB 服務器 篇

全面分析RHCE7(紅帽認證工程師)考試題目之 ----WEB 服務器 篇

from 基本概念 文件名 不同 forbidden log 配置dns protoc 標簽

HTTP服務基礎

獨立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 服務器 篇