開源軟體的雙面刃:免費背後的隱藏成本

每日例行地開啟最愛的 Save for later,準備觀看有哪些部落格更新、產品釋出新版本時,一行醒目的提示告訴你「我們即將關閉伺服器」。 錯愕,這是 2024 年十月底每一位 Omnivore App 難民的心情。 一、開源軟體的普及與迷思 說到開源軟體,不外乎就是 free 或是 freedom 的軟體,可以說是免費的軟體,也可以說是自由的軟體。 早期的 LAMP Stack 相較於 Microsoft 的 Windows Server、IBM 或是 Oracle 付費的服務,每個組件都是免費的,廣泛受到 Geek 到大中小型企業的使用 同時,開源軟體顧名思義是開放原始碼,在授權許可下可以自由使用、修改、分享,許多人將開源與安全劃上等號。 二、開源軟體的安全現況 多雙眼睛的侷限 即便開放原始碼,所有人都能查看開放原始碼,如果有任何 bug 或是安全漏洞,都「應該」會被發現。 我使用「應該」一詞,正因為許多人(包含我)在安裝開源軟體時,就如同安裝閉源軟體一樣,並不會查看全部的程式碼,確認安全後才進行安裝。而是做一個「大家都看過了,應該很安全」的假設。 例如當你想用 Nginx 取代 Apache 時,可能僅會比較兩者的 feature 與 benchmark,並不會查看內部 tcp socket 是如何管理等等,或是 buffer overflow 時的錯誤處理機制。 開源是否暴露更多漏洞? ####安全問題的挑戰 當我們將軟體開源,等於是將所有安全問題也給暴露了出來。 舉例來說,假如我們 self-hosted 一個 NAS 服務,這個 NAS 使用指定的 port 進行 web 與 API 的存取,例如 :8787。 當一個 Hacker 看到該 NAS 的 Auth 並沒有任何 rate limit,就可以直接在 NAS 內進行 port scan 或是 brute force 攻擊,取得這個 NAS 服務的控制權。...

2024-11-01 · 2 min · 263 words

A smarter way to change directory: zoxide

在日常的開發工作中,我們經常需要在不同的目錄間切換。雖然 cd 命令已經足夠好用,但如果有一個更聰明的工具能記住我們最常用的目錄,並讓我們用最少的按鍵就能快速跳轉,那豈不是更棒? 這就是 zoxide 的用武之地。zoxide 是一個由 Rust 編寫的「更聰明的 cd 命令」,靈感來自 z 和 autojump。它會記住你最常使用的目錄,讓你只需輸入幾個字符就能快速跳轉。 zoxide 的主要特性 自動匹配: 不需要輸入完整路徑,zoxide 會根據輸入自動匹配最相關的目錄: 自動紀錄過去的目錄: zoxide 會記住你最常使用的目錄,讓你只需輸入幾個字符就能快速跳轉。這些資料可以使用 zoxide query 來查詢,或是 zoxide edit 來管理。 互動式選擇: 結合 fzf,可以互動式地選擇目標目錄 輕量快速: 用 Rust 編寫,啟動迅速,幾乎不會影響 shell 的啟動時間 安裝與配置 zoxide 的安裝可以參考 官方文件,我們就不多贅述了。 安裝完成後,我們需要在 shell 的配置文件中添加初始化命令。以 zsh 為例,在 ~/.zshrc 的末尾添加: eval "$(zoxide init zsh)" 重新打開終端或執行 source ~/.zshrc 後,zoxide 就可以使用了。 使用方法 zoxide 的基本用法非常直觀,經過自動執行 zoxide init zsh 後,我們可以使用 z 和 zi 自動匹配: ❯ ls boo bar baz ❯ z bo ❯ pwd /home/raiven/boo 即便沒有輸入完整路徑,也能夠自動匹配最相關的目錄 ❯ pwd /home/raiven/dev/omegaatt-blog ❯ z ❯ pwd /home/raiven ❯ z blog ❯ pwd /home/raiven/dev/omegaatt-blog 互動式選擇: ❯ zi ~ < 98/98(0) 296....

2024-09-24 · 1 min · 130 words

使用 Bitwarden 與自架後端 Vaultwarden 來管理密碼與 2FA Authenticator

