Vaultwarden: โฮสต์คลังรหัสผ่านเองให้ปลอดภัยกว่าแค่รัน Container
ติดตั้ง Vaultwarden แบบ self-host โดยผูกข้อมูลถาวร เปิด HTTPS ปิดการสมัครสาธารณะ และทดสอบ backup กับ restore
Vaultwarden เป็นเซิร์ฟเวอร์โอเพนซอร์สที่เข้ากันได้กับไคลเอนต์ Bitwarden เหมาะกับทีมเล็กที่ยอมรับภาระดูแลบริการรหัสผ่านเองได้ ความเสี่ยงหลักไม่ได้อยู่ที่คำสั่ง docker run แต่อยู่ที่การเปิดบริการโดยไม่มี HTTPS, ลืมข้อมูลถาวร และไม่มีแผนกู้คืน บทความนี้จึงตั้งเป้าติดตั้งให้เข้าผ่านโดเมนจริง พร้อมทดสอบข้อมูลกลับมาได้หลังสร้าง container ใหม่
แยกข้อมูลออกจาก Container
README โครงการแนะนำ container image ทางการและ mount /data เป็น volume ถาวร ตัวอย่าง Compose สำหรับเครื่องเดียว:
services:
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
environment:
DOMAIN: https://vault.example.org
SIGNUPS_ALLOWED: "false"
volumes:
- ./vw-data:/data
ports:
- 127.0.0.1:8000:80
ตัวอย่างผูกพอร์ตกับ loopback เพื่อให้ reverse proxy บนเครื่องเดียวกันรับจากภายนอก หาก proxy อยู่คนละเครื่องหรือ network ต้องปรับให้ติดต่อถึงกันโดยไม่เปิดพอร์ต Vaultwarden สาธารณะตรง ๆ ตั้ง DOMAIN ให้ตรง URL ที่ผู้ใช้เห็น และกำหนด tag image เป็นรุ่นที่ทดสอบแล้วก่อนใช้ production แทนการดึง latest ทุกครั้ง
HTTPS และบัญชีเริ่มต้น
Web vault ต้องการ HTTPS หรือ secure context สำหรับ Web Crypto API ตาม README โครงการ จึงควรให้ reverse proxy จัดการ TLS และส่ง header ที่จำเป็น ตรวจ redirect จาก HTTP ไป HTTPS แล้วทดลอง login ผ่าน browser กับแอปมือถือ หลังสร้างบัญชีผู้ดูแลแรก ให้ปิด public registration; ตัวอย่างใช้ SIGNUPS_ALLOWED=false เพื่อป้องกันคนภายนอกสร้างบัญชีเอง เปิดการยืนยันสองขั้นตอนให้บัญชีสำคัญและจัดเก็บ recovery codes นอก vault
พิสูจน์ Backup ก่อนเก็บรหัสผ่านจริง
สำรองทั้ง directory /data โดยคำนึงถึงฐานข้อมูลที่กำลังเขียนอยู่ ใช้วิธี snapshot หรือขั้นตอน backup ของชนิดฐานข้อมูลที่เลือก จากนั้นสร้าง environment ทดสอบใหม่และ restore backup เพื่อเช็กว่าผู้ใช้และรายการรหัสผ่านกลับมาครบ วัดเวลาที่ใช้กู้คืนและบันทึก credential/TLS ที่ต้องเตรียมแยกจากข้อมูล vault ห้ามถือว่าการ copy ไฟล์สำเร็จคือกู้คืนได้แล้ว
ติดตามอัปเดตความปลอดภัยของ Vaultwarden และระบบ host สม่ำเสมอ จำกัดสิทธิ์ของ volume, อย่า mount Docker socket เข้า container และตรวจ log เข้าถึงจากภายนอก หากทีมไม่มีคนรับผิดชอบการสำรองข้อมูลและการอัปเดต การ self-host คลังรหัสผ่านอาจเพิ่มความเสี่ยงมากกว่าที่แก้ได้
อ่านเพิ่มเติม: README และตัวอย่างติดตั้งทางการ, Wiki โครงการ, Hardening Guide