第 10 堂課 - 網頁伺服器 (Web Server) + FTP
上次更新日期 2017/12/11
- 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 (燈)
- 寫出第一個 HTTPd 瀏覽器與伺服器的作者名字為 (歐洲人喔!):
- 承上,這個 httpd 通訊協定,主要是想傳輸什麼資料?
- httpd 這個伺服器後來被社群單位接手繼續管理,接手後將 httpd 改名為什麼軟體?
- URL 網址指的是什麼樣式的網址列?
- 所謂的動態 WWW 伺服器當中的 LAMP 指的是什麼?
10.2: Apache 基礎安裝與使用
在 CentOS 7 上面預設的 WWW 伺服器就是 Apache,而 Apache 的軟體名稱在 CentOS 上面被稱為 httpd。
- 安裝 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
- 預設所有人均可以瀏覽網頁
- 修改基礎設定值
你當然可以修改預設的設定值,只是要自己承擔風險!舉例來說,如果你改了連線埠口,那麼就得要告訴別人你的連線埠口即將跑到類似如下的網址,否則將無法被瀏覽:
- 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
- 讓 httpd 可以啟動埠口在 80 以及 8080 兩個埠口 (你可能需要自己處理 SELinux 的問題)
- 承上,如何讓瀏覽器連結上 8080 這個埠口
- 承上,如何確認是連上 port 8080 (hint: 透過 netstat 觀察)
- 承上,如果要讓 port 8080 對 internet 放行,該如何處理?
- 讓管理員的 email 改為 student@pc*.dic.ksu
- 讓語系資料交給網頁自己管理,取消強制的 utf8 語系輸出
- 當 index.html 找不到,會再找尋 welcome.html 以 default.html 等檔名作為首頁檔
- 當你在網址列輸入 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
- 依據上述的說明找到正確的模組,並且設定與上述相同的參數來處理 Apache 的資源使用情況
- 使用 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
- 先以上述的作法完成 userdir 的個人首頁設定
- 建立一個名為 webuser1 的帳號,密碼設定為 thewebman ;
- 切換到 webuser1 的身份,然後在家目錄建立名為 www 的目錄,且在該目錄下新增 index.html 檔案, 檔案內容就設定為『 I am webuser1 』即可。
- 嘗試到瀏覽器瀏覽 http://your.server.name/~webuser1 看看出了什麼問題?
- 請嘗試自行修改權限資料 (請務必使用最小可達成目的的權限!)
- 在 WWW 伺服器上,若未來每個用戶新建時,都會自動擁有 www 目錄,且該目錄下都會有 index.html,內容為『 Personal web page !』, 又該如何處理?
- 上述動作完成後,請建立 webuser2 的帳號,同時修改好正確的權限,然後使用瀏覽器瀏覽,看看能否得到正確答案?
- 以 FTP 提供個人用戶的網頁上傳
我們知道 ssh 可以提供類似 ftp 的功能來傳輸檔案,也可以直接使用 scp ,或者是類似 filezilla 等圖形界面軟體來傳輸網頁。 不過 ssh 並沒有對全世界放行,同時我們也不建議 ssh 對全世界放行。而且,ssh 的 chroot 需要比較多的技術支援。 因此,如果針對教學環境來說,反而使用傳統的簡易型 FTP 軟體更能有效的設定好個人用戶的資料上傳。
CentOS 7 提供了 vsftpd 這個簡易的安全的 FTP 伺服器,安裝好就能立刻使用了:
- 安裝 vsftpd
- 啟動 vsftpd
- 下次開機依舊可以啟動 vsftpd
- 設定好 Internet 可以連線到我的 FTP 埠口
- 在 /etc/sysconfig/iptables-config 裡面加入 nf_conntrack_ftp 以及 nf_nat_ftp 兩個常用的 FTP 模組。設定完畢後務必重新啟動 iptables 服務。
- 在瀏覽器直接輸入 ftp://your.hostname 確認可以使用匿名 FTP。
- 在 /var/ftp/pub 底下丟入幾個檔案,再回上一步去確認有沒有新增檔案在 pub 目錄下了。
- 使用瀏覽器輸入 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++ 來進行線上編修網頁的作業了!
- 依據上述的說明,完成 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 這種錯誤代碼的顯示行為。
- 在主設定檔當中,設定發生 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
- 建立 private 目錄,且建立 private/index.html 檔案,內容為『This is private data!!!』即可
- 建立個別設定檔,假設為 /etc/httpd/conf.d/vbird.conf ,內容請針對上述目錄進行處理。其中,該目錄只有你的內網 (10.255.xx.0/24) 以及你自己 (127.0.0.0/8) 可以瀏覽,其他來源是不能瀏覽的。
- 請先檢查語法,若無問題請重新啟動 httpd 服務。
- 嘗試使用內網連線以及外網連線,測試該網頁是否能夠順利的瀏覽與不可瀏覽。
- 建立使用密碼保護的瀏覽目錄
上述的動作雖然可以讓你的 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
- 先查閱使用者家目錄底下能否支援 AuthConfig 的設定!若不行,請修改成允許 override authconfig 喔!
- 登入 webuser1 ,讓這個用戶的 http://your.hostname/~webuser1/protect/ 目錄是受密碼保護的,且內部 index.html 顯示『 This is protect directory 』
- 假設使用的密碼檔位於瀏覽器瀏覽不到的 /home/webuser1/apache.pw ,且帳號為 nobody 密碼為 iamnobidy
- 另一個 somebody 密碼為 hehesomebody ,也能放行這個目錄。
- 設定完畢務必瀏覽一次確認
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 這個模組即可!
- 請安裝 mod_ssl 之後,並重新啟動 httpd,同時觀察是否啟動了 443 埠口?
- 如何連線到 port 443 ?若有連線的憑證問題,如何查閱憑證資料並放行該次連線?
10.6: 課後練習
- (70%)實作題:啟動 Server 作業硬碟 - unit10
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
- 建立 eth0 為外部的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.18.255.*/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.18.255.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 使用 teamd 的機制建立內部區域網路的備援功能:
- team 的界面使用 team0 卡號,且連線名稱請命名為 team0
- team 使用 activebackup 備援功能,不要使用 loadbalance
- team 的實體網卡 (team slave) 請使用 eth1 及 eth2 ,且其連線名稱名稱亦請命名為 eth1, eth2
- 內部網路參數為: 172.19.*.254/24,不需要 gateway
- 主機名稱指定為: server*.example.dic
- 最終你的主機名稱與 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
- 基本的伺服器作業系統設定行為:
- 使用崑山的 FTP 網站作為你的 YUM server 來源,並且清除一次 yum 清單快取
- 安裝相關的軟體,至少須安裝 vim-enhanced, bash-completion, net-tools, mailx, wget, links, bind-utils
- 全系統自動升級,且每天凌晨 3 點也會自動升級一次。(請寫入 /etc/crontab 為主)
- 將 SELinux 修改成為 Enforcing 模式,且未來每次開機都自動為 Enforcing 才行
- 實際設定好本機防火牆
- 請關閉 firewalld 服務,並且自行安裝、啟動 iptables 服務
- 將預設的規則轉存到 /root/firewall.sh 這個檔案內
- 首先將全部的規則刪除 (應該有三條指令)
- 設定好預設政策,讓 INPUT 成為 DROP 而 OUTPUT 與 FORWARD 成為 ACCEPT
- 針對 INPUT 前三條規則為 (1)回應封包 (2)放行 lo 界面 (3)放行 icmp 封包
- 放行你自己的內部區域網路那個網域的連線要求
- 讓 ssh 只對外部的區網放行,不會對 Internet 放行
- 讓 http 針對整個 Internet 放行
- 最後讓確定的規則轉存到 /etc/sysconfig/iptables 這個設定檔
- 重新啟動 iptables 服務,然後觀察規則是否正確
- 實際設定好 Server 的路由功能
- 讓核心支援 IP 轉遞的功能
- 修改 /root/firewall.sh ,增加刪除 nat 表格的規則與自訂鏈
- 增加讓來自內部網路的封包,並預計由 eth0 對外網卡出去的封包,全部偽裝成為 eth0 的 public IP
- 在 /etc/sysconfig/iptables-config 當中增加 nf_nat_ftp 及 nf_conntrack_ftp 模組功能
- 此功能在開機後依舊能夠順利啟動
- 基礎 Apache 架設
- WWW 啟動的埠口會同時啟動於 port 80 與 port 9999 這兩個
- 管理員的 email 請設定為 student@server.lanXX.example.dic
- 取消強制使用 UTF8 的語系設定
- 設定 index.html, welcome.html, default.html 作為你的首頁檔名
- 當瀏覽 http://localhost 時,會顯示你的學號與姓名
- 讓你的伺服器可以同時提供 port 80 與 port 9999 的網路連線 (防火牆功能思考)
- 個人首頁的設定
- 請設定,預設建立新用戶時,該用戶的家目錄會存在一個名為 web 的目錄,且內含一個 index.html 的檔案,檔案內容填寫『 Personal web page 』即可。
- 當瀏覽器瀏覽 http://localhost/~username 時,會顯示 /home/username/web/index.html 的內容。
- 為了擔心個人用戶用爆系統容量,因此請設定好 /home 這個目錄的檔案系統得要支援磁碟容量配額 (quota) 的功能。 若 /home 並不存在獨立的 partition ,那你可能得要針對根目錄進行 quota 的設定 (雖然這不是個好建議!)。但是 Linux 核心預設不能讓根目錄掛載為支援 quota, 因此需要動點小手術。請參考 https://help.directadmin.com/item.php?id=557 來取得正確的 quota 支援。(註,我們只需要 userquota 即可, projectquota 可以不予理會)
- 建立一隻名為『 /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
- 讓 alex, dora, hand 可以使用 ftp 上傳/下載資料到伺服器上,且這三個用戶必須是 chroot 的使用環境。
- 伺服器的防火牆必須要放行 FTP (注意 port 的放行以及 FTP 的相關模組設定與載入)
- 受保護目錄的建置
- 只有 127.0.0.0/8, 以及 Server 自己的所有 IPv4 的 IP 位址可以瀏覽 http://localhost/pro_one/ 這個目錄,且當成功瀏覽這個目錄時, 畫面會顯示『 This is protect one directory 』
- 當輸入 http://localhost/pro_two/ 這個目錄時,會提示需要輸入帳號密碼,當輸入帳號為 student 且密碼也是 student 時,
才會予以放行。
- 請使用 .htaccess 的方式來處理這個題目
- 假設密碼檔位於 /var/www/apache.pw 這個檔案內
- 正確輸入帳密會顯示『 I am Protect two hehe 』的字樣。
- 網路參數的設定,請依據底下的方式來設定好你的網路環境:
- (10%)實作題:啟動 client 作業硬碟
- 網路參數的設定,請依據底下的方式來設定好:
- 因為我們的系統是 clone 來的,因此裡面的網路卡連線會跑掉。所以,請先刪除所有的連線界面後, 再依據底下的要求逐次建立好你的網路環境:
- 建立 eth0 的連線網卡 (相同的連線界面名稱),使用 ethernet 類型,且:
- IPv4 的 IP位址: 172.19.*.1/24 ,其中 * 為老師規定的 IP 尾數
- gateway 為 172.19.*.254
- DNS 為 172.16.200.254 以及 168.95.1.1
- 主機名稱指定為: client.lan*.example.dic
- 最終你的主機名稱與 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
- 實際設定好本機防火牆
- 預設請使用 firewalld 防火牆服務,不要使用 iptables 服務!
- 預計放行的服務主要有 ssh 與 http 兩個服務,其他還可能有預設會啟用的 dhcp 用戶端服務。
- 查詢 rich rule (man firewalld.richlanguage),確認來自本機同一個 LAN 網段的封包,通通給予放行。
- 上述放行的防火牆服務,在下次重新開機後,依舊會存在才行
- 網路參數的設定,請依據底下的方式來設定好:
- (20%)簡易問答題:(第一題 2 分,其餘 3 分)
從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
- 所謂的 LAMP Server 在 WWW 上面一般指的是什麼意思?
- 傳統 FTP 的傳輸有所謂的命令通道與資料流通道,這兩個通道分別透過哪個埠口進行資料連接?
- FTP 有所謂的 active mode 與 passive mode,請問這兩種模式是如何進行傳輸的?
- 為了解決因為 NAT 造成的 FTP 傳輸困擾,那兩個 iptables 模組可以被拿來做監聽的應用?
- 當在 apache 上面設計的網頁出問題,或者是 http 本身出問題,可以查詢那一個登錄檔
- 以『 apache code status 』為關鍵字到 google 查詢,查出 200, 403, 404, 500 這四個錯誤碼的實際意義為何 (必須翻譯為你自己了解的語意)?
- 查詢 httpd.conf 內的 Options 設定值,裡面的 Indexes, FollowSymLinks, ExecCGI 的意義為何?
- 上傳成績
- 請將 Server/Client 的硬碟通通啟動,並且確認兩者間的連線沒有問題;
- 在 Server 硬碟上面登入,然後用 root 的身份執行 vbird_server_check_unit ,並依據提示資料填寫你的學號與 IP 尾數
- 該程式會偵測你的系統,並且通知你哪個部份可能有問題,你需要持續觀察或者重新處理的部份會交代妥當。
- 若一切沒問題,螢幕就會出現如下的字樣,然後你就能夠使用 links 去檢查你的檔案是否有順利的上傳了!
- Please use links http://172.18.255.250/upload/unit10 to check your filename