在尋覓有哪些 self-hosted 專案好玩時,偶然發現了 1password、LastPass 的開源替代方案,甚至後端資料庫能自架,決定架來用用看。 使用 Bitwarden 來管理密碼 Bitwarden 是一款流行且功能強大的密碼管理工具,它提供了一個安全的方法來存儲和管理所有密碼。作為一個開源產品,Bitwarden 允許用戶選擇自行托管其服務,這意味著用戶可以在自己的服務器上運行 Bitwarden,從而更好地控制自己的數據安全。 Bitwarden 的特點 安全性: Bitwarden 使用端到端加密,確保只有您可以訪問您的密碼。 跨平台支持: 支持 Windows、macOS、Linux、Android 和 iOS。 易於使用: 提供直觀的用戶界面和簡單的操作流程。 開源: 開源,增加了透明度和安全性。 Bitwarden 同時支援基於時間的一次性密碼,讓 TOTP 也能自動填入。也能透過 github.com/scito/extract_otp_secrets 來提取 Google Authenticator 內的 2FA 資訊,儲存進 Bitwarden 中。 Bitwarden 開源了 client 與 server,在 server 端的選擇有以下: 使用 Bitwarden 提供的官方服務,又分為免費跟付費,但這個選擇就跟 1p 沒太多區別。 自架 Bitwarden 提供的 open source server,由於是使用 C# 與 mssql,吃的記憶體著實太多。 自架 Bitwarden 相容的後端,我採用的是 rust 實做的 Vaultwarden,搭配 sqlite,記憶體使用量與官方的 C# 不是一個量級的。 Bitwarden 架構 bitwarden 的 local storage 都是儲存加密後的密碼資料,不會使用明碼儲存,故上傳到 server 上的也僅僅是加密後的密碼資料。...

2024-09-01 · 3 min · 505 words

在 Firefox 上使用 PWA 將網頁應用安裝成 Desktop App

前言 開應用時,跨平台的桌面解決方案時常困擾開發者,在 Linux Desktop 上要支援多種桌面協議與桌面管理系統,更是複雜許多。時常會看到 Electron 等等基於 chromium 的技術。 當然也可以像是 zed.dev 這樣的 geek 精神,自己寫了一套跨平台的 GUI 框架,但多數新創公司可能沒有這些資源來實現。例如已經非常成熟的 Notion.so、Obsidian 等等都是基於 Electron 實現的。 我並非一個 anti-Electron 或是 deGoogle 的人,但試圖找到其他解決方案正式樂趣之所在。 PWA(Progressive Web App) 詳盡的 PWA 技術可以到 mozilla 的文件中查看,對我來說只要可以達到目的:可以在 Windows、Mac、Linux 上封裝成 Desktop Aplication 即可。 官方支援 mozilla 官方有一個文件針對「安裝網頁應用到桌面環境」的歷史講解,可以參考官方文件。 文中提到過去將網址「儲存」在桌面上的類似「書籤」的方法(SSB),以及與 PWA 的不同之處:PWA 的使用者資料是儲存在桌面環境中。 PWA Add-on 上述文件內有提到需要使用 Fan-maded 的 PWA Add-on 來安裝 PWA:Progressive Web Apps for Firefox by Filip Štamcar。 他是一個開源的 Firefox 擴充套件(filips123/PWAsForFirefox),具有完整的文件。 安裝過程 在 Firefox 瀏覽氣上安裝 PWA Add-on 瀏覽器會自動跳到設定頁面,首先會需要同意 EULA 接著會需要安裝 connector,需要透過該 connector 才能連結瀏覽器本身與 extension。 connector 由 Rust 編寫,使該 extension 可以在跨平台的桌面環境中管理 firefox 設定檔、runtime 等等未開放給 extension 存取的資源。 Windows: Windows 的 connector 除了手動安裝外,也推薦使用 winget 來安裝,類似於 apt/yum 的套件管理工具。 Linux Linux 的 connector 可以到 github release 上找到,例如我的作業系統是 OpenSUSE Tumbleweed,則可以下載 ....

2024-08-25 · 2 min · 226 words

使用內建的 rsync 備份 Truenas Scale 到 Proxmox Backup Server

前言 過去我會使用 backup script 配合 crontab 來定期的備份 nas 的資料,這次更換了 Proxmox Backup Server 的物理機後,多了一個硬碟的空間好讓我實驗 Truenas Scale 的備份機制。 差異 rsync 本身並沒有 server/client 的概念,只有 source 與 destination。 過去我會在備份主機上透過 samba 來 mount Nas 到資料夾內,檢查有沒有 mount 成功才在備份主機上使用 rsync。 而 Truenas Scale 提供的 Data Protection 功能中,內建了 Rsync Tasks 模組,透過預先建立好的 ssh credential 來呼叫備份主機進行 rsync。 同樣都是由備份主機來進行 rsync,主要是任務的執行呼叫是 Truenas Scale 本身還是備份主基本身。 在 Truenas Scale 上建立備份任務 建立 SSH Pair 首先到 Credentials -> Backup Credentials 的頁面 點擊 SSH Configurations 中的 Add...

