Linux伺服器 Linux伺服器

(CentOS 7) 網站伺服器建置與管理 - 舊版

網站伺服器建置與管理 > 課程內容 > 第 10 堂課 - 網頁伺服器 (Web Server) + FTP

第 10 堂課 - 網頁伺服器 (Web Server) + FTP

上次更新日期 2017/12/11
目前一般企業想到的『架站』通常就是架設一個 WWW (Web) 網站!這樣的網站格式主要又分為兩大陣營,其中使用率較高的就是 Linux 陣營! 我們這裡會介紹目前 Linux 上預設的網頁伺服器,就是名為 Apache 的伺服器!快來玩玩!
  • 10.1: WWW 簡介
  • 10.2: Apache 基礎安裝與使用
  • 10.3: 常見的進階應用
  • 10.4: 網頁目錄的瀏覽控制
  • 10.5: 使用 https 瀏覽
  • 10.6: 課後練習

10.1: WWW 簡介

Web 最早是由 Tim Berners-Lee 爵士為了分享他實驗室的成果而開發出來的一個協定,使用的是 HTML 語法搭配 URL 網址列,就可以快速的取得資料。 再透過超連結的互相連結,讓 Web 在 1990 年代後期就開始熱門起來。為了讓資料有地方可以擺放,當然就需要 Server 提供正確的位址, 因此 Tim Berners-Lee 爵士撰寫出第一個網頁伺服器,稱為 httpd。

因為人腦對於數字的記憶比不上人名,因此 httpd 也是得要搭配上一章談到的 DNS ,這樣大家才方便連結到各個不同的主機器, 再搭配類似 google 的搜尋引擎,就可以讓資料在 Web 上面流通得很廣泛了。簡單的說, WWW 就是:

  • WWW 是 World Wide Web 的縮寫,其中 Web 有廣播網的意思存在, 所以簡稱為全球資訊網。
  • 使用 WWW 時,需要有 server 與 client 的架構,兩者間傳輸的資料如下:

    • WWW 伺服器不但需要一個可讓用戶端瀏覽的平台,還需要提供用戶端一些資料才行!
    • 伺服器所提供的最主要資料是超文件標籤語言 (Hyper Text Markup Language, HTML)、多媒體檔案 (圖片、影像、聲音、文字等,都屬於多媒體或稱為超媒體)。
    • HTML 只是一些純文字資料,透過所謂的標籤 (<tag>) 來規範所要顯示的資料格式;
    • 在用戶端,透過瀏覽器的對 HTML 以及多媒體的解析,最後呈現在使用者的螢幕上。
  • http 協定與 apache 軟體的開發

如前所述,WWW 是由 Tim Berners-Lee 爵士開發出來的,發展的協定稱為超文件傳輸協定 (Hyper Text Transport Protocol, HTTP), 為了讓這個協定可以順利的被應用在電腦上,因此 Tim 大約在 90 年代初期由伊利諾大學的國家超級電腦應用中心 (NCSA, http://www.ncsa.illinois.edu/) 開發出伺服器 HTTPd (HTTP daemon 之意)。

不過後來 HTTPd 這個伺服器的開發並沒有繼續延續下去,妥善率不是很好,於是一群社群朋友便發起一個計畫,這個計畫主要在改善原本的 HTTPd 伺服器軟體,他們稱這個改良過的軟體為 Apache,取其『一個修修改改的伺服器 (A patch server)』的雙關語!

這個 Apache 在 1996 年以後便成為 WWW 伺服器上市佔率最高的軟體了 (http://httpd.apache.org/)。甚至還自己推出自己的授權協議稱為 Apache 授權哩!

  • 什麼是 URL (Uniform Resource Locator)

雖然我們都暱稱 URL 為『網址列』,不過,實際名稱為 Uniform Resource Locator (統一資源定位位址)。基本上 URL 的格式有點像這樣:

  • <協定>://<主機位址或主機名稱>[:port]/<目錄資源>

在網頁上使用的協定為 http 或 https (傳輸資料有無加密),當然,瀏覽器上面還可以輸入類似 ftp:// 等協定。主機名稱就是 DNS 所設計的主機名稱為主 (雖然可以使用 /etc/hosts 的主機名稱,不過,除了內部傳輸之外,大部分當然使用的就是 DNS 主機名)。至於 :port 則是該協定啟動在非正規埠口的意思。 目錄資源則是該資料放在伺服器的哪個相對目錄的位置上。

  • 動態 WWW 伺服器

與我們一般說的會動的圖畫 (如 CSS 動畫或 GIF 動畫或影像資料) 不同,所謂的『動態』指的是網站的內容會隨時更新的意思,這才是所謂的動態網站。 為了達成動態網站,你在設計網頁時,當然就要使用網頁程式語言。這個網頁程式語言會主動到資料庫去撈取資料來顯示,同時, 也可以依據使用者的需求或點擊的特性,來給予適當的內容。因此,所謂的動態網站,你就得要有:

  • 適合的作業系統
  • WWW 伺服器平台
  • 網路資料庫系統: 須注意 WWW 伺服器與資料庫系統為兩個獨立的系統,因此需要透過網頁程式語言進行溝通
  • 網頁程式語言

在台灣,上述的環境常見的搭配軟體為:Linux + Apache + Mariadb + PHP --> LAMP (燈)

例題 10.1.A:
  1. 寫出第一個 HTTPd 瀏覽器與伺服器的作者名字為 (歐洲人喔!):
  2. 承上,這個 httpd 通訊協定,主要是想傳輸什麼資料?
  3. httpd 這個伺服器後來被社群單位接手繼續管理,接手後將 httpd 改名為什麼軟體?
  4. URL 網址指的是什麼樣式的網址列?
  5. 所謂的動態 WWW 伺服器當中的 LAMP 指的是什麼?

10.2: Apache 基礎安裝與使用

在 CentOS 7 上面預設的 WWW 伺服器就是 Apache,而 Apache 的軟體名稱在 CentOS 上面被稱為 httpd。

例題 10.2.A:
  • 安裝 Apache 軟體
  • 使用預設值啟動 Apache 軟體
  • 設定開機會啟動這個軟體
  • 你的 Apache 軟體是對全世界放行的,請觀察或重新設定防火牆
  • 打開瀏覽器,輸入網址列的你的主機名稱,看看能否觀察到相關的網頁資料?
  • 同時請觀察已經啟動的埠口,是否有讓 httpd 啟動的號碼?
  • CentOS 7 上預設的 Apache 設定

在 CentOS 7 上面,Apache 預設的項目有底下這幾個:

  • 基礎設定檔位於: /etc/httpd/conf/httpd.conf
  • 附加設定檔位於: /etc/httpd/conf.d/*.conf
  • 預設啟動埠口在: port 80
  • 預設伺服器管理員 email: root@localhost
  • 預設首頁目錄位於: /var/www/html
  • 預設首頁檔案檔名: index.html
  • 預設所有人均可以瀏覽網頁
例題 10.2.B:觀察完首頁之後,請將預設的首頁改成顯示你的大名與學號即可。
  • 修改基礎設定值

你當然可以修改預設的設定值,只是要自己承擔風險!舉例來說,如果你改了連線埠口,那麼就得要告訴別人你的連線埠口即將跑到類似如下的網址,否則將無法被瀏覽:

  • http://localhost:85/

為了避免困擾,底下僅告知一般來說,可能會被管理員更動的設定,其他詳細的設定請自行參考 httpd.conf 內的說明了。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

Listen 80                     # 預設 Apache 的監聽埠口

ServerAdmin root@localhost    # 可以改成任何一個合法的 email address 即可!出問題時,螢幕會顯示出來!

DocumentRoot "/var/www/html"  # 就是預設的首頁目錄位置

<Directory "/var/www/html">   # 針對首頁目錄所進行的各項權限控制項目
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted       # 設定誰可以瀏覽的參數,詳細語法後續會談到。
</Directory>

<IfModule dir_module>         # 設定首頁檔名
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">                # 設定在本伺服器中,只要開頭檔名為 .ht 的檔案,就不可以被瀏覽
    Require all denied
</Files>

<IfModule alias_module>       # 指定 http://server/cgi-bin/ 為 CGI 的主要放置網址
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>        # 指定副檔名的其他功能
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    #AddHandler cgi-script .cgi
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8             # 指定預設的語系資料,通常可以直接註解即可!

# Some examples:                    # 指定一些常見的錯誤顯示方式,須搭配 Web 常見的錯誤代碼
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
例題 10.2.C:
  1. 讓 httpd 可以啟動埠口在 80 以及 8080 兩個埠口 (你可能需要自己處理 SELinux 的問題)
  2. 承上,如何讓瀏覽器連結上 8080 這個埠口
  3. 承上,如何確認是連上 port 8080 (hint: 透過 netstat 觀察)
  4. 承上,如果要讓 port 8080 對 internet 放行,該如何處理?
  5. 讓管理員的 email 改為 student@pc*.dic.ksu
  6. 讓語系資料交給網頁自己管理,取消強制的 utf8 語系輸出
  7. 當 index.html 找不到,會再找尋 welcome.html 以 default.html 等檔名作為首頁檔
  8. 當你在網址列輸入 http://localhost/checkwelcome/ 時,就會輸出 welcome.html 的內容,而 welcome.html 內容請填寫『this filename is welcome.html』即可

10.3: 常見的進階應用

基本上,上述的工作完成後,你的 Web 應該可以順利用做了。不過,在某些情況下,你可能還是得要修改一些設定,會讓你的系統運作的更好。

  • Apache 系統效能優化處理

預設的 apache 設定值讓你的 Web 伺服器可以提供小型企業的運作,佔用的 Linux 系統資源也比較少。不過,當你的網站開始大起來, 瀏覽的要求比較多的時候,可能會讓你的 Apache 有點卡卡延遲的情況發生。此時,你的 Apache 應該要佔用比較多的 Linux 資源才對, 才不會讓資源閒置結果讓 apache 效能無法提昇。

由於 Apache 針對系統資源的設定中,提供了兩個基本的模組,一個是 worker 一個是 prefork,因此你得要找到正確的模組,這樣才不會改錯。 查詢的方式如下:

[root@localhost ~]# apachectl -t -D DUMP_MODULES |grep mpm
 mpm_prefork_module (shared)

如上所述,那我們的系統就是使用 perfork 這個模組。當你使用 systemctl status httpd 時,應該會看到有預設 7 個程序在跑, 這就是 perfork 的預設值。如果你想要增加到 10 個預設的 httpd 程序,且未來最多可開到 30 個 httpd 的程序,同時給予一些其他的參數增加連線數, 那可以在 /etc/httpd/conf.d/perfork.conf 這個檔案 (預設不存在,自己手動設定) 增加如下的項目:

[root@localhost ~]# grep prefork /etc/httpd/conf.modules.d/* | grep Load
/etc/httpd/conf.modules.d/00-mpm.conf:LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

[root@localhost ~]# vim /etc/httpd/conf.d/prefork.conf
<IfModule mpm_prefork_module>
StartServers      10
MinSpareServers    5
MaxSpareServers   30
ServerLimit     1024
MaxClients      1024
MaxRequestsPerChild  4000
</IfModule>

[root@localhost ~]# apachectl configtest
Syntax OK

[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# systemctl status httpd
例題 10.3.A:
  1. 依據上述的說明找到正確的模組,並且設定與上述相同的參數來處理 Apache 的資源使用情況
  2. 使用 systemctl status httpd 觀察整體程序的輸出是否比之前來的多。
  • Apache 的個人首頁設定

一個主機預設只有一個首頁目錄,當然可以指定使用虛擬主機。不過,如果用在類似教學的環境下,想讓所有的學生都擁有自己帳號的個人首頁, 以方便學生自己上傳自己的網頁資料時,可以使用 apache 的內建個人首頁的設定喔。

你可能會看過類似如下的網址列:

  • http://your.host.name/~username/

後面那個網址『 /~username 』是否很像我們在 Linux 底下要搜尋某用戶的家目錄所使用的『 ll ~username 』呢!沒錯!那就是個人首頁。 預設的個人首頁是放置在 /home/username/public_html/ 目錄下,不過鳥哥不喜歡這個目錄名稱,比較喜歡單純的 /home/username/www/ 這樣的目錄名, 使用者也好記,我們也好管理。

個人首頁的設定預設是取消的,我們需要修改 /etc/httpd/conf.d/userdir.conf 這個檔案的內容才行!

[root@localhost ~]# vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
    UserDir www
</IfModule>
<Directory "/home/*/www">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

[root@localhost ~]# apachectl configtest
Syntax OK

[root@localhost ~]# systemctl restart httpd

上面的設定值一個是設定網頁目錄為 www ,另一個則是宣告該目錄擁有的權限這樣。另外,請務必觀察 httpd 與 homedir 有關的 SELinux 設定項目, 一定要啟用才行!

[root@localhost ~]# getsebool -a | grep http | grep home
httpd_enable_homedirs --> off

[root@localhost ~]# setsebool -P httpd_enable_homedirs on
[root@localhost ~]# getsebool -a | grep http | grep home
httpd_enable_homedirs --> on
例題 10.3.B:
  1. 先以上述的作法完成 userdir 的個人首頁設定
  2. 建立一個名為 webuser1 的帳號,密碼設定為 thewebman ;
  3. 切換到 webuser1 的身份,然後在家目錄建立名為 www 的目錄,且在該目錄下新增 index.html 檔案, 檔案內容就設定為『 I am webuser1 』即可。
  4. 嘗試到瀏覽器瀏覽 http://your.server.name/~webuser1 看看出了什麼問題?
  5. 請嘗試自行修改權限資料 (請務必使用最小可達成目的的權限!)
  6. 在 WWW 伺服器上,若未來每個用戶新建時,都會自動擁有 www 目錄,且該目錄下都會有 index.html,內容為『 Personal web page !』, 又該如何處理?
  7. 上述動作完成後,請建立 webuser2 的帳號,同時修改好正確的權限,然後使用瀏覽器瀏覽,看看能否得到正確答案?
  • 以 FTP 提供個人用戶的網頁上傳

我們知道 ssh 可以提供類似 ftp 的功能來傳輸檔案,也可以直接使用 scp ,或者是類似 filezilla 等圖形界面軟體來傳輸網頁。 不過 ssh 並沒有對全世界放行,同時我們也不建議 ssh 對全世界放行。而且,ssh 的 chroot 需要比較多的技術支援。 因此,如果針對教學環境來說,反而使用傳統的簡易型 FTP 軟體更能有效的設定好個人用戶的資料上傳。

CentOS 7 提供了 vsftpd 這個簡易的安全的 FTP 伺服器,安裝好就能立刻使用了:

例題 10.3.C:
  1. 安裝 vsftpd
  2. 啟動 vsftpd
  3. 下次開機依舊可以啟動 vsftpd
  4. 設定好 Internet 可以連線到我的 FTP 埠口
  5. 在 /etc/sysconfig/iptables-config 裡面加入 nf_conntrack_ftp 以及 nf_nat_ftp 兩個常用的 FTP 模組。設定完畢後務必重新啟動 iptables 服務。
  6. 在瀏覽器直接輸入 ftp://your.hostname 確認可以使用匿名 FTP。
  7. 在 /var/ftp/pub 底下丟入幾個檔案,再回上一步去確認有沒有新增檔案在 pub 目錄下了。
  8. 使用瀏覽器輸入 ftp://webuser1@your.hostname/ ,並輸入 webuser1 的密碼,來確認能否登入系統。
  • vsftpd 可以匿名登入也能使用實體帳號登入
  • 匿名登入會主動跑到 /var/ftp 目錄下去瀏覽資料
  • 實體帳號預設可以離開家目錄,且能到系統任何有權限的目錄去瀏覽。

如上練習的最後一題,因為預設 vsftpd 會開放整個系統的瀏覽權,因此需要進行一些簡易的設定比較好。讓使用者無法離開家目錄才是比較正確的作法:

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES  # 這一行預設不存在,請自己加入喔!

[root@localhost ~]# touch /etc/vsftpd/chroot_list  # 寫入這個檔案的用戶才可以脫離家目錄

[root@localhost ~]# systemctl restart vsftpd

如此一來所有的用戶就能夠透過 FTP 來進行網頁的上傳下載囉!也可以透過 notepad++ 來進行線上編修網頁的作業了!

例題 10.3.D:
  • 依據上述的說明,完成 FTP 的 chroot 功能
  • 透過用戶端瀏覽器的功能,測試能否連結到 FTP 伺服器,如 links ftp://webuser1@your.hostname
  • 錯誤瀏覽訊息公告

你應該經常有的經驗,就是去瀏覽一個網頁時,對方告訴你 404 耶!什麼是 404 呢?這個是 Web 公認的幾個錯誤代碼~常見的錯誤代碼有:

  • 100-199:一些基本的訊息
  • 200-299:用戶端的要求已成功的達成
  • 300-399:Client 的需求需要其他額外的動作,例如 redirected 等等
  • 400-499:Client 的要求沒有辦法完成(例如找不到網頁)
  • 500-599:主機的設定錯誤問題

一般來說,正常瀏覽與錯誤瀏覽的 log 記錄位置並不相同!你可以根據底下的檔案來找尋錯誤瀏覽的行為:

  • 正確瀏覽的登錄檔: /var/log/httpd/access_log
  • 錯誤瀏覽的登錄檔: /var/log/httpd/error_log

你可以根據 httpd.conf 裡面的註解資料當中找到 404 這種錯誤代碼的顯示行為。

例題 10.3.E:
  • 在主設定檔當中,設定發生 404 找不到網頁時,會主動顯示 http://your.hostname/missing.html 這個檔案
  • 增加 missing.html 這個檔案,內容請自訂 (通常是增加連結到主網頁即可)

10.4: 網頁目錄的瀏覽控制

防火牆可以讓你的 httpd 整個被擋住或整個被放行。但想一想,某個目錄我想要保護在內網才能看,其他的則大家都能看。在這樣的情況下, 防火牆似乎就沒有辦法達成了!這個時候得要使用 apache 提供的相關功能來處理較佳。底下提供兩個方案來達成這個分別瀏覽的目的:

  • httpd 的目錄保護功能 (僅規範到的 IP 來源可以登入瀏覽)

我們使用的 apache 是 2.4 版,這一版與前一代使用的瀏覽權限設定完全不同,所以你得要注意版本的差異才行。基本上,針對目錄的權限瀏覽我們可以參考網頁根目錄的設定:

<Directory "/var/www/html"> 
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

上面那個 Require 就是權限控制的重要參數。一般來說,常見的 Require 有底下的幾個基本語法:

  • 全部放行: 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
例題 10.4.A:有個目錄放置的資料僅針對內網放行,例如 http://your.hostname/private 這個目錄!
  1. 建立 private 目錄,且建立 private/index.html 檔案,內容為『This is private data!!!』即可
  2. 建立個別設定檔,假設為 /etc/httpd/conf.d/vbird.conf ,內容請針對上述目錄進行處理。其中,該目錄只有你的內網 (10.255.xx.0/24) 以及你自己 (127.0.0.0/8) 可以瀏覽,其他來源是不能瀏覽的。
  3. 請先檢查語法,若無問題請重新啟動 httpd 服務。
  4. 嘗試使用內網連線以及外網連線,測試該網頁是否能夠順利的瀏覽與不可瀏覽。
  • 建立使用密碼保護的瀏覽目錄

上述的動作雖然可以讓你的 Apache 保護某些目錄,不過,如果你經常出差,有時需要查閱該保護目錄時,會不會很麻煩?我是覺得很麻煩~ 所以,此時可以使用 Apache 提供的基礎密碼保護功能來處理。

密碼保護的設定有兩種模式:

  • 一種是寫死到主設定檔 (含 httpd.conf 以及 conf.d/*.conf 等檔案,接為主設定檔)
  • 一種則是透過受保護目錄底下的 .htaccess 修改設定來處理。不過要能使用 .htaccess 也需要主設定檔的支援才行。

你可能會覺得,既然主設定檔也需要修改才能支援 .htaccess , 那為何不直接寫入主設定檔即可?這是因為主設定檔修改完畢得要重新啟動 httpd ,而修改 .htaccess 只要改完立刻可以生效!無須重啟 httpd。 這對於一般帳號也想要設定密碼保護的情況來說,是相當有幫助的!針對可以使用 .htaccess 的目錄來說,需要增加底下的設定:

<Directory "/some/where">
	Options XXX
	AllowOverride AuthConfig
</Directory>

# systemctl restart httpd

接下來切換到該目錄下 (/some/where),建立一個名為 .htaccess 的檔案,這個檔案必須要 (1)指定密碼檔的檔名, (2)指定該密碼檔內可用以驗證的帳號。檔案內容大概像這樣

[root@localhost ~]# vim .htaccess
AuthType	basic
AuthName	"你要顯示到彈出式視窗的文字"
AuthUserFile	/some/auth/filename   <==這個檔案需要額外建置
require user 	帳號名稱              <==只針對某些用戶放行
# require valid-user                  <==所有記載在密碼檔的用戶均放行

上述的 /some/auth/filename 檔案檔名是自己指定的,但是最好不要放在可被網頁瀏覽的目錄 (就是不要放在 /var/www/html/ 內!)。 至於該檔案的建立方案為:

[root@localhost ~]# htpasswd [-c] /some/auth/filename username
例題 10.4.B: 讓一般用戶的資料可以進行密碼保護
  1. 先查閱使用者家目錄底下能否支援 AuthConfig 的設定!若不行,請修改成允許 override authconfig 喔!
  2. 登入 webuser1 ,讓這個用戶的 http://your.hostname/~webuser1/protect/ 目錄是受密碼保護的,且內部 index.html 顯示『 This is protect directory 』
  3. 假設使用的密碼檔位於瀏覽器瀏覽不到的 /home/webuser1/apache.pw ,且帳號為 nobody 密碼為 iamnobidy
  4. 另一個 somebody 密碼為 hehesomebody ,也能放行這個目錄。
  5. 設定完畢務必瀏覽一次確認

10.5: 使用 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 這個模組即可!
例題 10.5.A:
  • 請安裝 mod_ssl 之後,並重新啟動 httpd,同時觀察是否啟動了 443 埠口?
  • 如何連線到 port 443 ?若有連線的憑證問題,如何查閱憑證資料並放行該次連線?

10.6: 課後練習

  1. (70%)實作題:啟動 Server 作業硬碟 - unit10
    1. 網路參數的設定,請依據底下的方式來設定好你的網路環境:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.18.255.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 使用 teamd 的機制建立內部區域網路的備援功能:
        • team 的界面使用 team0 卡號,且連線名稱請命名為 team0
        • team 使用 activebackup 備援功能,不要使用 loadbalance
        • team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
        • 內部網路參數為: 172.19.*.254/24,不需要 gateway
      4. 主機名稱指定為: server*.example.dic
      5. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 基本的伺服器作業系統設定行為:
      1. 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
      2. 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
      3. 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
      4. 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
    3. 實際設定好本機防火牆
      1. 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
      2. 將預設的規則轉存到 /root/firewall.sh 這個檔案內
      3. 首先將全部的規則刪除 (應該有三條指令)
      4. 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
      5. 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
      6. 放行你自己的內部區域網路那個網域的連線要求
      7. 讓 ssh 只對外部的區網放行,不會對 Internet 放行
      8. 讓 http 針對整個 Internet 放行
      9. 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
      10. 重新啟動 iptables 服務,然後觀察規則是否正確
    4. 實際設定好 Server 的路由功能
      1. 讓核心支援 IP 轉遞的功能
      2. 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
      3. 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
      4. 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
      5. 此功能在開機後依舊能夠順利啟動
    5. 基礎 Apache 架設
      1. WWW 啟動的埠口會同時啟動於 port 80 與 port 9999 這兩個
      2. 管理員的 email 請設定為 student@server.lanXX.example.dic
      3. 取消強制使用 UTF8 的語系設定
      4. 設定 index.html, welcome.html, default.html 作為你的首頁檔名
      5. 當瀏覽 http://localhost 時,會顯示你的學號與姓名
      6. 讓你的伺服器可以同時提供 port 80 與 port 9999 的網路連線 (防火牆功能思考)
    6. 個人首頁的設定
      1. 請設定,預設建立新用戶時,該用戶的家目錄會存在一個名為 web 的目錄,且內含一個 index.html 的檔案,檔案內容填寫『 Personal web page 』即可。
      2. 當瀏覽器瀏覽 http://localhost/~username 時,會顯示 /home/username/web/index.html 的內容。
      3. 為了擔心個人用戶用爆系統容量,因此請設定好 /home 這個目錄的檔案系統得要支援磁碟容量配額 (quota) 的功能。 若 /home 並不存在獨立的 partition ,那你可能得要針對根目錄進行 quota 的設定 (雖然這不是個好建議!)。但是 Linux 核心預設不能讓根目錄掛載為支援 quota, 因此需要動點小手術。請參考 https://help.directadmin.com/item.php?id=557 來取得正確的 quota 支援。(註,我們只需要 userquota 即可, projectquota 可以不予理會)
      4. 建立一隻名為『 /root/webuser.sh 』的腳本,並建立一個名為 /root/webuser.txt 的檔案,/root/webuser.txt 的內容有點像這樣:
        alex
        dora
        hank
        
        而 /root/webuser.sh 的腳本使用 for, do, done 的迴圈功能,會針對上述 /root/webuser.txt 的檔案進行如下動作:
        • 使用預設方式建立用戶,且用戶的密碼與帳號相同。
        • 建立用戶後,會給予該用戶 soft/hard 分別為 400MB/500MB 的可用磁碟容量
        • 讓該用戶的家目錄權限設定為 711
        建置完畢後請執行一次該腳本,並使用 http://localhost/~alex 確認該帳號是存在的!
      5. 讓 alex, dora, hand 可以使用 ftp 上傳/下載資料到伺服器上,且這三個用戶必須是 chroot 的使用環境。
      6. 伺服器的防火牆必須要放行 FTP (注意 port 的放行以及 FTP 的相關模組設定與載入)
    7. 受保護目錄的建置
      1. 只有 127.0.0.0/8, 以及 Server 自己的所有 IPv4 的 IP 位址可以瀏覽 http://localhost/pro_one/ 這個目錄,且當成功瀏覽這個目錄時, 畫面會顯示『 This is protect one directory 』
      2. 當輸入 http://localhost/pro_two/ 這個目錄時,會提示需要輸入帳號密碼,當輸入帳號為 student 且密碼也是 student 時, 才會予以放行。
        • 請使用 .htaccess 的方式來處理這個題目
        • 假設密碼檔位於 /var/www/apache.pw 這個檔案內
        • 正確輸入帳密會顯示『 I am Protect two hehe 』的字樣。
  2. (10%)實作題:啟動 client 作業硬碟
    1. 網路參數的設定,請依據底下的方式來設定好:
      1. 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
      2. 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
        • IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
        • gateway 為 172.19.*.254
        • DNS 為 172.16.200.254 以及 168.95.1.1
      3. 主機名稱指定為: client.lan*.example.dic
      4. 最終你的主機名稱與 IP 的對應為:
        server*.example.dic	172.18.255.*		別名為 server*
        server254.example.dic	172.18.255.254		別名為 server254
        server.lan*.example.dic	172.19.*.254		別名為 server
        client.lan*.example.dic	172.19.*.1		別名為 client
        
    2. 實際設定好本機防火牆
      1. 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
      2. 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
      3. 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
      4. 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
  3. (20%)簡易問答題:(第一題 2 分,其餘 3 分) 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 所謂的 LAMP Server 在 WWW 上面一般指的是什麼意思?
    2. 傳統 FTP 的傳輸有所謂的命令通道與資料流通道,這兩個通道分別透過哪個埠口進行資料連接?
    3. FTP 有所謂的 active mode 與 passive mode,請問這兩種模式是如何進行傳輸的?
    4. 為了解決因為 NAT 造成的 FTP 傳輸困擾,那兩個 iptables 模組可以被拿來做監聽的應用?
    5. 當在 apache 上面設計的網頁出問題,或者是 http 本身出問題,可以查詢那一個登錄檔
    6. 以『 apache code status 』為關鍵字到 google 查詢,查出 200, 403, 404, 500 這四個錯誤碼的實際意義為何 (必須翻譯為你自己了解的語意)?
    7. 查詢 httpd.conf 內的 Options 設定值,裡面的 Indexes, FollowSymLinks, ExecCGI 的意義為何?
  4. 上傳成績
    1. 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
    2. 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
    3. 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
    4. 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
    5. Please use links http://172.18.255.250/upload/unit10 to check your filename