︿
Top

1、前言

本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,分別實作簡單網頁服務及虛擬主機 Virtual Host 設定,最後則是實作網頁中需要保護網頁時可以透過 .htaccess 機制進行保護。



有關於 Apache 網頁伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Deployment Guide Chapter 14. Web Servers。以下為 Apache 網頁伺服器實作環境:(若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可(yum -y install policycoreutils-python)。



文章目錄

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 即可進行套件安裝。
#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 設定檔中需要修改的地方其預設值及修改後內容。
#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 服務的狀況。
#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 來保護指定網頁其設定注意事項:
  • 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 資料夾時便會彈跳出使用者帳號密碼驗證視窗,通過驗證即可看到網頁內容。


文章標籤: