使用Bitwarden和Podman管理你的密碼
在過去的一年中,你可能會(huì)遇到一些試圖向你推銷密碼管理器的廣告。比如 LastPass、1Password 或 Dashlane。密碼管理器消除了記住所有網(wǎng)站密碼的負(fù)擔(dān)。你不再需要使用重復(fù)或容易記住的密碼。相反,你只需要記住一個(gè)可以解鎖所有其他密碼的密碼。
通過使用一個(gè)強(qiáng)密碼而不是許多弱密碼,這可以使你更安全。如果你有基于云的密碼管理器(例如 LastPass、1Password 或 Dashlane),你還可以跨設(shè)備同步密碼。不幸的是,這些產(chǎn)品都不是開源的。幸運(yùn)的是,還有其他開源替代品。
開源密碼管理器
替代方案包括 Bitwarden、LessPass 或 KeePass。Bitwarden 是一款開源密碼管理器,它會(huì)將所有密碼加密存儲(chǔ)在服務(wù)器上,它的工作方式與 LastPass、1Password 或 Dashlane 相同。LessPass 有點(diǎn)不同,因?yàn)樗鼘W⒂诔蔀闊o狀態(tài)密碼管理器。這意味著它根據(jù)主密碼、網(wǎng)站和用戶名生成密碼,而不是保存加密的密碼。另一方面,KeePass 是一個(gè)基于文件的密碼管理器,它的插件和應(yīng)用具有很大的靈活性。
這三個(gè)應(yīng)用中的每一個(gè)都有其自身的缺點(diǎn)。Bitwarden 將所有東西保存在一個(gè)地方,并通過其 API 和網(wǎng)站接口暴露給網(wǎng)絡(luò)。LessPass 無法保存自定義密碼,因?yàn)樗菬o狀態(tài)的,因此你需要使用它生成的密碼。KeePass 是一個(gè)基于文件的密碼管理器,因此無法在設(shè)備之間輕松同步。你可以使用云存儲(chǔ)和 WebDAV 來解決此問題,但是有許多客戶端不支持它,如果設(shè)備無法正確同步,你可能會(huì)遇到文件沖突。
本文重點(diǎn)介紹 Bitwarden。
運(yùn)行非官方的 Bitwarden 實(shí)現(xiàn)
有一個(gè)名為 bitwarden_rs 的服務(wù)器及其 API 的社區(qū)實(shí)現(xiàn)。這個(gè)實(shí)現(xiàn)是完全開源的,因?yàn)樗梢允褂?SQLite 或 MariaDB/MySQL,而不是官方服務(wù)器使用的專有 Microsoft SQL Server。
有一點(diǎn)重要的是要認(rèn)識(shí)到官方和非官方版本之間存在一些差異。例如,官方服務(wù)器已經(jīng)由第三方審核,而非官方服務(wù)器還沒有。在實(shí)現(xiàn)方面,非官方版本缺少電子郵件確認(rèn)和采用 Duo 或郵件碼的雙因素身份驗(yàn)證。
讓我們?cè)?SELinux 中運(yùn)行服務(wù)器。根據(jù) bitwarden_rs 的文檔,你可以如下構(gòu)建一個(gè) Podman 命令:
$ podman run -d \--userns=keep-id \--name bitwarden \-e SIGNUPS_ALLOWED=false \-e ROCKET_PORT=8080 \-v /home/egustavs/Bitwarden/bw-data/:/data/:Z \-p 8080:8080 \bitwardenrs/server:latest
這將下載 bitwarden_rs 鏡像并在用戶命名空間下的用戶容器中運(yùn)行它。它使用 1024 以上的端口,以便非 root 用戶可以綁定它。它還使用 :Z 更改卷的 SELinux 上下文,以防止在 /data 中的讀寫權(quán)限問題。
如果你在某個(gè)域下托管它,建議將此服務(wù)器放在 Apache 或 Nginx 的反向代理下。這樣,你可以使用 80 和 443 端口指向容器的 8080 端口,而無需以 root 身份運(yùn)行容器。
在 systemd 下運(yùn)行
Bitwarden 現(xiàn)在運(yùn)行了,你可能希望保持這種狀態(tài)。接下來,創(chuàng)建一個(gè)使容器保持運(yùn)行的單元文件,如果它沒有響應(yīng)則自動(dòng)重新啟動(dòng),并在系統(tǒng)重啟后開始運(yùn)行。創(chuàng)建文件 /etc/systemd/system/bitwarden.service:
[Unit]Description=Bitwarden Podman containerWants=syslog.service[Service]User=egustavsGroup=egustavsTimeoutStartSec=0ExecStart=/usr/bin/podman run 'bitwarden'ExecStop=-/usr/bin/podman stop -t 10 'bitwarden'Restart=alwaysRestartSec=30sKillMode=none[Install]WantedBy=multi-user.target
現(xiàn)在使用 sudo 啟用并啟動(dòng)該服務(wù):
$ sudo systemctl enable bitwarden.service && sudo systemctl start bitwarden.service$ systemctl status bitwarden.servicebitwarden.service - Bitwarden Podman containerLoaded: loaded (/etc/systemd/system/bitwarden.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2019-07-09 20:23:16 UTC; 1 day 14h agoMain PID: 14861 (podman)Tasks: 44 (limit: 4696)Memory: 463.4M
成功了!Bitwarden 現(xiàn)在運(yùn)行了并將繼續(xù)運(yùn)行。
添加 LetsEncrypt
如果你有域名,強(qiáng)烈建議你使用類似 LetsEncrypt 的加密證書運(yùn)行你的 Bitwarden 實(shí)例。Certbot 是一個(gè)為我們創(chuàng)建 LetsEncrypt 證書的機(jī)器人,這里有個(gè)在 Fedora 中操作的指南。
生成證書后,你可以按照 bitwarden_rs 指南中關(guān)于 HTTPS 的部分來。只要記得將 :Z 附加到 LetsEncrypt 來處理權(quán)限,而不用更改端口。


