2024-05-19 · 1 min · 174 words

透過 Distrobox 解決 Linux 環境依賴問題

前言 自從一年前嘗試使用 KDE Neon 後,主要的桌面開發環境就從 wsl 整個遷移到 Linux 上。這一年來感受到,KDE Neon 可能正如 reddit 上的留言闡述的那樣,只是 KDE 團隊的「實驗場」,可以享受到「最」新的 Plasma 與「較」新的 Kernel,卻始終是基於 Ubuntu 22.04 LTS,即便 Ubuntu 24.04 LTS 推出之際,也不再讓我感受性感。 因緣際會,在 Ubuntu 24.04 LTS 發布之際,我決定從 KDE Neon distro hopping 到 OpenSUSE Tumbleweed,這是一個由 SUSE 公司推出的滾動式發行版,軟體包在 SUSE 測試過後便會推送到 OpenSUSE 的 Repo(其他 OpenSUSE 的功能省略)。這次的轉換主要是為了獲得最前沿的 Linux 體驗。OpenSUSE Tumbleweed 的滾動更新模式能確保我始終使用最新的軟體和技術,這對我來說是一個有趣的選擇,即便有可能收到有問題的 xz 更新 XD。 ❯ fastfetch ...... raiven@raiven-suse .,cdxxxoc,. .:kKMMMNWMMMNk:. ------------------ cKMMN0OOOKWMMXo. A ;0MWk:' ':OMMk. OS: openSUSE Tumbleweed 20240517 x86_64 ;WMK;' 'lKMMNM, :NMK' 'OMW; Host: FMV UH-X cMW; WMMMN ,XMK' oMM....

2024-05-18 · 6 min · 1213 words

透過 frp 與 GCP 打通家用 kubernetes cluster 的對外連線

概述 在家裡面架著一台 lab,使用 proxmox ve 作為 vm server 透過 qemu 虛擬化一台 ubuntu server vm 在這個 vm 上使用 k3s,啟動 kubernetes 的服務 在 kubernetes 內跑著眾多 dockerize 的 containers。 雖然我不是資深維運專家,但我知道這可能很搞笑。 會需要這麼麻煩還不是為了省一點點 GKE 的成本(即便可能沒省到),但在自家建一個 lab 環境而不用計算由時間計價的 infra 成本,還是挺省腦袋的。 過去僅是將 service 使用 nodePort 來讓家裡面的其他裝置可以連線,或是使用 wireguard 作為 VPN 來從遠端連線,就是沒有動力處理好 http service 與 TLS,趁這個假日剛好需要把 自架 vaultwarden 後端 給 expose 出來,便誕生了這篇。 在當前的雲端運算時代,許多開發者和 IT 專業人員都面臨著一個共同的挑戰:如何有效地將位於不同網絡環境中的服務整合並暴露給公眾。特別是對於那些希望將家用網絡中的服務有效連接到公共雲端(如 GCP,AWS,Azure,OCI)的用戶來說,這一挑戰尤為突出。文內主要講述通過在 GCP VM 上部署 FRP(Fast Reverse Proxy)服務器,結合家中的 kubernetes cluster 上配置的 FRP 客戶端,來實現一個高效且安全的服務部署流程。 透過此方式,我們不僅可以利用 GCP VM 作為公共 IP 的代理,實現從互聯網到家庭網絡的無縫連接,還能藉助 kubernetes 的強大功能進行快速的服務部署和管理。同時,利用 ingress-nginx 作為 ingress 控制器和 cert-manager 進行 TLS 設定,我們能夠確保服務的安全性和可靠性。...

2023-11-12 · 5 min · 923 words

使用 wireguard 與 aws 搭建虛擬內網

