1. (70%)實作題:啟動 Server 作業硬碟 - unit11
    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. 虛擬主機的架設
      1. 讓 server*.example.dic 可以瀏覽到 /var/www/html/ 這個目錄,且首頁會顯示『 I am server*.example.dic service 』
      2. 讓 server.lan*.example.dic 可以瀏覽到 /var/www/lan/ 這個目錄,且首頁會顯示『 This is LAN service 』。 此外,這個目錄會讓 alex 這個用戶具有完整的存取權限 (用戶若不存在,請自行建立。且密碼會跟用戶名稱相同。)
      3. 當用戶使用 https://server*.example.dic 或其他的 https:// 瀏覽時,都會自動被導向 /var/www/ssl/ 目錄, 且首頁會顯示『 Here is HTTPS services 』
    6. yum install httpd
      
      systemctl start httpd
      systemctl enable httpd
      
      vim /etc/http/conf.d/"檔名自己取".conf
      
      <VirtualHost *:80>
      	ServerName server*.example.dic
      	DocumentRoot /var/www/html/
      </VirtualHost>
      
      <VirtualHost *:80>
      	ServerName server.lan*.example.dic
      	DocumentRoot /var/www/lan/
      </VirtualHost>
      
      echo "I am server*.example.dic service" > /var/www/html/index.html
      
      mkdir /var/www/lan
      echo "This is LAN service" > /var/www/lan/index.html
      useradd alex
      echo alex | passwd --stdin alex
      setfacl -m u:alex:rwx /var/www/lan/
      
      yum install mod_ssl
      vim /etc/httpd/conf.d/ssl.conf
      
      取消註解並修改
      DocumentRoot "/var/www/ssl"
      ServerName https://server*.example.dic
      
      mkdir /var/www/ssl
      echo "Here is HTTPS services" > /var/www/ssl/index.html
      
      systemctl restart httpd
      
    7. 資料庫建置
      1. 請使用安全的方式 (包括加上 root 密碼設定為 2727175) 來處理 Mariadb 這個資料庫的建立 (hint: mysql_secure_installation)
      2. 讓你的 Web server 可以支援 PHP,且上傳的檔案最大容量可達 32MB
      3. 建立如下的資料庫用戶
        • 資料庫: mydb
        • 主機名稱: localhost
        • 帳號: myuser
        • 密碼: mypass
      4. 下載 這個檔案 的內容,然後依據這個檔案的內容重建你的資料庫!
      5. 以本課程的說明,讓你的 http://server.lan*.example.dic/phpbb/ 目錄可以使用操作你的 phpbb 論壇
    8. yum install mariadb
      yum install mariadb-server
      yum install php
      yum install php-mysql
      
      systemctl start mariadb
      systemctl enable mariadb
      
      mysql_secure_installation
      
      vim /etc/php.ini
      
      post_max_size = 32M
      
      mysql -u root -p
      
      create database mydb;
      grant all privileges on mydb.* to myuser@localhost identified by 'mypass' ;
      
      yum install wget
      wget http://dic.vbird.tw/linux_server/download/database.sql
      mysql -u root -p mydb < /root/database.sql
      
    9. 其他設定
      1. 讓你的 Apache 可以支援 python 等 WSGI 程式,並且透過腳本別名來執行某個特定腳本:
        • 利用本節課程當中提到的 showip.wsgi 的檔案,將該檔案放置於 /var/www/wsgi/ 目錄中
        • 設定 web server,讓用戶輸入 http://你的主機名稱/showip/ 時,就會執行該腳本的功能。
      2. 設定好 squid server,讓你的內網可以使用你的 squid 向外瀏覽。另外,當崑山科大資傳系的三段 Class C 中的網域電腦使用這個 proxy 時, 也可以取得 proxy 的使用權。假設 squild 的設定中,限定使用 ksudic 這個 acl 的暱稱來處理。至於三段 IP 分別是 120.114.140.0/24, 120.114.141.0/24, 120.114.142.0/24
    10. yum install mod_wsgi
      mkdir /var/www/wsgi
      
      vim /var/www/wsgi/showip.wsgi
      
      #!/usr/bin/python
      def application(environ, start_response):
              start_response('200 OK', [('Content-type', 'text/plain')])
              import socket
              hostname = socket.gethostname()
              IPAddr   = socket.gethostbyname(hostname)
              msg = 'Server Name is: ' + hostname + "\n"
              msg = msg + "Server IP Address is: " + IPAddr + "\n"
              host = environ['REMOTE_ADDR']
              msg = msg + 'Client IP Addrss is: ' + host
              return([msg, ])
      
      vim /etc/httpd/conf.d/wsgi.conf
      
      <Directory "/var/www/wsgi/">
      	Options Indexes FollowSymLinks ExecCGI
      	Require all granted
      	AddHandler wsgi-script .wsgi
      </Directory>
      
      WSGIScriptAlias /showip/ /var/www/wsgi/showip.wsgi
      
      systemctl restart httpd
      
      yum install squid
      
      systemctl start squid
      systemctl enable squid
      
      vim /etc/squid/squid.conf
      
      在 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS 下新增
      acl ksudic src 120.114.140.0/24 120.114.141.0/24 120.114.142.0/24
      http_access allow ksudic
      
      systemctl restart squid
      
  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%)簡易問答題:(後面兩題 4 分,其他 3 分) 從具有 GUI 及中文的用戶端 Linux ,使用『 ssh root@172.19.*.254 』登入你的 Server ,之後建立 /root/ans.txt 的檔案,並將底下各題目的答案寫入你 server 當中!
    1. 架設 Apache 虛擬主機時,主機名稱需要那一個服務的支援才能在 internet 上面被查詢到?
    2. 那一個指令運作過後可以讓 Mariadb 在比較安全的狀態下執行?
    3. 那一個指令可以讓 Mariadb 的 thisdata 資料庫完整的備份下來,且備份的檔案名稱為 /mydata.sql (假設操作者資料庫名為 datauser)
    4. 要讓 web server (Apache 這個伺服器) 能夠使用 bash script 的呼叫,且可以切換成為 root 或其他帳號的身份執行腳本,需要如何設定?
    5. 找一下 google,請問底下兩個結果的 $log 有何不同?
      • $log = exec ('some script');
      • $log = shell_exec ('some script');
    6. 在 apache 裡面,想讓 /var/www/html/scripts/ 目錄可以執行 wsgi 的程式,且副檔名假設為 .wsgi 時, 應該要如何設定目錄資源?
  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/unit11 to check your filename