伺服器建置實務上課補充教材
- 最新消息:
- 授課教材:鳥哥的 Linux 私房菜-伺服器架設篇第三版
- 每週都有可能會有上機實作,要等老師檢查完畢才能夠下課!否則就不算有來上課!
- 回首頁
- 舊版教材簡易介紹
unit 10:網頁伺服器 (Apache server) part2
- httpd 的目錄保護功能 (僅規範到的 IP 來源可以登入瀏覽)
- 防火牆僅能全部放行 httpd 的使用權,或者是關閉全部的使用權,無法達成『某些目錄內容可以瀏覽,但某些目錄內容不能瀏覽』的功能。
此時就需要 Apache 的內建功能來處理了。
- 基本的語法可以參考主設定檔裡面的資訊,如下所示:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
- 常見的語法有下列方式:
- 全部放行: 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
- 完成底下的練習:
有個目錄放置的資料僅針對內網放行,例如 http://your.hostname/private 這個目錄!
- 建立 private 目錄,且建立 private/index.html 檔案,內容為『This is private data!!!』即可
- 修改主設定檔,內容請針對上述目錄進行處理。其中,該目錄只有你的內網 (192.168.40.0/24)
以及你自己 (127.0.0.0/8) 可以瀏覽,其他來源是不能瀏覽的。
- 請先檢查語法,若無問題請重新啟動 httpd 服務。
- 嘗試使用內網連線以及外網連線,測試該網頁是否能夠順利的瀏覽與不可瀏覽。
- 建立使用密碼保護的瀏覽目錄
- 雖然可以設定固定 IP 來放行目錄的使用,但是如果需要在外網連線到該目錄瀏覽,就會產生很多的困擾。
此時我們可以透過『輸入帳號與密碼』來登入查詢該目錄的功能!而要達成此功能,通常你需要:
- 規劃目錄:例如假設要管制 http://localhost/pass/ 目錄,就需要設定 /var/www/html/pass 這個目錄才行
- 更改主設定檔:在主設定檔裡面需要加上
<Directory "/var/www/html/pass">
Options Indexes FollowSymLinks
AllowOverride AuthConfig
Require all granted
</Directory>
- 在該目錄下增加檔名為 .htaccess 的設定修改檔,內容會有點像這樣:
AuthType basic
AuthName "你要顯示到彈出式視窗的文字"
AuthUserFile /some/auth/filename <==這個檔案需要額外建置
require user 帳號名稱 <==只針對某些用戶放行
# require valid-user <==所有記載在密碼檔的用戶均放行
- 最終建立上述的 /some/auth/filename 檔案,建立的方法如下:
[root@localhost ~]# htpasswd [-c] /some/auth/filename username
- 請完成上述練習,然後到瀏覽器上輸入 http://localhost/pass/ 看會出現什麼訊息!
- 使用 https 瀏覽
- 網頁一般都是不加密的,不過這樣的傳輸可能會出問題!因此,進來各主要供應商都建議無論你的資料為何,最好都提供加密的 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 這個模組即可!
- 完成底下的練習:
- 請安裝 mod_ssl 之後,並重新啟動 httpd,同時觀察是否啟動了 443 埠口?
- 如何連線到 port 443 ?若有連線的憑證問題,如何查閱憑證資料並放行該次連線?
- 讓 http 與 https 主網頁分離
- 完成底下的練習:
讓你的 https 協定會主動的瀏覽 /var/www/https 這個目錄的內容,且該目錄的 index.html 會顯示『 I am https web here 』
- 動態 WWW 伺服器建置
- 前一堂課談到動態網站就是 LAMP,亦即 Linux + Apache + Mariadb + PHP,前兩個我們大概安裝妥當了,
接下來處理其他兩個軟體!
- 一般來說,Mariadb + PHP 需要的軟體還有 mariadb, mariadb-server, php, php-mysql 。
此外,資料庫是獨立於 WWW 伺服器之外的,因此也需要自行安裝與處理。
- 完成底下的練習:
- 請安裝 mariadb, mariadb-server, php, php-mysql 等軟體
- 完成後請不要重新啟動 httpd,留待下一個例題才啟動。
- 啟動 mariadb 服務,啟動完畢後觀察是否啟動埠口?觀察是否有開機啟動?
- 使用 mysql -u root 來嘗試無密碼登入資料庫看看:
- 使用『 show databases; 』查看所有資料庫
- 使用『 use mysql; 』切換到 mysql 資料庫
- 使用『 show tables; 』查看這個資料庫所含有的資料表
- 使用『 describe user; 』來查看這個資料表內的各個資料欄位
- 使用『 select * from user; 』來顯示所有的資料內容
- 使用『 select * from user where Host = 'localhost'; 』來規範條件
- 最終使用『 exit 』來離開資料庫。
- 由於預設 mariadb 沒有設定 root 密碼,因此執行 mysql_secure_installation 依序完成安全強化作業
(設定 root 密碼為 2727175 看看,其他幾乎均按下 enter 即可!)
- 分別使用『 mysql -u root [-p] 』來嘗試無密碼、有密碼的登入行為。
- PHP 是嵌入於 apache 的一個模組,所以,如果修改了任何 php 的資訊,一定要重新啟動 httpd 才行。
- 完成底下的練習:
- 在尚未重新啟動 httpd 前,請先前往 /var/www/html 建置名為 phptest.php 的檔案,檔案內容如下:
[root@localhost ~]# vim /var/www/html/phptest.php
<?php
phpinfo();
?>
- 使用瀏覽器瀏覽 http://localhost/phptest.php ,看看能否看到實際的資料展示?
- 重新啟動 httpd,然後重新觀察上面的網址,看看出現什麼變化?
- 重新編輯 phptest.php ,隨便加上幾個字,例如加入莫名其妙的『 hehe 』在 phpinfo() 之前,儲存之後再次以瀏覽器觀察 phptest.php 的內容。
- 此時請前往 /var/log/httpd 觀察 error_log 的內容 (看最後面幾行資料),確認問題的所在。
- 確認修改完畢後,再次觀察上述網址。