--- title: 113 LSA 期中考題_筆試_檢討 tags: [lsa] --- ###### tags: `lsa` # 113 LSA 期中考題_筆試_檢討 ## 甲、筆試題 1. 小貝想要備份這個檔案,備份檔叫做 `homework_B`。`homework_A.txt` 與 `homework_B` 兩個檔案個別更改的時候,彼此之間不會影響到彼此(1%) ```bash= cp homework_A.txt homework_B ``` 2. 小貝怕室友會偷偷跑過來偷看自己的作業,又怕好不容易備份的 `homework_B` 自己會不小心動到,所以決定對這兩個檔案做一些設定:(3%) - 把 `homework_A.txt` 的權限改成只有自己可讀可寫,其他人都別想動這份檔案 - 把 `homework_B` 的權限改成只有自己可讀,其他人都別想動這份檔案 ```bash= chmod 600 homework_A.txt chmod 400 homework_B ``` 3. 最後小貝把 `homework_A.txt` 完成了,他覺得這檔名好醜,他想改名成 `完成啦`(1%) ```bash= mv homework_A.txt 完成啦 ``` 4. 在 `~/bei` 中,小貝建立一個資料夾 `img`,裡面放了一些照片,由於**要和他人共用這些照片**,權限是`777`。小貝希望這個資料夾裡的照片只有自己和 root 可以刪除。(2%) ```bash= chmod 1777 ~/bei/img ``` 5. 老師叫小貝去施展某種魔法,讓之後所有新創的使用者家目錄都會自動預設有個叫 `lsa` 的空檔案(3%) ```bash= sudo touch /etc/skel/lsa ``` 6. 老師突然叫小貝幫小利建立帳號,要讓小利也可以使用伺服器,並且過程中會自動產生小利自己的家目錄。(2%) ```bash= sudo useradd 小利 ``` 7. 室友小羅突然忘記他在伺服器上的密碼,小貝可以更改什麼檔案,協助他把密碼清空,並且小羅的家目錄不會消失。(3%) ```bash= 請說明 passwd 的原理: 更改 /etc/shadow 清空第一個冒號到第二個冒號之間的 hash 值 ``` 8. 小貝想要找根目錄底下的某個資料夾,但他忘記是哪一個,只記得是 `s` 開頭的。要如何印出根目錄底下所有(且只有) `s` 開頭的資料夾?(4%) ```bash= ls s[tab][tab] 或 ls | grep -E "^s" ``` 9. 小瓦是個火車狂熱者,他喜歡有事沒事就打 `sl` 指令,有天他突發奇想,想要跑 `sl` 的同時也能把小火車輸出到檔案 `bubu` 裡面(2%) ```bash= sudo vim .bashrc alias sl='sl | tee -a bubu' source .bashrc sl ``` 10. 小羅希望系統能每分鐘將 `date` 指令的輸出儲存到家目錄底下的 `date.txt` 這份檔案,且不會蓋過舊的輸出(2%) ```bash= crontab -e 2 * * * * * /bin/date >> ~/date.txt ``` ### 二、檔案傳輸 (6%) 某天 BlueT 叫 A 同學交作業到一個有開 SFTP 服務、叫做 `lsa.moli.rocks` 的伺服器上,於是 A 同學想要利用遠端檔案傳輸工具,把存在**本機**(local)上的 `~/lsa/homework.txt` 傳到這台**遠端** server 的 `/home/student/ex1/homework.txt`。 1. 請問下列哪個選項不是能達成這件事的工具: (2%) - sl - scp - rsync - sftp  2. 請選出正確下指令的順序,讓 A 同學能達成這件事(假設 client 和 server 目前工作目錄都在自己的家目錄底下) (2%) 1. `put homework.txt` 2. `cd ex1` 3. `sftp student@lsa.moli.rocks` 4. `lcd lsa` - ( A ) 3412 - ( B ) 1234 - ( C ) 4312 - **( D ) 3241** :heavy_check_mark: :::success 正確指令順序: 1. sftp student@lsa.moli.rocks - 啟動 SFTP 連線,並使用帳號 student 登入 lsa.moli.rocks 伺服器。 2. lcd lsa - 使用 `lcd (local cd)` 指令切換本機的工作目錄到 ~/lsa,確保 homework.txt 在當前目錄下。 3. cd ex1 - 使用 cd 指令切換遠端伺服器的目錄到 /home/student/ex1 4. put homework.txt - 使用 put 指令將本機的 homework.txt 上傳到遠端目錄 /home/student/ex1 ::: 3. 請問若要用 scp 這套工具來做到這件事,要打的指令何者為正確? (2%) - `scp ~/lsa/homework.txt student@lsa.moli.rocks:/home/student/ex1/homework.txt` :heavy_check_mark: - `scp student@lsa.moli.rocks:~/lsa/homework.txt /home/student/ex1/homework.txt` - `scp /home/student/ex1/homework.txt ~/lsa/homework.txt` - `scp student@lsa.moli.rocks:/home/student/ex1/homework.txt ~/lsa/homework.txt` ### 三、遠端連線 (4%) 1. 請問下列哪些通訊協定的流量是未加密經由網路傳輸? (2%) - HTTPS (SSL/TLS) - Telnet :heavy_check_mark: - SSH - FTP :heavy_check_mark: 2. 以下列表中,請問用哪一個方法驗證身分最可以預防中間人攻擊帶來的危險? (2%) - Hash 雜湊函式 - 對稱式加密 - 非對稱式加密 :heavy_check_mark: - 帳號、密碼 :::success - 使用一對密鑰:Public Key 和 Private Key - 身份驗證方式: - 發送方使用 Private 加密,接收方使用 Public 解密,確保來源可信 - 或接收方使用 Public 加密,只有持有 Private 的一方能解密,防止未授權方篡改信息 - 有效防禦中間人攻擊:中間人無法偽造或解密通訊內容,因為他沒有有效的 Private ::: ### 四、網路規劃相關 (20%,各 2%) - 如何查看本機的所有網卡及其分配的 IP 位址 ```bash= ifconfig ``` - 有一網段 `192.168.1.0/26`,請說明此網段的網路位置及廣播位置、可分配的 IP 位址、最多可容納多少主機 (需仔細說明這個數字如何計算) :::success Default mask: 11111111.11111111.11111111.11000000 網路位置 Net ID 26bits : 192.168.1.0 廣播位置: 192.168.1.63 # 該網段的最後一個 IP 位址 可分配的 IP 位址 : 192.168.1.1~192.168.1.62 192.168.1.0 和廣播位置 192.168.1.63 不可分配 可容納 2^6-2=62 主機 ::: - 如何查看目前系統內的路由表? 如果需要新增一條預設的路由,應該怎麼做? :::success 查看目前系統內的路由表 route -n sudo ip route add default ::: - `ping` 的作用是什麼? 如果希望限制 `ping` 的次數為 5 次,應該如何達成? :::success 檢查設備之間是否可以互相通訊 ping x.x.x.x -c 5 ::: - 如何看出系統上所有正在執行的網路服務,以及其監聽的位址及通訊埠? :::success sudo netstat -antupl or sudo ss -antupl ::: - 如何知道在向 `google.com` 發出連線時,封包傳輸路徑經過哪些跳點 (hop)? :::success traceroute www.google.com ::: - 如何使用系統內建的防火牆允許進入的 SSH 連線? 如何使用系統內建的防火牆阻擋進入的 ping 連線? :::success sudo ufw allow ssh sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP ::: - 如何使用 `telnet` 進行 HTTP 請求? 試說明步驟與內容 :::success telnet [hostname] 80 GET / HTTP/1.0 \# 發送一個 GET 請求,請求網站 '/' 目錄 ::: - 想要知道目前系統使用的 NAT 規則,可以使用什麼本學期有教的指令? :::success sudo iptables -t nat -L ::: - 想要讓本機在解析 `example.local` 這個域名時,解析結果會是 `10.0.0.10` 這個位置,要怎麼做? 如何驗證有成功綁定? :::success \# 怎麼做 sudo vim /etc/hosts [i] 10.0.0.10 example.local [esc] :wq \# 如何驗證 nslookup example.local ::: ### 五、web server(3%) - nginx config 檢查 - 在生產環境,我們不希望因為有部分設定檔的問題影響到運作中的 web server,所以在啟用 新增/更改 的設定檔前會檢查並確保設定檔的基本語法沒有問題。請問在 nginx 要如何達成 ? :::success sudo nginx -t ::: ### 六、除錯(3%) - 目前檔案結構 ``` root@ubuntu22:/lsa$ tree -rp [drwxrwxr-x] . ├── [-rw-rw-r--] test.txt └── [drwxrwxr-x] test 1 directory, 1 files ``` - 建立一個軟連結:`ln -s ./test.txt ./test/` ``` root@ubuntu22:/lsa$ tree -rp [drwxrwxr-x] . ├── [-rw-rw-r--] test.txt └── [drwxrwxr-x] test └── [lrwxrwxrwx] test.txt -> ./test.txt 1 directory, 2 files ``` - 存取軟連結檔案,會有以下 error,請問為甚麼,以及如何解決(讓軟連結的檔案可以被正常存取)? ``` root@ubuntu22:/lsa$ cat test/test.txt cat: test/test.txt: Too many levels of symbolic links ``` :::success  rm test/test.txt ln -s ../test.txt ./test/ ::: ### 七、Firewall(20%) #### DMZ (20%) :::info  **初始環境** - 防火牆的 policy 都是 `ACCEPT` 且沒有任何規則 - Firewall 有 3 個網路介面 | NIC | IP | |:------ |:---------------- | | `eth0` | `192.168.0.1/24` | | `eth1` | `192.168.1.1/24` | | `eth2` | `192.168.2.1/24` | - routing table 如下: | Destination | Genmask | Iface | |:------------- |:--------------- |:------ | | `192.168.0.0` | `0.0.0.0` | `eth0` | | `192.168.1.0` | `255.255.255.0` | `eth1` | | `192.168.2.0` | `255.255.255.0` | `eth2` | ::: 1. 解釋為何需要 DMZ 這樣的架構(2%) :::success 保護內部網路,隔離被攻陷的伺服器,攻擊者只能停留在 DMZ 中,內部網路仍然受到防火牆的保護。 ::: 2. 如何啟用 Firewall 轉發封包的功能(2%) :::success sudo vim /etc/sysctl.conf ---begin of file--- ~ \# net.ipv4.ip_forward=1 把這行註解拿掉 ~ ---eof--- ::: 3. 試將 DMZ 的主機以及 LAN 的主機的 default gateway 設定成 Firewall(2%) > 接下來的題目,請說明要如何設定防火牆的規則以及所有涉及的指令 :::success sudo route del default sudo route add default gw {Firewall IP} 兩個主機操作一樣 ::: 4. Internet 能夠透過防火牆的 80 通訊埠連到 DMZ 內部的 web server,但無法連到 LAN 的內部主機 (2%) :::success - 外網能透過 Firewall 連到 DMZ 的 web server,並作一次 DNAT `sudo iptables -t nat -A PREROUTING -i 192.168.0.1 -j DNAT --to 192.168.1.1:80` - 同意該封包轉送 `sudo iptables -A FORWARD -i 192.168.0.1 -d 192.168.1.1 -p tcp --dport 80 -j ACCEPT` - 無法連到 LAN 的內部主機,最後加 `sudo iptables -A FORWARD -i 192.168.0.1 -d 192.168.2.1 -j DROP` ::: 5. DMZ 內部的主機要能夠透過防火牆連線到外網,但無法主動連線到 LAN 內部(2%) :::success - DMZ 能夠連到外網 `sudo iptables -I FORWARD -i 192.168.1.1 -o 192.168.0.1 -j ACCEPT` - 轉送到外網前,作一次 SNAT 將 source 改成 firewall IP `sudo iptables -t nat -I POSTROUTING -o 192.168.0.1 -j MASQUERADE` - 無法主動連線到 LAN 內部,最後加 `sudo iptables -A FORWARD -i 192.168.1.1 -d 192.168.2.1 -j DROP` ::: 6. LAN 能夠透過防火牆連到外網,也能夠透過防火牆連線到 DMZ 內部(2%) :::success - LAN 能夠連到外網 `sudo iptables -I FORWARD -i 192.168.2.1 -o 192.168.0.1 -j ACCEPT` - LAN 能夠連到 DMZ `sudo iptables -I FORWARD -i 192.168.2.1 -o 192.168.1.1 -j ACCEPT` ::: 7. 若希望 LAN 只能使用 `ssh` 連接到 DMZ 應該如何設定 DMZ 中的主機以及修改防火牆規則(2%) :::success firewall: - 修改 firewall 的 LAN to DMZ 的規則,僅允許 22 port `sudo iptables -I FORWARD -i 192.168.2.1 -d 192.168.1.1 -p tcp --dport 22 -j ACCEPT` - 禁止其他 LAN to DMZ 流量 `sudo iptables -A FORWARD -i 192.168.2.1 -o 192.168.1.1 -j DROP` DMZ: - `sudo vim /etc/ssh/sshd_config` - `ListenAddress 192.168.2.1` - `sudo systemctl restart ssh` ::: 8. 若希望 DMZ 內的主機只能瀏覽 Internet 的網頁應該如何修改防火牆規則(6%) :::success - 允許 DMZ 內的主機訪問 HTTP 和 HTTPS 網頁 `sudo iptables -A FORWARD -i 192.168.1.1 -o 192.168.0.1 -p tcp --dport 80 -j ACCEPT` `sudo iptables -A FORWARD -i 192.168.1.1 -o 192.168.0.1 -p tcp --dport 443 -j ACCEPT` - **允許 DMZ 內的主機訪問 DNS server** `sudo iptables -A FORWARD -i 192.168.1.1 -o 192.168.0.1 -p tcp --dport 53 -j ACCEPT` - 禁止 DMZ 內的主機進行其他類型的連線到 Internet `sudo iptables -A FORWARD -i 192.168.1.1 -o 192.168.0.1 -j DROP` ::: ## 丙、加分題 1. 列出以下助教分享的一個課程主題(各1%) - 蓬萊人偶 - Josh - 家正 - 葉芷妤 - 吳凱賀 2. 本課程因颱風假停課的兩個日期?(各1%) 10/3 10/31 3. sudo apt upgrade 最少可以按幾個按鍵輸入完畢,是哪幾個按鍵(2%) :::success sud[tab][space]apt[space]upg[tab] 13個動作 ::: 4. ~~幫助教或老師介紹對象並撮合成功,自告奮勇毛遂自薦也可以 (10%)~~ --- ###### tags: `lsa` # 113 LSA 期中考題_上機 ## 乙、上機 ### 一、 Web Server (32%) #### proxy (10%) -  1. Apache2 (3%) 網頁內容(1%) - 在 8080 port 建立一個 web 服務,並回傳 `/var/www/apache2/student.html`,其內容為以下: ```html= <html> <head> <h1> 學生姓名:{你的名字} 學生學號:{你的學號} </h1> </head> </html> ``` :::success - sudo vim /etc/apache2/ports.conf - Listen 8080 - sudo vim /etc/apache2/sites-available/000-default.conf ``` <VirtualHost *:8080> ServerAdmin webmaster@localhost DocumentRoot /var/www/apache2 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> ``` - sudo vim /etc/apache2/mods-available/dir.conf DirectoryIndex 後面加上 student.html - sudo service apache2 restart :::info 如何知道 apache2 的 default index file 該改哪裡? sudo grep index.html ./\*/* > grep [PATTERN] [PATH]  ::: 2. Lighttpd (3%) 網頁內容(2%) - 在 8081 port 建立一個 web 服務,並回傳 `/var/www/lighttpd/bt.html`,其內容為以下: ```html= <html> <head> <h1> BlueT 中文姓名:{請填入} BlueT 英文姓名:{請填入} </h1> </head> </html> ``` :::success sudo vim /etc/lighttpd/lighttpd.conf - server.document-root = "/var/www/lighttpd/bt.html" - server.port=8081 - index-file.names = ( "bt.html", "index.php", "index.html" ) sudo service lighttpd restart ::: 3. Nginx : 使用 nginx 設定以下 domain name 使他們連到對應的網頁 (4%)網頁內容(2%) 1. (1%) 存取 s<學號>.apache2.lsa:80,需 proxy 到 8080 port,並回傳學生資訊 2. (1%) 存取 s<學號>.lighttpd.lsa:80,需 proxy 到 8081 port,並回傳 BlueT 的資訊 3. (2%) 存取 s<學號>.nginx.lsa:80,需回傳 `/var/www/nginx/course.html`,其內容為以下 ```html= <html> <head> <h1> 這堂課的中文名字:{請填入} 這堂課的英文名字:{請填入} </h1> </head> </html> ``` :::success - sudo vim /etc/nginx/sites-available/nginx-proxy  - sudo ln -s /etc/nginx/sites-available/nginx-proxy sites-enabled/nginx-proxy - sudo service nginx restart ::: #### load balance (3%) -  1. 存取 s<學號>.lb.lsa:80,需以 round robin 的方式 proxy 到 8080 和 8081 port,並回傳對應的頁面 :::success - `sudo vim /etc/nginx/sites-available/nginx-lb` ``` upstream backend { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name s111213005.lb.lsa; location / { proxy_pass http://backend; } } ``` - `sudo ln -s /etc/nginx/sites-available/nginx-lb /etc/nginx/sites-enabled/nginx-proxy` ::: #### try_files (5%) - 在預設的情境下,當我們存取到一個 nginx 無法找到對應檔案的路徑,nginx 會回傳一個 404 not found 的頁面,如下: ``` $ curl localhost/not_existed <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx/1.18.0 (Ubuntu)</center> </body> </html> ``` - 請建立一個 `error.html` 內容為以下: ```html= <html> <head> <h1>Something, everything is wrong</h1> </head> </html> ``` - 並將回傳的內容從上述的 404 not found 改為此 `error.html` :::success - 在 /var/www/nginx/ 資料夾下建立 `error.html` - sudo vim /etc/nginx/sites-available/default ``` error_page 404 /error.html; location = /error.html { root /var/www/nginx; internal; } location / { root /var/www/html; index index.html; } ``` - sudo service nginx restart ::: #### header 情境題 (6%) 1. (3%) 在預設的情況下,使用者可以如何藉由 response 封包的"某一欄位"得知目前存取的網頁是藉由哪一種 web server (e.g. nginx, apache2)回傳的 ?  2. (加分題 (3%))承上題,在 nginx 當中如何將 response 封包的該個"某一欄位"的內容更改為 `lsa`,而不是 web server 的資訊 ? :::success add_header Server "lsa"; ::: #### 設定檔檢查 (3%) - 在生產環境,我們不希望因為有部分設定檔的問題影響到運作中的 web server,所以在啟用 新增/更改 的設定檔前會檢查並確保設定檔的基本語法沒有問題。請問在 nginx 要如何達成 ? :::success `sudo nginx -t` ::: ### 二、SSH (20%) #### SSH (5%) 1. 產生一對金鑰 2. 把正確的金鑰放到以下伺服器,並用金鑰連進去 3. 找助教 demo 時,給助教看連進去的過程 :::info IP: 44.211.137.141 username: lsa password: wow!LSA! ::: :::success ```bash= cd .ssh/ ssh-keygen ls .ssh ssh-copy-id -i ~/.ssh/id_rsa.pub lsa@44.211.137.141 ssh lsa@44.211.137.141 ``` ::: :::warning **加分題 - 輕薄的假象**(4%) 在此伺服器中 lsa 的家目錄有個 test 資料夾,裡面有個 `blueT.mp3`,但是此檔案怪怪的,該如何確認它究竟是什麼東西。 如果前面的題目做不出來,可以從這邊下載:<a href="http://44.211.137.141:8083/download/blueT.mp3" download="blueT.mp3" target="_blank">blueT.mp3 </a> > 請用另存新檔的方式下載 ::: :::success `cp lsa@44.211.137.141:~/test/blueT.mp3 .` `file blueT.mp3` ::: #### SSH Tunnel (15%) :::info 若需要在命令列(command line)上查看某網頁內容,可使用 **curl** 這個工具,方法: `sudo apt update` `sudo apt install curl` `curl 你要的任何網站網址(要有 http:// 或 https:// )` ::: - 把 SSH server 上的 port 8080 變成自己 localhost:12345。(當瀏覽器連到 http://localhost:12345 時,實際上顯示的是那台 SSH server 回傳的內容。) (5%) `ssh -L 12345:localhost:8080 lsa@44.211.137.141` - 把跟 SSH server 同個內網裡的 172.31.87.217:8080 變成自己 localhost:12346 (5%) `ssh -L 12346:172.31.87.217:8080 lsa@44.211.137.141` - 把自己 localhost:8080 變成 SSH server 上的 port <學號後 5 碼> (5%) `ssh -R 0.0.0.0:13005:localhost:8080 lsa@44.211.137.141`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up