先前在「在 AWS 上使用 EC2 建立 FRP 玩玩內網穿透」一文中敘述了如何透過 AWS 實現虛擬穿透,也在內文中提到或許可以使用 wireguard 搭建內網,其原因也很簡單:每更新一個 port 都要重新設定 server side 實在是太麻煩了,拖更了進一年終於要開始寫 wireguard 的使用了。(AWS 免費也快到期了) 遇到了什麼問題 在使用 wireguard 來搭建 VPN 前,我是使用 zerotier 搭配 Mikrotik RB5009 所執行的 RouterOS 7.x 版本,讓外網可以連回家裡的網路環境 但 zerotier 的網路拓樸是存在他們官方伺服氣上,與其相信 zerotier,我想在 vps 上建立虛擬機,並只許特定 ip 登入,可能更加可靠(? 解決方法 於是我在 frp tunnel VM 上建立了 wireguard 節點,作為外網與內網溝通的橋樑。 wireguard 是一個高效的現代化 VPN,目標是比 IPsec 更快。在 2020 年時正式推出 1.0.0 版本。 wireguard 的拓樸實際上是 peer2peer,甚至可以達到 full mesh,但礙於錢錢不夠,單一個節點作為 server side 就足夠了。 server 使用 docker-compose 能快速部署 wireguard 服務,我們使用的是 wg-easy 簡單換掉一些參數:...

2023-10-01 · 2 min · 314 words

透過 WakaTime 幫助來紀錄自己做了哪些事,並製作獨特的 GitHub Profile

WakaTime 介紹 WakaTime 是一款紀錄自己生產力的工具,透過客戶端插件、集成工具紀錄「行徑」並發送到官方|非官方伺服器,可以分析花了多久時間在哪個專案、哪個程式語言、會議、code review。 記憶力不佳,過去常常無法想起某段時間做了哪些專案,甚至 daily standup 前忘記昨天做了什麼,發現了 wakatime 可以透過 vscode 插件、terminal 插件來查看自己在哪些時間變更了哪些專案、檔案,甚至可以紀錄下過得指令(僅 binary 的部份,不含參數不會洩漏資料)。 在使用 WakaTime 前,先到 WakaTime 官網上註冊並登入,取得最重要的 API Key(API Token): 安裝相應的客戶端插件。wakatime 支援的插件、編輯器包括但不限於: Visual Studio Code Vim Excel Terminal zsh bash fish iTerm2 舉例來說我們可以安裝 vscode 插件,並跟著 Installation 輸入完 API Key 就可以開始寫點東西了。 查看報告 使用了一段時間後,可以回到官網查看 dashboard 查看自己上週、前兩週、前一個月每天花了(浪費)了多少時間,以前三十天的圖為例: 或是 YoY 的活動圖 以此 blog 的 repo 來作為舉例,可以查看某個 project 的細節 在該專案花了多少時間、什麼語言: 檔案、分支的時間分配: 費用 免費版本的功能已經十分完整了,完整費用方案在此。 透過學生帳號可以申請教育折扣,年度付費 Premium 方案的話一年只要 59 美元,就可以享有完整的 WakaTime 服務。 雖然付費方案的功能幾乎都可以透過免費版本就有的 API 來完成,但仍可以花點小錢支持團隊,或是開啟公司計畫。...

2023-08-03 · 2 min · 298 words

Logitech Media Server 遷移紀錄:從 Bare Metal 到 Docker 再到 Podman

2021 年公司開始實施 322 WFH,少了通勤的時間,在家的時間也多了,就想在上班時也能好好對待自己,雖然是木耳但始終會想知道,網路上說的獨立訊源減少雜訊是有多重要,亦或只是玄學?於是誕生了Raspberry pi 4 + piCorePlayer 7.0.0 折騰筆記這篇筆記,到現在這個部落格的累積曝光最高的也是因為這篇吧。 雖然說現在已經出到 8.2.0,但也已經是 2022 年六月的版本了,起初因為 raspberry pi 4b 便宜而使用 piCorePlayer,後來也因 raspberry pi 4b 漲價(漲幅超過 100%)進而不使用 piCorePlayer,不知道官方後來沒更新了是因為樹莓派太穩定,還是真的太貴了…。 從 Bare Metal 到 Docker 當時在學習 HomeLab,首先是從 portainer 開始玩,也因此誕生了 logitech media server 搭配 docker 實現雙機分離。後來也用著同樣的 image 將 lms 建在 k8s cluster 內,遇到的比較髒的問題是 nginx 的 port 用非正式的方式解決。 這時候其實已經不在乎 logitech media server 是否帶來更好的音質了,也沒有連動 NAS 的音樂,主要是使用 Youtube Plugin 播放 Youtube 上的內容(即便有訂閱 Youtube Premium)。以及使用 Podcast Plugin 收聽 podcast。 使用 docker 的好處不外乎一個字,省,於是我把 raspberry pi 4b 也給賣了。...

2023-02-24 · 2 min · 231 words