OpenSSH 的三個進階用法:CA 架構、透過 Jump Server 連線、2FA

在「How to SSH Properly」這篇裡面講了三個 OpenSSH 的進階用法:CA 架構、透過 Jump Server 連線,以及 2FA 的設定。

之前蠻常看到使用 -o StrictHostKeyChecking=off 關閉檢查,但 OpenSSH 有支援 CA 架構,可以先產生出 Root CA,然後對 Host 的 Public Key 簽名,在連線的時候就可以確保連線沒有被調包 (通常是 MITM),但得設計一套機制,自動化機器生出來後的步驟。

另外一個可能的方式是 SSHFP,搭配 DNSSEC 也可以確認連線沒有被調包,不過這又牽扯到 DNS 的部份...

第二個提到的是 Jump Server (Bastion host),之前的作法是用 -A 把 authentication agent 帶過去再連進去,這邊則是教你怎麼下指令直接連線,而不需要先連到 Jump Server (但實際上底層是透過 Jump Server)。

第三個是 2FA,對於還是使用密碼登入的系統可以多一層保護。文章裡面講的是 TOTP 的方式 (就是現在還蠻常見的 app + 六碼動態數字)。

先知道有這些東西,之後真的有用到的場景時再回來看...

移除 Facebook 上的行動電話

Facebook 上的行動電話號碼除了被拿來當作 2FA 的備案外,也被強制分享。更糟的是還被拿來當作廣告的條件:

目前同時有 TOTP (Facebook 的 app 提供的) 與 U2F,完全不會用到簡訊認證,就拔掉吧...

2FA 的 QR code 與 CanvasFingerprintBlock

在「Rasmus Lerdorf 關於 VPS 的介紹測試...」這篇的留言裡,Jimmy 提到 Vultr 是有 2FA 可以用的 (當初沒找到...),於是就花了點時間設定...

但設定的過程中發現 TOTP 的 QR code 出不來,但在 dev console 裡面卻看得到 img 元素。

這種情況前幾個月在另外一個網站上也遇過 (當下拿 Firefox 測也不行),於是就認為他們網站的問題,開了 support ticket 也沒回,一直沒下文的情況下就丟著。現在在 Vultr 上又遇到同樣的問題的話,看起來有可能是我的問題 (或是他們兩個站台都用同樣的 library),於是就仔細點找...

找的過程中間發現有 canvas 元素,然後 canvas 元素有個 inline css 是 display: none;,先試著把這條拿掉,就出現了... 接下來就好猜了。

在 2014 年的「用 Canvas Fingerprint 取代部份 Cookie」這篇就有提過可以用 Canvas 追蹤使用者的問題,於是就有介紹了 CanvasFingerprintBlock 這個在 Google Chrome 上的套件,阻擋 Canvas 的存取。一關掉這個套件就正常了 XDDD

為了隱私問題,套件本身還是掛著,但當遇到發現有 QR code 出不來的時候就知道去 dev console 內改掉 XDDD

然後回到原來本來以為有問題的那個網站,也是一樣進 dev console 改掉後就看得到可以掃了... 看起來這兩個站可能是用一樣的 library?找出來再去戳這兩個站好了...

WordPress.com 也支援 OTP 了...

WordPress.com 前幾天宣佈支援 One Time Password (OTP,動態密碼):「Greater Security with Two Step Authentication」。

因為是使用 HOTPTOTP,所以可以使用 Google Authenticator (Android) 或是 Google Authenticator (iOS) 當做 OTP software。

不過用手機跑 OTP software 的安全性還是沒有傳統實體 token 的高 (可以藉由 OS exploit 取得 key),像 AWS 就同時有提供實體 OTP 與 HOTP+TOTP 的版本...

不過 AWS 的實體 OTP 低成本應該是靠 AWS 量而壓出來 (靠 IAM 一個帳號設很多子帳號,每個子帳號都可以設定要不要用 OTP),這部份 WordPress.com 沒有這個需求。另外 WordPress.com 的資料似乎沒有 AWS 吸引人,所以...

大概還是不會設 OTP 吧...