Related Posts Plugin for WordPress, Blogger...

1、前言

本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,分別實作簡單網頁服務及虛擬主機 Virtual Host 設定,最後則是實作網頁中需要保護網頁時可以透過 .htaccess 機制進行保護,關於 Apache 網頁伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Deployment Guide Chapter 14. Web Servers。以下為 Apache 網頁伺服器實作環境:(若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可(yum -y install policycoreutils-python)。(請尊重 Weithenn 的辛勞!!)

文章目錄

1、前言
2、實作環境
3、安裝 Apache 網頁伺服器套件
4、設定 IPTables 防火牆規則
5、修改 Apache 設定檔
6、修改 SELinux 設定值
7、啟動 Apache 服務
8、虛擬主機 Virtual Host 設定
9、設定 Apache 支援 .htaccess 保護功能

2、實作環境

  • OS: CentOS 6.0 (32 bit)
  • Apache 套件資訊: httpd-2.2.15-5.el6.centos.i686
  • Apache 設定檔: /etc/httpd/conf/httpd.conf
  • IPTables 防火牆: TCP 協定 Port 80
  • SELinux 權限: httpd_sys_content_t
  • Apache 根目錄預設路徑: /var/www/html
  • Apache 根目錄變更後路徑: /home/web

3、安裝 Apache 網頁伺服器套件

請使用 yum 指令搭配 Apache 套件名稱 httpd 即可進行套件安裝。(請尊重 Weithenn 的辛勞!!)
#yum -y install httpd               //安裝 Apache 套件
#rpm -qa httpd                       //查詢 Apache 套件版本
  httpd-2.2.15-5.el6.centos.i686
#rpm -qc httpd | grep httpd.conf$  //查詢 Apache 設定檔路徑
  /etc/httpd/conf/httpd.conf


4、設定 IPTables 防火牆規則

Apache 網頁服務屆時啟動會 Listen TCP 協定 Port 80(HTTP)、443(HTTPs),因此必須修改 IPTables 防火牆規則以便網頁服務啟動後可進行測試,請修改 IPTables 防火牆規則設定檔 「/etc/sysconfig/iptables」 加上允許 TCP Port 80、443 規則,修改防火牆規則後請使用指令 「service iptables restart」 重新啟動防火牆服務,以便防火牆規則套用生效,並且使用 「service iptables status」 指令確定目前防火牆規則是否允許 TCP Port 80。
#vi /etc/sysconfig/iptables                    //修改防火牆規則(加入如下二行)
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
#service iptables restart                      //重新啟動防火牆服務
#service iptables status | grep -E '80|443' //查看防火牆規則是否套用生效
  5    ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:80
  6    ACCEPT  tcp  --  0.0.0.0/0  0.0.0.0/0   state NEW tcp dpt:443
#chkconfig httpd on                            //開機自動啟動 Apache 服務


5、修改 Apache 設定檔

修改 Apache 設定檔 「/etc/httpd/conf/httpd.conf」,主要為修改網頁根目錄 「DocumentRoot」 設定,將根目錄路徑由預設 「/var/www/html」 修改至「/home/web」 掛載點,下列僅列出 Apache 設定檔中需要修改的地方其預設值及修改後內容。(請尊重 Weithenn 的辛勞!!)
#cd /etc/httpd/conf                //切換至 Apache 設定檔資料夾
#cp httpd.conf httpd.conf.bak     //備份 Apache 設定檔
#vi httpd.conf                      //修改 Apache 設定檔
  DocumentRoot "/var/www/html"       //預設值,網頁根目錄
  DocumentRoot "/home/web"           //修改後
  <Directory "/var/www/html">        //預設值,網頁根目錄設定
  <Directory "/home/web">            //修改後

接著建立屆時 Apache 網頁伺服器測試首頁「/home/web/index.html」,利用「echo」指令將字串「Apache Work!!」送入測試首頁檔案內。
#echo 'Apache Work!!' > /home/web/index.html

6、修改 SELinux 設定值

修改 SELinux 安全機制設定值,因為將 Apahe 網頁伺服器網頁根目錄由 「/var/www/html」 修改至 「/home/web」,因此資料夾其 SELinux 安全機制的權限勢必與原來不同,若不修改屆時啟動 Apache 服務時便可能會因為 SELinux 權限問題造成無法啟動 Apache 服務的狀況。(請尊重 Weithenn 的辛勞!!)
#ls -dZ /var/www/html /home/web
  drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/web
  drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

接著透過「semanage fcontext -a -t」指令配合 SELinux 權限 「httpd_sys_content_t」,指定「/home/web」資料夾及所有子資料夾及檔案都設定此權限為「SELinux預設權限」,之後使用「restorecon -Rv」指令把 /home/web 資料夾還原至剛才設定的 SELinux 預設權限,完成套用權限動作後再次查看二個資料夾 SELinux 權限便一模一樣。
#semanage fcontext -a -t httpd_sys_content_t "/home/web(/.*)?"  //設定 SELinux 預設權限
#restorecon -Rv /home/web           //還原 SELinux 權限    
#ls -dZ /var/www/html /home/web    //查看資料夾 SELinux 權限
  drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /home/web
  drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html


7、啟動 Apache 服務

修改 SELinux 安全機制權限設定後,可以放心啟動 Apache 網頁服務,請使用指令「service httpd start」啟動 Apache 服務,並且於服務啟動後使用「netstat」指令查看系統是否開啟了 TCP Port 80,以及「ps」指令查看 Apache 執行序(httpd)是否運作。
#service httpd start         //啟動 Apache 服務
  Starting httpd:                                            [  OK  ]
#netstat -tunpl | grep :80  //查看是否開啟 Port 80
  tcp  0  0 :::80  :::*    LISTEN     904/httpd
#ps aux |grep httpd          //查看 httpd 執行序
apache  906  0.0  0.2  12680  2132 ?    S   15:58   0:00 /usr/sbin/httpd
apache  907  0.0  0.2  12680  2132 ?    S   15:58   0:00 /usr/sbin/httpd
  ...略...

啟動 Apache 網頁服務成功後,開啟瀏覽器測試 Apache 網頁服務是否真的運作以及看到剛才建立的測試首頁。

8、虛擬主機 Virtual Host 設定

簡單說虛擬主機 Virtual Host 為讓 Apache 網頁伺服器可以同時運作多個網站的機制,若伺服器只有一個 IP 位址即可依靠 DNS 名稱解析機制來達成,請注意!! 當設定 Virtual Host 之後原本的設定將被覆蓋。
#vi /etc/httpd/conf/httpd.conf   //修改設定檔內容如下
  <VirtualHost 10.10.25.115:80>
     ServerAdmin webmaster@weithenn.org
     DocumentRoot /home/web/colo-a
     ServerName colo-a.weithenn.org
     ErrorLog logs/colo-a.weithenn.org-error_log
     CustomLog logs/colo-a.weithenn.org-access_log common
  </VirtualHost>
#mkdir /home/web/colo-a             //建立 Virtual Host 資料夾
#echo 'Colocation-A work!!' > /home/web/colo-a/index.html  //建立測試首頁
#service httpd reload                 //重新載入 Apache 服務(套用生效)
  Reloading httpd:

重新載入 Apache 網頁服務成功後,測試是否可以看到測試首頁。

9、設定 Apache 支援 .htaccess 保護功能

當您網站上有某些網頁不想讓人可以隨便瀏覽 (例如:管理介面、程式後台.....),此時可利用 Apache 內的 .htaccess 功能來替網頁進行管制保護,以下為利用 .htaccess 來保護指定網頁其設定注意事項:(請尊重 Weithenn 的辛勞!!)
  • AllowOverride AuthConfig: 使用 帳號/密碼 進行管制保護。
  • AllowOverride Limit: 使用管制 來源 IP 進行管制保護。
  • AllowOverride None: .htaccess 功能失效。
#vi /etc/httpd/conf/httpd.conf  //修改設定檔內容
  AllowOverride None               //預設值
  AllowOverride Authconfig         //修改後
#mkdir /home/web/colo-a/admin   //建立後台資料夾
#echo 'Web Site Admin Page!!' > /home/web/colo-a/admin/index.html   //建立測試首頁
#vi /home/web/colo-a/admin/.htaccess  //修改 .htaccess 檔案內容如下
  AuthType Basic
  AuthName "Admin Page Login"
  AuthUserFile /home/web/colo-a/admin/.htpasswd
  require valid-user
#htpasswd -mc /home/web/admin/.htpasswd weithenn  //第二筆帳號使用 -m 即可
  New password:                 //輸入登入密碼
  Re-type new password:         //再次輸入密碼以確認
  Adding password for user weithenn
#chgrp apache home/web/colo-a/admin/.htpasswd     //設定檔案權限
#chmod 640 /home/web/colo-a/admin/.htpasswd       //設定檔案權限
#service httpd reload                               //重新載入服務套用生效
  Reloading httpd:

設定完成後若成功運作則要瀏覽 admin 資料夾時便會彈跳出使用者帳號密碼驗證視窗,通過驗證即可看到網頁內容。

文章標籤: