發表文章

精選文章

學習案例:首次登入的系統巡檢任務 (V2.0 增強版)

 # 學習案例:首次登入的系統巡檢任務 (V2.0 增強版) ## 情境介紹 (The Core Problem) 您是一位新上任的系統管理員,今天第一次登入公司的一台重要伺服器。您的首要任務不是修改任何東西,而是進行一次**非侵入式的系統巡檢**,全面了解這台主機的作業系統版本、帳號與網路配置、以及當前的運行狀態,並將結果彙整成一份結構化的報告。 ## 你的任務是: 1.  在你的家目錄下,建立一個用於存放本次巡檢報告的工作區。 2.  全面收集系統的**版本、帳號、網路、磁碟、登入及程序**等核心資訊。 3.  將收集到的原始數據,分門別類地儲存到一份報告檔案中。 4.  分析這份報告檔案,從中過濾並找出關鍵資訊。 5.  完成報告後,整理工作區。 --- ### 階段一:【建立工作區】為你的任務做好準備 * **問題:** 在開始收集資訊前,我需要一個乾淨的地方來存放我的報告。 * **操作與解說:**     ```bash     # 確認當前位置     pwd     # 建立名為 system_check 的資料夾     mkdir system_check     # 進入該資料夾     cd system_check     # 建立一個名為 report.txt 的空白報告檔     touch report.txt     # 確認工作區與檔案已就緒     ls -l     ```     * **階段成果:** 您已成功建立 `~/system_check/` 工作區及 `report.txt` 報告檔。 --- ### 階段二:【數據採集】將系統狀態輸出到報告中 * **問題:** 如何依序執行一系列檢查指令,並將它們的結果有條理地全部存入 `report.txt` 中? * **操作與解說:** 我們將使用 `>` (覆蓋) 來寫入第一筆資料,然後統一使用 `>>` (附加) 來新增後續所有資訊區塊...

學習案例:設定多人共用的安全 Web 目錄

# 實戰案例:設定多人共用的安全 Web 目錄 ## 情境介紹 (The Core Problem) 您是公司的系統管理員,目前正在管理一台 Web 伺服器。有兩位網頁開發者,`alice` 和 `bob`,他們需要共同開發一個位於 `/var/www/project_alpha` 的新網站。 **您的核心挑戰是:** 1.  `alice` 和 `bob` 都必須能夠在 `/var/www/project_alpha` 目錄中新增、編輯和刪除檔案。 2.  為了解決協作問題,`alice` 建立的檔案,`bob` 必須能夠編輯,反之亦然。 3.  系統上其他的無關使用者,絕對不能對此目錄有寫入權限。 4.  最終,網站伺服器軟體(例如 Nginx,通常以 `www-data` 使用者身份運行)需要能夠讀取這些檔案,以便將網頁呈現給訪客。 --- ## 階段一:【建立協作團隊與成員】 * **問題:** 「首先,我需要為開發者 `alice` 和 `bob` 建立系統帳號,並將他們納入一個名為 `webdevs` 的共同開發群組中。」 * **操作與解說 (以 `root` 或具備 `sudo` 權限的使用者執行):**     1.  **建立 `webdevs` 群組:**         ```bash         sudo groupadd webdevs         ```         * **`groupadd`**: 用於建立一個新的使用者群組。     2.  **建立使用者 `alice`,並將其主要群組設為 `webdevs`:**         ```bash         sudo useradd -m -s /bin/bash -g webdevs alice         ```         * **`us...

學習案例:設定 Ubuntu 伺服器的 SSH 金鑰安全認證

# 實戰情境:設定 Ubuntu 伺服器 (172.30.0.199) 的 SSH 金鑰安全認證 ## 概述 本教學模擬一個常見的內部訓練情境。指導者已備妥一台全新的 Ubuntu 伺服器,學員需從自己的 Ubuntu 電腦,透過私有網路連線至該伺服器,並完成從密碼登入到金鑰認證的安全升級。 ### **情境設定** * **指導者提供資訊:**     * 伺服器 IP 位址:`172.30.0.199`     * 初始登入帳號:`ubuntu`     * 初始登入密碼:(指導者提供) * **學員端 (您的電腦):**     * 作業系統:Ubuntu Linux     * 角色:跟隨本指南操作,連線至伺服器。 --- ## 步驟一:【前置作業】網路環境確認 在嘗試連線之前,必須先確認您自己的電腦與目標伺服器在網路上是「可溝通」的。 ### **1.1 檢查自身網路座標** * **問題:** 「在連線到別台電腦前,我得先知道我自己的 IP 位址是什麼,以及我所在的網路環境為何?」 * **操作 (在您的 Ubuntu 電腦上執行):**     ```bash     ip a     ```     * **解說:** 找出您電腦的網路卡(如 `ens18`, `eth0`),記下其 `inet` 後面的 IPv4 位址。 ### **1.2 確認與目標伺服器的連線** * **問題:** 「我知道我的位置了,那目標伺服器在網路上『活著』嗎?它的 SSH 服務有在聽嗎?」 * **操作 (在您的 Ubuntu 電腦上執行):**     1.  **測試網路是否通暢 (Ping):**         ```bash         ping -c 4 172.30.0.199         ```     2.  **測試 SSH 服務端口是否開啟 (Netcat):**   ...

透過 curl 的 timeout 設定識別 http 的網路連線壅塞問題

網路連線壅塞是一個難解的問題, 因為網路會產生抖動(Jitter)現象, 抖動發生時, 連線會突然變得很慢. 當狀況改善後就會回復. 但很大的原因是因為是因為 DNS 解析或是 TCP 交握的過程產生的問題.  當 curl 連線到一個 HTTP 網址時,其工作流程包括以下幾個主要步驟: 1. DNS 查詢 目標 :解析主機名 (如 example.com ) 對應的 IP 位址。 過程 : curl 通過 DNS 伺服器進行查詢,獲取目標伺服器的 IP 地址。 結果 :若查詢成功,返回 IP 地址, curl 將繼續下一步。若查詢失敗, curl 則返回 DNS 錯誤並中止。 2. TCP 三向交握 (Three-Way Handshake) 目標 :建立與目標伺服器的 TCP 連線。 過程 : curl 通過系統內核發送一個 SYN 封包,目標伺服器回應 SYN-ACK ,然後 curl 返回 ACK 完成三向交握,建立起 TCP 連線。 結果 :若在 --connect-timeout 設定時間內未完成三向交握,則連線失敗並返回超時錯誤。 3. 發送 HTTP 請求 目標 :向伺服器發送具體的 HTTP 請求,根據 URL 設定不同的請求方法(如 GET 、 POST )。 過程 : curl 構建 HTTP 請求標頭並附加任何所需的數據(如表單數據),然後通過已建立的 TCP 連線將請求發送到伺服器。 結果 :伺服器接收請求並準備回應,若過程中出現網路問題,則請求可能中止或失敗。 4. 伺服器處理請求並返回回應 目標 :伺服器根據請求的 URL 路徑處理並生成對應的回應內容。 過程 :伺服器確認請求內容後,由 HTTP 伺服器(如 httpd )根據需求(例如讀取靜態文件或調用後端服務)生成回應,並加上適當的 HTTP 狀態碼和標頭。 結果 :伺服器將回應內容傳回給 curl 客戶端。 5. 接收 HTTP 回應 目標 : curl 從伺服器接收回應數據,並在終端或指定的輸出目標中顯示。 過程 : curl 讀取 HTTP 回應標頭(包括狀態碼,如 200 OK 、 404 Not Found 等)及內容,並根據需要顯示、保存或處理該回應。 結果 :若指定了輸出文件, curl 將回應寫入文件;若未指定,則在終端中顯示。...

VMWARE VM linux 擴充硬碟空間

可以參考 AWS 上面的文章  https://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html  但 EC2 流程更簡單, 你在EC2調整後他自動幫你最佳化到好. Linux 內部他幫你處理了. VMWARE ESXi 就自己動手流程是 先調整 VMWARE 的VM硬碟空間 再去 LINUX 擴大硬碟分割區 然後把  FileSystem 放大 就好了...XD but 很重要的是, 因為這些有風險建議先備份免得出意外!!!  VMWARE ESXi Ubuntu Linux 放大VM硬碟 ESXi 把要放大硬碟的VM主機關機, 調整外部的硬碟容量設定大小(增大) 重開機, 從 ESXi console 登入 root 調整 可以先檢查目前的 disk 容量 # fdisk /dev/sda -l 重新掃描磁碟, ex: /dev/sda # echo 1 | sudo tee -a /sys/block/sda/device/rescan 延伸VM磁碟配置表 , 延伸後可以再檢查看看VM硬碟容量是否已經改變 #  growpart /dev/sda 3 重新讀取磁碟配置表 #  partprobe -s /dev/sda 延伸 LVM 的 Physical Extent (PE) , pvdisplay 可以檢查pv容量是否變化 #  pvresize -v /dev/sda3 延伸 LVM 的 Logical Volume (LV) * 完全延展 # lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv * 指定容量延展 # lvextend -L +100G /dev/ubuntu-vg/ubuntu-lv 延伸檔案系統 size , 可以用 df -lh 檢查容量 # resize2fs /dev/ubuntu-vg/ubuntu-lv

NGINX 沒有 index.html 預設顯示目錄索引

圖片
可以參考這一篇  https://serverfault.com/questions/312796/custom-autoindex-pages-with-nginx 設定 nginx 沒有 index.html 有索引檔案 location / { autoindex on; autoindex_format xml; xslt_stylesheet /path/to/custom.xslt } 但是設定好不是很美觀, 沒有 CSS 的排版及顏色  https://github.com/gibatronic/ngx-superbindex  再參考這個專案, 改成 xslt 檔案來配顏色及排版. 大功告成!!

買個 HTTP SSL 憑證

圖片
自從 sslforfree 及 letsencrypt 有提供免費憑證後, 就很少參與付費買憑證這種事    https://www.sslforfree.com/     https://letsencrypt.org/zh-tw/  後來連 wildcard 也跟著免費了  https://community.letsencrypt.org/t/acme-v2-production-environment-wildcards/55578 但, 在商業應用上, 為了某些因素還是得買個有效長一點的憑證, 才不會拿出來感覺像是詐騙網站 搜尋一下網路上賣憑證的廠商超級多的, 實在不知道該如何比較.. 後來我只能稍微檢查一下, 看看瀏覽器內的內建憑證商, 有哪些憑證有效期間比較長來選擇 這裡有些基本的憑證資訊要先理解一下,  買起來才會順利 https://haway.30cm.gg/ssl-key-csr-crt-pem/ 申請的流程 1.需要先有個私鑰 Private Key 2.還需要有簽署憑證須求檔 CSR 3.再來提交到網站上, 他就會給你生成的 CRT 憑證, 及 PEM or CRT 中繼憑證 以  https://cheapsslsecurity.com/ 為例, 你先選擇 SSL 憑證廠牌後, 在選擇需要的憑證格式 付款後就會進入生成憑證的流程.  但還是需要先生成 Private Key 才可以 可以用 openssl 工具產生KEY and CSR ubuntu@hk:~/csr$ openssl req -new -newkey rsa:2048 -sha256 -nodes -out wildcard.apptest.com.csr -keyout wildcard.apptest.com.key -subj "/C=HK/ST=Queenswat/L=Admiralty/O=Topplayer/OU=IT/CN=*.apptest.com" 這裡我生成的是一個 Wildcard 的萬用字元憑證, 網站會依據 csr 生成簽署過後的 CRT 給你, 通常會是一個 ZIP 壓縮檔.  因為商業銷售與代理機制的關係, 所以通常不會是由 ROO...