Enter your email address below and subscribe to our newsletter

從 Linux vm Images 網站下載的 VMware image 與開新 VPS 必須做的事

文章分享:

檢查分割與磁碟空間

lsblk
james@stalwart:~$ lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                         8:0    0  124G  0 disk
├─sda1                      8:1    0    1M  0 part
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0  122G  0 part
  └─ubuntu--vg-ubuntu--lv 252:0    0   61G  0 lvm  /
  • 看到 /dev/sda3 還是 122G,而 LV 只有 61G → 可用空間尚未加入 LVM
    /dev/sda → VMware 磁碟檔案大小 124G ✅
  • /dev/sda3 → 分割大小 122G
  • /dev/mapper/ubuntu--vg-ubuntu--lv → 邏輯卷 61G

原因分析

  1. LVM 是兩層概念
    • PV(Physical Volume) → 物理卷:實際磁碟分割(你的是 /dev/sda3
    • VG(Volume Group) → 卷組:把 PV 的空間集合起來
    • LV(Logical Volume) → 邏輯卷:從 VG 中切一部分給檔案系統(你的 /
  2. 未使用空間
    • 你的 LV / 只是使用了 61G
    • 剩下的 61G 還在卷組(VG)裡,但沒有分配給任何 LV
    • 這是 LVM 的正常現象,方便未來再新增 LV 或擴展現有 LV

如何檢查剩餘空間

sudo vgdisplay ubuntu-vg
  • Free PE / Size → 顯示卷組中未分配的空間(你應該看到約 61G)

如何擴展 / 到剩餘空間

sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
  • lvextend → 把卷組剩餘空間全加給 /
  • resize2fs → 擴展檔案系統

執行完後:

df -h
  • / 應該會從 61G → 接近 122G

Linux Server 校準設定時區

在伺服器上正確設定時區(sudo timedatectl set-timezone "Asia/Taipei"
若未將時區調整到正確時會有下列的問題:

確保日誌記錄 (Logs) 時間一致

  • 伺服器會產生大量日誌,如系統日誌 (/var/log/syslog)、應用程式日誌、錯誤日誌等。
  • 若時區錯誤,查找特定事件的時間戳記會變得困難,尤其是跨時區進行故障排除時。

影響排程任務 (Cron Jobs)

  • Linux 伺服器常使用 cron 來安排定時任務,而 cron 預設使用系統時區。
  • 若時區錯誤,排程任務可能在錯誤的時間執行,例如凌晨 2:00 的備份變成其他時區的時間。

影響系統時間同步 (NTP)

  • NTP(Network Time Protocol)同步時間時,會使用系統時區來顯示時間。
  • 若時區設定錯誤,可能導致時間顯示異常,甚至影響某些需要時間精準性的應用程式。

影響應用程式與資料庫

  • 許多應用程式(如 Web 伺服器、PHP、MySQL、PostgreSQL)會依賴系統時區來處理時間相關的數據。
  • 若時區錯誤,可能導致:
    • 預約、交易紀錄等時間錯誤。
    • 應用程式時間計算不準確(如 JWT Token 失效時間)。

影響 SSL/TLS 憑證與驗證機制

  • SSL/TLS 憑證和安全通訊協定通常依賴正確的系統時間來進行憑證驗證與加密通訊。
  • 時間錯誤可能導致憑證驗證失敗,影響 HTTPS 連線或 SSH 連線。

設定時區(以 Asia/Taipei 為例)指令

sudo timedatectl set-timezone "Asia/Taipei"

修改預設使用者 ubuntu 的密碼

大部份下載回來的 ubuntu vm image 甚至 VPS 選 ubuntu image 時預設可 SSH 的帳號帳碼皆為 ubuntu 若未修改,很容易遭受暴力攻擊

避免被暴力破解攻擊

  • 許多惡意攻擊者會掃描公開 IP,並使用字典攻擊(Dictionary Attack)或暴力破解(Brute Force Attack)嘗試登入 ubuntu 帳號。
  • 預設帳號 ubuntu 是常見目標,若未設密碼或使用弱密碼,很容易被入侵。

防止未經授權的存取

  • VPS 或 VM 可能被多個人使用或存取,若不修改帳密,其他有相同映像檔的人可能知道你的預設憑證。
  • 一些 VPS 供應商可能會保留「後門存取」,導致安全風險。

提高伺服器管理的可追蹤性

  • 如果所有人都使用 ubuntu 帳號,當有異常行為發生時,無法追蹤是哪個用戶造成的。
  • 建立新的管理員帳號,並使用 SSH Key 登入,可以提高驗証強度與安全性。

修改 Ubuntu Linux Server 預設帳號 ubuntu 密碼指令

sudo passwd ubuntu

修改 Linux 最高權限帳號 root 的密碼

修改 Linux 最高權限帳號 root 的密碼是提升系統安全性的重要措施,以下是幾個建議改善的項目:

防止暴力破解攻擊 (Brute Force Attack)

  • root 是所有 Linux 系統的預設最高權限帳號,攻擊者通常會透過 SSH 或其他方式暴力嘗試破解 root 密碼。
  • root 密碼過於簡單,可能短時間內就被破解,導致系統完全失守,所以必須設定一組強密碼。

防止未經授權的 SSH 直接登入

  • root 可以直接透過 SSH 登入,攻擊者只需要知道密碼即可獲得最高權限。
  • 許多 VPS 提供商的預設 root 帳號密碼可能不夠安全,或者其他使用者可能已經知道預設密碼。
  • 建議完全禁用 root SSH 直接登入,只允許其他使用者透過 sudo 提升權限。

修改 root 密碼的指令

sudo passwd root

更新 Ubuntu Linux Server 作業系統

在 Ubuntu Linux Server 上執行 sudo apt updatesudo apt upgrade 來更新系統是維持伺服器安全性、穩定性及效能的關鍵步驟。以下是更新系統的主要原因:

修補安全漏洞,防止被入侵

  • Linux 系統和軟體可能存在安全漏洞 (CVE, Common Vulnerabilities and Exposures),攻擊者可以利用這些漏洞入侵系統。
  • Ubuntu 官方會釋出安全性更新,透過 apt update && apt upgrade 來修補這些漏洞,避免被駭客利用。

確保軟體的穩定性與相容性

  • 新版的應用程式和服務通常會修復錯誤 (bug fixes),避免系統不穩定或當機。
  • 舊版套件可能與新安裝的軟體不相容,升級可確保系統元件之間的相容性。

提升效能與新功能

  • 官方更新通常會優化程式碼,提高系統或應用程式的執行效能。
  • 例如新版的 Kernel、Apache、Nginx、PHP 可能會提供更快的執行速度或更少的資源占用。

維持系統可支援性,避免套件過時

  • Ubuntu 的套件庫 (apt) 會定期移除舊版套件,若長時間不更新,可能導致安裝新軟體時發生依賴性問題 (dependency issues)。
  • 例如,Ubuntu 22.04 預設提供 PHP 8.1,但某些應用可能需要 PHP 8.2,若不更新系統就無法獲得新版本。

修正已知 Bug,避免系統異常

  • 舊版程式可能有 Bug,導致系統異常或不穩定,更新可以修正這些問題。
  • 例如 Apache 或 Nginx 可能有錯誤的設定語法解析,更新後可修正。

更新 Ubuntu Linux Server 指令

sudo apt update && sudo apt upgrade

修改或清除 /etc/motd 內容

這個設定檔可以在 SSH 登入成功與失敗時顯示設定內容

sudo vim /etc/motd

修改 /etc/issue 設定登入提示訊息(login banner)

sudo vim /etc/issue
轉義序列說明
\d顯示目前的日期(格式:Wed Feb 21 2025
\t顯示目前的時間(格式:14:30:15
\s顯示作業系統名稱(通常是 Linux
\n顯示主機名稱(uname -n 的輸出)
\l顯示 TTY 裝置名稱(例如 tty1
\m顯示硬體架構(例如 x86_64
\r顯示作業系統核心版本(例如 5.15.0-91-generic
\v顯示完整的作業系統版本(例如 Ubuntu 22.04.3 LTS
\o顯示主機的網域名稱(FQDN)

Ubuntu 22.04 LTS \s \n \l

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                                 DEMO.VM

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     Host Name: \n

                     Time: \d \t

                     System IP address: \4


示範圖片

建立全新的使用者

新建使用者可以自取名稱,本例為 demo

sudo adduser demo

讓 demo 可以執行 sudo

sudo adduser demo sudo

轉換使用者為 demo

su demo

產生 ssh key

ssh-keygen

產生 authorized_keys 並將公鑰 id_rsa.pub 貼入 authorized_keys


touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

將 Linux 上產生的私鑰 id_rsa 下載到 Windows


# 將 Linux 上的 username 私鑰 id_rsa 下載到 Windows C:\Users\YourUserName\.ssh>
pscp demo@IP:/home/demo/.ssh/id_rsa C:\Users\YourUserName\.ssh

修改 SSH 連線使用 SSH Key 並禁用密碼登入

sudo vim /etc/ssh/sshd_config 

以下設定:

  • 不允許 root 登入
  • 使用者使用 ssh key 登入
  • 認証公鑰的檔案路徑
  • 所有使用者不允許使用者用密碼登入
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no

設定完成後重新啟動 SSH 就開始生效

sudo service ssh restart

開機自動啟動 SSH

sudo systemctl enable sshd.service

更改成自已的 hostname

sudo vim /etc/hostname

sudo hostnamectl set-name demo-vm
sudo hostname demo-vm

將預設的使用者 ubuntu 取消 sudo 的權限

sudo deluser ubuntu sudo

文章分享
James Tsai
James Tsai
文章: 10

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *