建立新 VM 後的標準流程(Standard Procedure After Creating a New VM)

前言

常常在 linode 或其他 platform 開 VM,如果開完的話其實有些動作要先做,別急著用 root 開始工作 (咳咳。

以下內容都是從參考資料的影片來的,影片中的講者有很多優質的 Python 和後端分享影片,推薦追蹤。

紀錄

更新機器

剛擁有一個 VM 時,先用 root 登入,然後做基本更新

apt-get update && apt-get upgrade

設定 hostname

設定 hostname

hostnamectl set-hostname <your-hostname>

vim/etc/hosts

vim /etc/hosts

加入 VM 本身的 ip

# /etc/hosts
127.0.0.1       localhost
XXX.XXX.XXX.XXX  <your-hostname> # <-- add this

# The following lines are desirable for IPv6 capable hosts
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

創建使用者

創建一個自己的使用者,以後就別再用 root 登入了,除非情況特殊。

adduser <username>

把 user 加入 sudo group 中,這樣也可以下一些原本只有 root 才能下的指令

adduser <username> sudo

ssh key 登入

用剛剛建立好的使用者登入,然後建 .ssh/ 的路徑

ssh <username>@XXX.XXX.XXX.XXX
mkdir -p ~/.ssh

(Local) 接著把 local 的 ssh key 複製到剛建立的路徑下,如此一來之後登入就不用打密碼了

scp ~/.ssh/id_rsa.pub <username>@XXX.XXX.XXX.XXX:~/.ssh/authorized_keys

回到 server 上看,確認是否成功複製到 server

ls .ssh/

查看完成後,更改一下路徑跟檔案的權限。

sudo chmod 700 ~/.ssh/
sudo chmod 600 ~/.ssh/*

重登一次,這次就不用再打密碼了

ssh <username>@XXX.XXX.XXX.XXX

重啟 ssh server

sudo systemctl restart sshd

簡易防火牆設置

有個簡單的防火牆設置套件 ufw(Uncomplicated Firewall) ,顧名思義就是比較不複雜的防火牆,設定阻擋這台 server 被亂戳。

sudo apt-get install ufw
sudo ufw default allow outgoing
sudo ufw default deny incoming

抵擋所有外來流量後,再開放一些 service 的使用,像是 ssh,以及放後端會常用的 port,第一次安裝後要執行 sudo ufw enable 才算成功。

sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 5000/tcp
sudo ufw enable

查看已經設定的規則

sudo ufw status

(Optional)關閉 root 登入和密碼登入

開啟 sshd_config

sudo vim /etc/ssh/sshd_config

把選項 PermitRootLogin 以及 PasswordAuthentication 改成 no

# Ciphers and keying
...

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no # <-- change this to `no`
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

...


# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no # <-- change this to `no`
PermitEmptyPasswords no

... 

參考資料

Tags:
# linux
# ubuntu
# backend