伺服器建置實務上課補充教材


unit 10:網頁伺服器 (Apache server) part2
  1. httpd 的目錄保護功能 (僅規範到的 IP 來源可以登入瀏覽)
    1. 防火牆僅能全部放行 httpd 的使用權,或者是關閉全部的使用權,無法達成『某些目錄內容可以瀏覽,但某些目錄內容不能瀏覽』的功能。 此時就需要 Apache 的內建功能來處理了。
    2. 基本的語法可以參考主設定檔裡面的資訊,如下所示:
      <Directory "/var/www/html"> 
          Options Indexes FollowSymLinks
          AllowOverride None
          Require all granted
      </Directory>
      
    3. 常見的語法有下列方式:
      • 全部放行: Require all granted
      • 全部拒絕: Require all denied
      • 部份放行,針對主機名稱的部份: Require host client.host.name
      • 部份放行,針對 IP 的部份: Require ip 192.168. 192.168.0.0/16 10.0.0.0/24
    4. 完成底下的練習:
      有個目錄放置的資料僅針對內網放行,例如 http://your.hostname/private 這個目錄!
      1. 建立 private 目錄,且建立 private/index.html 檔案,內容為『This is private data!!!』即可
      2. 修改主設定檔,內容請針對上述目錄進行處理。其中,該目錄只有你的內網 (192.168.40.0/24) 以及你自己 (127.0.0.0/8) 可以瀏覽,其他來源是不能瀏覽的。
      3. 請先檢查語法,若無問題請重新啟動 httpd 服務。
      4. 嘗試使用內網連線以及外網連線,測試該網頁是否能夠順利的瀏覽與不可瀏覽。
  2. 建立使用密碼保護的瀏覽目錄
    1. 雖然可以設定固定 IP 來放行目錄的使用,但是如果需要在外網連線到該目錄瀏覽,就會產生很多的困擾。 此時我們可以透過『輸入帳號與密碼』來登入查詢該目錄的功能!而要達成此功能,通常你需要:
      1. 規劃目錄:例如假設要管制 http://localhost/pass/ 目錄,就需要設定 /var/www/html/pass 這個目錄才行
      2. 更改主設定檔:在主設定檔裡面需要加上
        <Directory "/var/www/html/pass"> 
            Options Indexes FollowSymLinks
            AllowOverride AuthConfig
            Require all granted
        </Directory>
        
      3. 在該目錄下增加檔名為 .htaccess 的設定修改檔,內容會有點像這樣:
        AuthType	basic
        AuthName	"你要顯示到彈出式視窗的文字"
        AuthUserFile	/some/auth/filename   <==這個檔案需要額外建置
        require user 	帳號名稱              <==只針對某些用戶放行
        # require valid-user                  <==所有記載在密碼檔的用戶均放行
        
      4. 最終建立上述的 /some/auth/filename 檔案,建立的方法如下:
        [root@localhost ~]# htpasswd [-c] /some/auth/filename username
        
    2. 請完成上述練習,然後到瀏覽器上輸入 http://localhost/pass/ 看會出現什麼訊息!
  3. 使用 https 瀏覽
    1. 網頁一般都是不加密的,不過這樣的傳輸可能會出問題!因此,進來各主要供應商都建議無論你的資料為何,最好都提供加密的 https 瀏覽為宜。 那麼 https 到底是什麼呢?
      • 使用類似 sshd 的金鑰系統,透過 SSL (Secure Socket Layer) 的方式來處理這樣的金鑰系統。 而啟動的埠口會預設啟動於 443 上面。
      • 由於 server 的 public key 預設是可以散佈在 internet 上面的,因此,public key 很可能會被竊取。 為此,合法的網址 (URL) 通常都會將自己的 public key 製作成為憑證,讓網址與憑證一致, 再將憑證註冊進合法的第三公正單位資料庫 (Certification Authorities) ,則未來用戶端瀏覽器要瀏覽這個網址時, 會將取得的憑證與 CA 資料庫進行比對,以確定該網址確實就是某公司的註冊這樣。
      • 雖然有時候你覺得你的網站資料並不是非常重要,但是,近期以來,幾乎所有的大型 WWW 伺服器都將網站使用 https 來瀏覽了!所以大家也需要考慮一下,是否有此需求才好!
      • Apache 使用的 https 機制,只需要加上 mod_ssl 這個模組即可!
    2. 完成底下的練習:
      • 請安裝 mod_ssl 之後,並重新啟動 httpd,同時觀察是否啟動了 443 埠口?
      • 如何連線到 port 443 ?若有連線的憑證問題,如何查閱憑證資料並放行該次連線?
    3. 讓 http 與 https 主網頁分離
      • 一般來說,如果有加密與不加密的 WWW 網頁時,你可能會希望將兩者分開。舉例來說,讓你的 https 負責需要加密的 open webmail,而 http 則負責不加密的一般網站。
      • 事實上,CentOS 7 的 mod_ssl 的設定檔已經預設規劃好虛擬主機的參數了, 你可以直接解開註解來使用即可。主要是透過兩個資料:
        DocumentRoot "/var/www/html"
        ServerName www.example.com:443
        
        將上述的目錄改成你要放置的目錄,而主機名稱改成你要的主機名稱,就能夠分開了!當然,主機名稱也可以不寫~此時就是所有的 port 443 都將移動到你指定的目錄喔!
    4. 完成底下的練習:
      讓你的 https 協定會主動的瀏覽 /var/www/https 這個目錄的內容,且該目錄的 index.html 會顯示『 I am https web here 』
  4. 動態 WWW 伺服器建置
    1. 前一堂課談到動態網站就是 LAMP,亦即 Linux + Apache + Mariadb + PHP,前兩個我們大概安裝妥當了, 接下來處理其他兩個軟體!
    2. 一般來說,Mariadb + PHP 需要的軟體還有 mariadb, mariadb-server, php, php-mysql 。 此外,資料庫是獨立於 WWW 伺服器之外的,因此也需要自行安裝與處理。
    3. 完成底下的練習:
      1. 請安裝 mariadb, mariadb-server, php, php-mysql 等軟體
      2. 完成後請不要重新啟動 httpd,留待下一個例題才啟動。
      3. 啟動 mariadb 服務,啟動完畢後觀察是否啟動埠口?觀察是否有開機啟動?
      4. 使用 mysql -u root 來嘗試無密碼登入資料庫看看:
        • 使用『 show databases; 』查看所有資料庫
        • 使用『 use mysql; 』切換到 mysql 資料庫
        • 使用『 show tables; 』查看這個資料庫所含有的資料表
        • 使用『 describe user; 』來查看這個資料表內的各個資料欄位
        • 使用『 select * from user; 』來顯示所有的資料內容
        • 使用『 select * from user where Host = 'localhost'; 』來規範條件
        • 最終使用『 exit 』來離開資料庫。
      5. 由於預設 mariadb 沒有設定 root 密碼,因此執行 mysql_secure_installation 依序完成安全強化作業 (設定 root 密碼為 2727175 看看,其他幾乎均按下 enter 即可!)
      6. 分別使用『 mysql -u root [-p] 』來嘗試無密碼、有密碼的登入行為。
    4. PHP 是嵌入於 apache 的一個模組,所以,如果修改了任何 php 的資訊,一定要重新啟動 httpd 才行。
    5. 完成底下的練習:
      1. 在尚未重新啟動 httpd 前,請先前往 /var/www/html 建置名為 phptest.php 的檔案,檔案內容如下:
        [root@localhost ~]# vim /var/www/html/phptest.php
        <?php
                phpinfo();
        ?>
        
      2. 使用瀏覽器瀏覽 http://localhost/phptest.php ,看看能否看到實際的資料展示?
      3. 重新啟動 httpd,然後重新觀察上面的網址,看看出現什麼變化?
      4. 重新編輯 phptest.php ,隨便加上幾個字,例如加入莫名其妙的『 hehe 』在 phpinfo() 之前,儲存之後再次以瀏覽器觀察 phptest.php 的內容。
      5. 此時請前往 /var/log/httpd 觀察 error_log 的內容 (看最後面幾行資料),確認問題的所在。
      6. 確認修改完畢後,再次觀察上述網址。
Top
HOME