8 คะแนน โดย GN⁺ 2025-09-15 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Pass คือ เครื่องมือจัดการรหัสผ่านแบบเรียบง่าย ที่ยึดตาม ปรัชญาแบบยูนิกซ์ โดยจะเข้ารหัสรหัสผ่านแต่ละรายการด้วย GPG แล้วจัดเก็บเป็นไฟล์
  • สามารถจัดการรหัสผ่านอย่างเป็นระบบด้วย โครงสร้างโฟลเดอร์ และจัดการการเพิ่ม แก้ไข สร้าง ดู และลบได้อย่างง่ายดายผ่าน เครื่องมือบรรทัดคำสั่ง
  • รองรับ การทำงานร่วมกับ Git เพื่อให้ติดตามประวัติการเปลี่ยนแปลงรหัสผ่านและซิงก์ข้อมูลได้ จึงเหมาะกับการใช้งานบน คอมพิวเตอร์หลายเครื่องและในสภาพแวดล้อมแบบทีม
  • มี อิสระในการใช้งาน สูง ผู้ใช้สามารถกำหนด โครงสร้างไฟล์และรูปแบบข้อมูลที่จัดเก็บ ให้เหมาะกับสถานการณ์ของตนได้อย่างอิสระ
  • ด้วย ความสามารถในการขยาย และ ความเข้ากันได้สูง จึงมีการพัฒนาและเผยแพร่ ส่วนขยาย และ ไคลเอนต์/GUI สำหรับแต่ละแพลตฟอร์ม อย่างต่อเนื่อง

แนะนำ Pass

  • การจัดการรหัสผ่านควรเรียบง่าย และควรยึดตาม ปรัชญา Unix
  • Pass จัดเก็บรหัสผ่านแต่ละรายการในรูปแบบไฟล์ที่เข้ารหัสด้วย GPG โดยใช้ชื่อไฟล์เป็นชื่อเว็บไซต์หรือทรัพยากรที่ต้องใช้รหัสผ่านนั้น
  • ไฟล์ที่เข้ารหัสเหล่านี้สามารถจัดเรียงตาม โครงสร้างโฟลเดอร์ ที่ต้องการได้ และยังสามารถคัดลอก ย้าย หรือลบระหว่างคอมพิวเตอร์ได้อย่างสะดวกด้วยคำสั่งจัดการไฟล์ทั่วไป
  • Pass มีคำสั่งที่ออกแบบมาสำหรับ การเพิ่ม แก้ไข สร้าง และดู ไฟล์รหัสผ่านแต่ละรายการโดยเฉพาะ และโดยปกติรหัสผ่านจะถูกเก็บไว้ใต้ ~/.password-store
  • ถูกพัฒนาด้วย เชลล์สคริปต์แบบเรียบง่าย เท่านั้น
  • ใช้ Git สำหรับการคัดลอกรหัสผ่านไปยังคลิปบอร์ดและการบันทึกประวัติการเปลี่ยนแปลงรหัสผ่าน
  • สามารถแก้ไขได้ด้วยคำสั่งเชลล์พื้นฐาน และรองรับการเติมคำสั่งอัตโนมัติในเชลล์ต่าง ๆ เช่น Zsh, Fish และ Bash
  • มีการพัฒนา ส่วนขยาย และ ไคลเอนต์/GUI สำหรับแพลตฟอร์มอื่น อย่างต่อเนื่องโดยชุมชนที่ขับเคลื่อนโครงการ

วิธีใช้ password store

  • สามารถดูรายการรหัสผ่านทั้งหมดที่จัดเก็บไว้ได้
  • รองรับการดูรหัสผ่านเฉพาะรายการและคัดลอกไปยังคลิปบอร์ดได้ (พร้อมล้างอัตโนมัติ)
  • ใช้ gpg-agent เพื่อช่วยให้การป้อนรหัสผ่านและการยืนยันตัวตนสะดวกยิ่งขึ้น
  • สามารถเพิ่มรหัสผ่านใหม่ บันทึกข้อมูลหลายบรรทัดในไฟล์เดิมได้ (-m option) และแก้ไขไฟล์โดยตรงผ่าน text editor เริ่มต้นได้
  • มีฟังก์ชัน สร้างรหัสผ่านแบบสุ่ม โดยใช้ /dev/urandom (เลือกได้ว่าจะรวม/ไม่รวมสัญลักษณ์ตาม option และรองรับการคัดลอกไปคลิปบอร์ดได้ทันที)
  • เมื่อลบรหัสผ่าน ไฟล์ที่เข้ารหัสจะถูกลบออกจากระบบไฟล์ด้วย
  • หลังจาก เริ่มต้นเป็น Git repository แล้ว ทุกการเปลี่ยนแปลงรหัสผ่านจะถูก commit และสามารถซิงก์ผ่าน pass git push/pull ได้
  • สำหรับฟังก์ชันเพิ่มเติมและวิธีใช้งานโดยละเอียด ให้ดู man page

วิธีตั้งค่าพื้นฐาน

  • ตอนเริ่มต้น password store สามารถเริ่มใช้งานได้ง่ายเพียงระบุ GPG key (หากกำหนดหลาย GPG key จะเหมาะกับการใช้งานแบบทีม)
  • สามารถกำหนด GPG key แยกตามโฟลเดอร์ได้ (-p option)
  • สามารถ เริ่มต้นเป็น Git repository ได้ด้วย (และกำหนด remote แยกต่างหากได้)
  • ทุกการเพิ่ม ลบ และแก้ไขรหัสผ่านจะถูกจัดการเป็น Git commit
  • ดูตัวอย่างการเริ่มต้นเพิ่มเติมได้ใน man page

วิธีติดตั้ง

  • Debian/Ubuntu: apt-get install pass
  • Fedora/RHEL: yum install pass
  • รองรับหลายแพลตฟอร์ม เช่น openSUSE/Gentoo/Arch/Macintosh/FreeBSD
  • สามารถดาวน์โหลดแบบ tarball หรือ clone จาก Git repository ได้โดยตรง (ทุกรีลีสมาพร้อม signed tag)

การจัดระเบียบข้อมูลและความยืดหยุ่น

  • Pass เปิดให้ผู้ใช้จัดระเบียบข้อมูลได้อย่างอิสระตามต้องการ (ไม่มีการบังคับ schema หรือ format)
  • เลือกได้หลากหลายรูปแบบ เช่น การจัดเก็บหลายบรรทัด การแยกข้อมูลด้วยชื่อไฟล์ หรือการจัดตามโครงสร้างโฟลเดอร์
  • ตัวอย่างเช่น ในกรณีของ Amazon/bookreader อาจเก็บรหัสผ่านไว้บรรทัดแรก แล้วตามด้วย URL ชื่อผู้ใช้ คำถามลับ และข้อมูลเพิ่มเติมอื่น ๆ
  • หากต้องการ ก็สามารถแยกข้อมูลแต่ละส่วนเป็นไฟล์ต่างหากได้ (เช่น password, secretquestion1 เป็นต้น)
  • เนื่องจากตัวเลือกคัดลอกคลิปบอร์ดจะคัดลอกเฉพาะบรรทัดแรก จึงสามารถใช้งานจริงควบคู่กับการเก็บข้อมูลเสริมได้อย่างมีประสิทธิภาพ

ส่วนขยาย

  • รองรับ ส่วนขยาย (extensions) เพื่อตอบโจทย์ความต้องการของผู้ใช้ที่หลากหลาย
  • สามารถติดตั้งไว้ในโฟลเดอร์ของระบบหรือโฟลเดอร์ผู้ใช้ และกำหนดการเปิดใช้งานผ่าน environment variable
  • ชุมชนยังคงพัฒนาและเผยแพร่ส่วนขยายหลากหลายรูปแบบอย่างต่อเนื่อง

ไคลเอนต์ที่เข้ากันได้

  • มีการพัฒนาและเผยแพร่ ไคลเอนต์/GUI สำหรับหลายแพลตฟอร์ม โดยชุมชน
  • ผู้ใช้สามารถเลือกไคลเอนต์ให้เหมาะกับระบบปฏิบัติการหรือสภาพแวดล้อมการใช้งานของตนได้

การย้ายข้อมูลจากตัวจัดการรหัสผ่านอื่น

  • รองรับสคริปต์แปลงข้อมูลและวิธีการหลากหลายสำหรับการย้ายข้อมูลจากตัวจัดการรหัสผ่านอื่น
  • ผู้ใช้สามารถเลือก รูปแบบการจัดระเบียบข้อมูลที่เหมาะสมที่สุด สำหรับตนเองได้

ผู้สร้างและไลเซนส์

  • พัฒนาโดย Jason A. Donenfeld (zx2c4.com)
  • ใช้งานและแก้ไขได้อย่างอิสระภายใต้ ไลเซนส์ GPLv2+

2 ความคิดเห็น

 
ndrgrd 2025-09-15

จริง ๆ แล้วก็มีเครื่องมือที่ทำได้แค่เก็บข้อมูลอยู่มากมาย แต่สิ่งสำคัญคือการทำงานร่วมกันอย่างการกรอกอัตโนมัติ

 
GN⁺ 2025-09-15
ความคิดเห็นจาก Hacker News
  • ที่นี่มีความเห็นเชิงบวกเกี่ยวกับ pass อยู่มาก แต่ก็มีข้อเสียหลัก ๆ อยู่ชัดเจนเหมือนกัน

    • ด้วยความที่เป็นข้อมูลแบบไม่มีโครงสร้าง จึงใช้งานทั่วไปได้ไม่ค่อยสะดวก

    • ตัวอย่างเช่น เวลาจะใช้ username และ password ในสคริปต์ ก็ต้องเขียนโค้ด parse เองทุกครั้ง จึงไม่สะดวก

    • ถ้าสร้างรหัสผ่านใหม่ด้วย pass generate ค่าที่มีอยู่เดิมทั้งหมดจะถูกเขียนทับ

    • หมายความว่า ถ้ามีทั้ง password และคำตอบของ secret question อยู่ด้วยกัน แล้วสร้างใหม่เฉพาะรหัสผ่าน คำตอบก็จะหายไป

    • การตรวจสอบประวัติทำได้ยากมาก

    • เนื่องจากทุกอย่างถูกเข้ารหัส จึงไม่ได้ข้อมูลที่มีประโยชน์จาก git diff และการดูประวัติหรือกู้คืนความผิดพลาดด้วยเครื่องมือ command line ก็ไม่สะดวก

    • ชื่อทั่วไปเกินไปจนค้นหายาก

    • ช่วงนี้กำลังพัฒนาเครื่องมือคล้ายกันชื่อ passworth อยู่ด้วย (พิจารณาการใช้ container/sandbox ด้วย) https://github.com/andrewbaxter/passworth

    • สำหรับประเด็นที่ว่าตรวจสอบประวัติได้ยาก จริง ๆ แล้ว pass รองรับการตั้งค่าไฟล์ .gitattributes เพื่อให้ git แปลงไฟล์ gpg เป็นข้อความก่อนดู diff ได้

      • ตัวอย่างคือเพิ่ม *.gpg diff=gpg ใน ~/.password-store/.gitattributes
      • และกำหนด [diff "gpg"] ใน .git/config ให้ textconv = gpg2 -d ...
      • แบบนี้ก็สามารถ diff เนื้อหาที่เข้ารหัสได้อย่างง่าย ๆ
    • แชร์ปัญหาเพิ่มเติมที่เจอระหว่างใช้ pass

      • ขั้นตอนการใช้งานสำคัญหลายอย่างไม่มีเอกสารอธิบายไว้ (เช่น เวลาจะย้ายคลัง pass ไปคอมพิวเตอร์อีกเครื่อง ไม่ชัดเจนว่าต้องคัดลอกอะไรบ้าง)
      • ถ้าเป็นสภาพแวดล้อมที่ไม่มีแพ็กเกจ เช่น จะติดตั้งบน NAS แบบ headless จะยากมาก เพราะมีปัญหาอย่าง gpg cross-compile เป็นต้น
      • pass เป็นเพียงอินเทอร์เฟซบาง ๆ ที่ครอบบน gpg จึงรับข้อเสียทั้งหมดของ gpg มาด้วยตรง ๆ (โดยเฉพาะปัญหาเกี่ยวกับ gpg-agent เป็นต้น)
      • หลายองค์กรช่วงนี้พยายามย้ายจาก GnuPG ไปใช้เครื่องมือเข้ารหัสที่เรียบง่ายกว่าอย่าง age https://github.com/FiloSottile/age
      • การใช้ pass ร่วมกับ Android ไม่ค่อยดีนัก แพ็กเกจทางการไม่ได้ดูแลแล้ว, fork ก็ไม่มีบน F-Droid, และ UI ก็ใช้งานไม่สะดวก
      • โดยรวมยังใช้ pass ต่อไปอยู่ แต่ก็ยังไม่มีโซลูชันอเนกประสงค์ที่ดีกว่านัก
      • มีวิธีเปลี่ยน gpg เป็น age ด้วย FiloSottile/passage แต่ก็ยังไม่มี Android รองรับ
      • gopass ดูดีกว่าอยู่เหมือนกัน (ทำงานได้บนทุก Unix, เข้ากันได้กับ pass, มี age plugin, https://www.gopass.pw) แต่ก็ยังไม่มีแพ็กเกจสำหรับ Android เช่นกัน
    • ปัญหาเรื่องโครงสร้างข้อมูลแก้ด้วยโครงสร้างโฟลเดอร์

      • แยกเก็บไฟล์ username, password, email สำหรับแต่ละเว็บไซต์
      • บางครั้งก็เพิ่มไฟล์ notes (โน้ตแบบไม่มีโครงสร้าง) หรือในกรณีพิเศษก็ใช้ไฟล์ json (สำหรับให้อ่านโดยเครื่อง)
      • เสียดายที่ meta data ไม่ได้ถูกเข้ารหัส แต่โดยรวมก็เป็นวิธีที่น่าพอใจ
    • ส่วนตัวกลับรู้สึกว่าความไม่มีโครงสร้างของข้อมูลเป็นข้อดีอย่างมาก

      • ในทางปฏิบัติ ถ้าเขียนในรูปแบบอย่าง Username: xxx เบราว์เซอร์ปลั๊กอินอย่าง browserpass ก็จะรู้จักและกรอกให้อัตโนมัติ
    • แชร์ความเห็นแยกตามฟีเจอร์เกี่ยวกับประเด็นโครงสร้างข้อมูลและประวัติ

      • มองว่าการที่แต่ละคนใช้ convention ของตัวเองได้เป็นข้อดี
      • แม้ pass generate จะเขียนทับทุกค่า ก็สามารถแยกจัดการเป็นไฟล์อย่าง site/pass, site/secret-question ได้
      • วิธีใช้ directory tree เองก็ค่อนข้างดี
      • การติดตามรหัสผ่านที่สร้างด้วย git diff อาจยาก แต่สิ่งสำคัญจริง ๆ คือเวลาที่เปลี่ยนล่าสุด (ดูได้จาก git log) และถ้าจำเป็นก็ restore ได้ด้วย git checkout -d
      • ถ้าพิมพ์ $ pass ในเทอร์มินัล มันจะขึ้นแพ็กเกจที่เกี่ยวข้องให้ จึงไม่ได้มีปัญหาเรื่องค้นหาร้ายแรงขนาดนั้น
  • ตัวจัดการรหัสผ่านในเบราว์เซอร์ + passkey สะดวกกว่ามาก แต่คลังของ pass ก็ยังพอใช้เก็บ recovery code และ API key ได้

    • จุดที่คลุมเครือที่สุดของการใช้ pass คือ threat model ไม่ชัดเจน

    • ถ้าปล่อยให้ GPG agent cache ไว้ สคริปต์อะไรก็ได้ (เช่น npm postinstall) ก็สามารถไล่ดู credential ทั้งหมดด้วย pass ls ได้

    • แบบนั้นก็แทบไม่ต่างจากเก็บทุกอย่างไว้ในไฟล์เดียวอย่าง ~/passwords.txt

    • แต่ถ้าไม่ใช้ cache ก็ต้องทนกรอกรหัสผ่าน GPG ยาว ๆ ทุกครั้ง

    • เคยลองใช้ YubiKey เพื่อปลดล็อกแบบ on-demand แล้ว แต่การเชื่อมต่อทำได้ไม่ค่อยดี และถ้าต้องกรอกรหัสผ่านบ่อย ๆ ก็ไม่สะดวกมาก

    • สุดท้ายเลยย้ายไป Bitwarden

    • สำหรับฉัน แค่เสียบ yubi ทิ้งไว้ตลอด

      • อย่างน้อยก็ยังต้องมีการแตะอุปกรณ์ทางกายภาพ ดังนั้นถ้าพื้นที่ของฉันปลอดภัย มันก็แทบเป็น 2FA ในทางปฏิบัติ
      • ต่างจาก fido2 ตรงที่ OpenPGP แค่กรอก PIN ครั้งเดียวก็ปลดล็อกต่อเนื่องตราบใดที่ยังเสียบอยู่
      • แต่ยังต้องแตะทุกครั้งเพื่อปลดรหัสผ่านแต่ละรายการ ซึ่งสำหรับตัวเองถือว่าสมบูรณ์แบบและสะดวก
      • บนมือถือก็ใช้ openkeychain ร่วมกับ password store ได้ดี
      • แม้ทุกคนจะไม่ได้ดูแลต่อแล้ว แต่คิดว่าเชื่อถือแค่ฮาร์ดแวร์เข้ารหัสของ yubi ก็เพียงพอ
    • ตัวจัดการรหัสผ่านทุกตัวโดยพื้นฐานแล้ว ถ้าปลดล็อกคลังอยู่ master password ก็อาจค้างอยู่ใน RAM หรือ cache ทำให้รหัสผ่านทั้งหมดถูกเปิดเผยได้

      • ถ้าไม่ได้ใช้งานก็ควรล็อกไว้เพื่อความปลอดภัย
      • กรณีที่ผสานกับเบราว์เซอร์อย่าง Bitwarden ก็มี attack vector กว้างขึ้นด้วย (remote server, extension ฯลฯ)
      • ช่วงหลังมีช่องโหว่ในตัวจัดการรหัสผ่านบนเบราว์เซอร์แทบทุกตัว ที่เปิดโอกาสให้ผู้โจมตีระยะไกลส่งรหัสผ่านออกจากเบราว์เซอร์ของเหยื่อได้
      • แม้จะใช้ Bitwarden อยู่ แต่ credential ที่สำคัญจริง ๆ ก็แยกจัดการต่างหาก
    • ถ้ามีพอร์ต USB ว่าง ก็เสียบ Nano key ทิ้งไว้ได้เลย

      • ต่อให้มัลแวร์ขโมย PIN ของ yubi ได้ ถ้าจะขโมยรหัสผ่านทั้งหมดจริง ๆ ก็ยังต้องหลอกให้ฉันกดอุปกรณ์เป็นพันครั้งอยู่ดี
    • ฉันเก็บรหัสผ่านไว้ใน sqlite DB บนพาร์ทิชันไฟล์ที่เข้ารหัส

      • ทันทีที่สคริปต์อ่านรหัสผ่านเสร็จ ก็ปิดพาร์ทิชันทันที
      • หรือจะเก็บแต่ละรหัสผ่านเป็นไฟล์เข้ารหัสแยกกันก็ได้
      • ถ้าจำเป็น ก็ถอดรหัสไฟล์รหัสผ่านแล้วล้าง gpg agent ต่อทันที
    • บน yubikey สามารถตั้งให้ต้องมี PIN หรือการแตะเพื่ออนุมัติการใช้ GPG key ได้

      • ปัญหาใหญ่ที่สุดของ pass คือการเข้ากันได้กับ yubikey บน iOS ไม่ค่อยดี
  • ฉันชอบสิ่งนี้มากและใช้ทุกวัน

    • โดยเฉพาะการจับคู่ OpenPGP key กับ yubi ที่น่าประทับใจ
    • เพราะต้องปลดล็อกแยกทีละรหัสผ่าน ต่อให้ผู้โจมตียึดเครื่องฉันได้ทั้งหมด ก็จะเห็นได้เฉพาะรายการที่ฉันแตะยืนยันทางกายภาพเท่านั้น
    • ต่างจาก keepass หรือ bitwarden ที่พอปลดล็อกครั้งเดียวทุกอย่างก็เปิดหมด จึงมีความเสี่ยงที่ฐานข้อมูลทั้งก้อนจะรั่วน้อยกว่า
  • สำหรับคนที่ชอบ CLI นั้น pass น่าสนใจ แต่สำหรับผู้ใช้ทั่วไป (ในความหมายของ ‘normie’) ดูเหมือนว่า KeepassXC บน Desktop, KeepassDX บน Android และการเข้าถึงระยะไกลผ่าน Wireguard จะเหมาะกว่า

    • หนึ่งในฟีเจอร์มีประโยชน์ของ keepass ที่ไม่ค่อยมีใครพูดถึง คือสามารถเปิดหลาย vault พร้อมกันและค้นหาข้ามกันได้

      • ตัวจัดการรหัสผ่านส่วนใหญ่ออกแบบโดยตั้งสมมติฐานว่ามี vault เดียว จึงกลายเป็นว่ารหัสผ่านทั้งหมดต้องการระดับความแข็งแรงด้านความปลอดภัยเท่ากัน
      • สำหรับฉัน ประมาณ 70% เป็นเว็บไซต์ไม่สำคัญ และการต้องกรอก master password ยาว ๆ ทุกครั้งเวลา login ก็น่ารำคาญ
      • keepass ทำให้เก็บข้อมูล 70% ที่ไม่สำคัญนี้ไว้ใน vault แยก และใช้รหัสผ่านสั้นกว่าก็ได้ จึงไม่ต้องกังวลมากนัก
    • คิดว่าเกณฑ์คำว่า ‘normie’ เป็นเรื่องสัมพัทธ์

      • สำหรับฉัน ก็แค่ใช้ 1Password แล้วเชื่อผลลัพธ์ของมัน
    • อย่าลืม keepassxc.cli ด้วย

      • มันมีประโยชน์มากในการใส่หรือดึงค่าลับแบบ programmatic
      • เมื่อก่อนตอนทำ encrypted secrets bundle เคยลอง GNU pass ก่อน แต่สุดท้ายเลิกใช้เพราะการจัดการ gnupg ซับซ้อน และมีเรื่องเก็บค่าไว้ใน home directory เป็นต้น
      • pass มีข้อดีเรื่องความแพร่หลาย แต่ไม่เข้ากับ workflow แบบ copy-one-file จึงกลับไปใช้ keepassxc
    • ตัวอย่างการใช้งานอย่างหนึ่งของฉันที่ keepass แก้ไม่ได้ คือการสร้างรหัสผ่านบนคอมพิวเตอร์แยกขาดจากกันสองเครื่อง แล้วค่อยนำมารวมภายหลัง

    • อยากใช้ KeepassXC เหมือนกัน แต่การแชร์ credential กับคู่สมรสไม่ง่าย

      • ต่อให้ใช้ vault แยกเฉพาะ เวลาจะแชร์ข้อมูลที่มีอยู่เดิมก็ยังต้องคัดลอกและวางด้วยมืออยู่ดี
      • ตอนนี้เลยลงตัวกับ Vaultwarden และใช้งานได้เสถียรเกินคาด
  • pass เป็นโซลูชันที่สนุกเวลาจะใช้คนเดียว แต่ถ้าจะแชร์กับหลายคนต้องระวัง

    • ถ้าใช้เป็นตัวจัดการรหัสผ่านของบริษัท จะไม่มีทางรู้ว่าใครดูความลับไหนไปเมื่อไร ดังนั้นทุกครั้งที่มีการเปลี่ยนพนักงานก็ต้องเปลี่ยนรหัสผ่านทั้งหมด

    • ถ้ามีคนต้องการสิทธิ์เข้าถึงใหม่ ก็ไม่มีวิธีมาตรฐานในการเข้ารหัสไฟล์ใหม่แบบเลือกเฉพาะ ต้องทำเอง

    • แม้จะเก็บด้วย git แต่ commit message ถูกสร้างอัตโนมัติ จึงแทบได้ประโยชน์เพิ่มจาก Dropbox ไม่มากนัก

    • ถ้าพลาด push เนื้อหาผิดแล้วอยากย้อนกลับ ก็ต้อง rewrite git history และอาจทำให้เครื่องของผู้ใช้อื่นพังได้

    • ความเรียบง่ายและการแก้ไขตรง ๆ เป็นข้อดี แต่ความเรียบง่ายนี้เองก็เป็นกับดัก

    • มันสวยงามในแนวคิดแบบ hash(site_name+main_password) แต่ในความเป็นจริงจะมีปัญหาหลากหลายตามมา

    • ในสภาพแวดล้อมธุรกิจก็ยังต้องมีฟีเจอร์อย่าง end-to-end encryption, การตรวจสอบ fingerprint ระหว่างผู้ใช้ ฯลฯ ซึ่ง Bitwarden ดูจะเหมาะที่สุดเท่าที่เห็น แต่ถ้ามีตัวอย่างที่ดีกว่าก็อยากได้คำแนะนำ

    • ใน pass ก็สามารถใช้คีย์คนละชุด (หรือหลายคีย์) แยกตามไดเรกทอรี เพื่อแบ่งสิทธิ์เข้าถึงตามกลุ่มหรือตามบุคคลได้

      • ตัวอย่าง: โฟลเดอร์ admins ใช้ admin key ส่วนโฟลเดอร์ techs ให้ทั้ง admin และ tech key เข้าถึงได้
      • สามารถกำหนด private key รายบุคคลของพนักงานเพื่อจัดการว่าใครเข้าถึงเว็บไซต์เฉพาะใดได้บ้าง
      • ใช้ git submodule เพื่อควบคุมขอบเขตการเข้าถึงรายพนักงานได้
      • และยังติดตามผ่าน git history ได้ด้วยว่าเปิดเผยรหัสผ่านใดให้ใคร เมื่อไร
    • บริษัทของฉันใช้ 1Password

      • รองรับฟีเจอร์หลากหลาย เช่น shared vault ตามกลุ่ม, service account, คำสั่ง op run ผ่านไฟล์ .env และการเชื่อมต่อกับ CI
    • แม้จะยังไม่ได้ใช้จริง มีแค่ประเมินไว้ แต่ passbolt ก็เป็นตัวเลือกที่ดีสำหรับเครื่องมือแชร์รหัสผ่านสำหรับทีม https://www.passbolt.com

      • ใช้แนวทาง public key โดยรหัสผ่านแบบ plain text จะมองเห็นได้เฉพาะบนเครื่อง local ของผู้ใช้ และรหัสผ่านที่แชร์จะถูกเข้ารหัสใหม่ด้วย public key ของผู้ใช้แต่ละคน
    • ที่บริษัทของเราใช้เครื่องมือชื่อไม่คุ้นหูอย่าง "pa" ได้ดีทีเดียว https://git.j3s.sh/pa

      • มันใช้ age และรองรับการเข้ารหัสด้วยหลายคีย์
    • ดูเหมือนว่าจะสร้างโซลูชันที่ดีบนพื้นฐานของ FOKS ได้เช่นกัน https://foks.pub

  • เมื่อไม่นานมานี้เปลี่ยนจาก pass ไปเป็น Bitwarden และ Vaultwarden

    • ในสภาพแวดล้อมที่ติดตั้งแอป GUI ผ่าน flatpak การเชื่อมต่อระหว่าง Firefox extension กับ pass ใช้งานไม่ได้ จึงไม่สะดวก

    • มี workaround คือใช้ pass -c <path> ในหน้าต่าง run เพื่อคัดลอกรหัสผ่านแล้วนำไปวางในเบราว์เซอร์ แต่ไม่ใช่ประสบการณ์ที่ดีนัก

    • อีกเหตุผลคือแอป Android ทางการถูก archive ไปแล้ว แม้จะมี fork แต่ก็ไม่รู้ว่าจะได้รับการดูแลต่อแค่ไหน https://github.com/android-password-store/Android-Password-Store/discussions/3260

    • ตอนนี้จึงโฮสต์ vaultwarden เองและใช้งานผ่านไคลเอนต์ bitwarden หลายตัว

    • แชร์ประสบการณ์ย้ายจาก pass ไป KeePassXC

      • คล้ายกันคือเคยเก็บ secrets หลายร้อยรายการไว้ใน pass
      • เปลี่ยนเพราะการซิงก์ข้ามหลายอุปกรณ์ง่ายกว่า และการเก็บเฉพาะรหัสผ่านสำคัญไว้บนโทรศัพท์/โน้ตบุ๊กก็เริ่มมีข้อจำกัด
      • KeePassXC ซิงก์ง่ายเพราะเป็นไฟล์เดียว และยังมีแอป Android ดี ๆ รองรับถึง 2 ตัว
      • การย้ายข้อมูลด้วยมือต้องใช้เวลาราว 3 ชั่วโมง แต่ก็ถือเป็นโอกาสในการจัดระเบียบข้อมูลใหม่
      • การจัดการรหัสผ่านเป็นแอปประเภทบันทึกที่ใช้นาน ๆ ครั้ง แค่ย้ายไฟล์เดียวผ่านเครือข่ายก็พอให้สามเครื่องซิงก์กันได้
    • ยังมีเครื่องมือชื่อ passmenu ด้วย

      • เรียกด้วยคีย์ลัดแล้วเลือกจากเมนูพร้อม autocomplete เพื่อคัดลอกรหัสผ่านที่ต้องการไปยัง clipboard
      • สะดวกเพราะไม่ต้องพิมพ์ทั้งรหัสและ path ที่ command prompt
    • ไม่รู้มาก่อนว่าแอป Android ของ pass ถูกยุติแล้ว

      • พอเห็น fork แล้วก็โล่งใจที่ยังมีการพัฒนาอย่างคึกคัก
      • สงสัยว่าทำไมโครงการทางการกับ fork ถึงไม่ได้ถ่ายโอนกัน (เดาว่าอาจเกี่ยวกับแนวปฏิบัติด้านความปลอดภัย)
      • สำหรับตัวเองกลับชอบใช้ pass -c คัดลอกจากพรอมป์ต์โดยตรงมากกว่าพลักอิน
      • เพราะปลั๊กอินอาจปลดล็อก gpg key ตั้งแต่เปิดเบราว์เซอร์ หรือในกรณีเลวร้ายถ้าผู้ทำปลั๊กอินตั้งใจ ก็อาจแอบส่งรหัสผ่านของฉันออกไปได้ เป็นเรื่องของความเชื่อใจ
    • อยากรู้ประสบการณ์ใช้งานแบบออฟไลน์ของ vaultwarden

      • บางครั้งจำเป็นต้องดูหรืออัปเดตข้อมูลยืนยันตัวตนแบบออฟไลน์ในสภาพแวดล้อมที่เครือข่ายไม่เสถียร
      • ยังไม่ได้ลองเอง จึงยังไม่แน่ใจว่า vaultwarden รองรับเรื่องนี้ดีแค่ไหน
  • มีส่วนขยาย pass-otp ด้วย https://github.com/tadfisher/pass-otp

    • แอป Android สำหรับ pass ก็ถือว่าค่อนข้างดี https://play.google.com/store/apps/details?id=dev.msfjarvis.aps

    • และยังทำงานบน termux ได้ด้วย

    • แอป Android Password Store ถูก archive ไปเมื่อปีที่แล้ว และ agrahn ได้ fork ไปพร้อมปรับปรุงหลายอย่าง

    • ทางเลือกของฉันคือวางสคริปต์เล็ก ๆ ไว้ใน ~/bin แล้วใช้ pass ร่วมกับ oathtool เพื่อสร้าง otp

      • ดึงคีย์ออกจาก pass แล้วสร้างรหัส totp ด้วย oathtool
    • แอป Android เก่า ๆ บางตัวสำหรับ pass ตอนนี้ติดตั้งบนอุปกรณ์ของฉันไม่ได้แล้ว

      • การเชื่อมต่อกับ GPG ก็ยุ่งยาก ทำให้ใช้งานจริงไม่ได้ดีนัก
  • ถ้าใช้ age แทน GPG มีเครื่องมือ passage ที่ช่วยได้ https://github.com/FiloSottile/passage

    • มีตัวจัดการแนว pass หลายตัวที่ใช้ age
  • ช่วงนี้ฉันใช้แนวทางอื่นมานานเกือบ 10 ปีแล้ว

    • meta data รหัสผ่านทั้งหมดเก็บเป็น JSON แบบ plain text โดยแต่ละรายการบันทึก user, เวอร์ชัน, กฎของรหัสผ่าน (ความยาว, ชนิดตัวอักษร ฯลฯ)

    • ไม่ได้เก็บรหัสผ่านจริง แต่ใช้ passphrase + hash ของ meta data เพื่อสร้างรหัสผ่านแบบกำหนดแน่นอน (deterministic)

    • แค่เปลี่ยนเลขเวอร์ชันก็จะได้รหัสผ่านใหม่ทั้งหมด และเพียงเปลี่ยน 'version' ก็ตรวจสอบประวัติได้ง่าย

    • ข้อเสียคือแทบจะแชร์ไม่ได้เลย (อีกฝ่ายต้องรู้ passphrase ที่ฉันใช้ด้วย)

    • ถ้าจำเป็นต้องแชร์ ก็เคยคิดถึงโหมดที่ใช้ตัวสร้างรหัสผ่านมาสร้าง ciphertext แล้วบันทึกเป็น meta data แยกต่างหาก แต่ในทางปฏิบัติก็ยังไม่ค่อยจำเป็น

    • เหตุผลที่แนวทาง password generator ดูดี คือช่วยลดความกังวลเรื่องทำ vault หาย

      • แค่มี hash function สาธารณะก็สร้างรหัสผ่านได้จากที่ไหนก็ได้
      • ปัญหาคือ meta data (รายชื่อเว็บไซต์, กฎต่าง ๆ ฯลฯ) ถูกเปิดเผย และยังคงมีข้อกังวลด้านความปลอดภัย
      • รู้สึกว่าโดยแก่นแล้วไม่ได้ต่างจากแนวทาง vault มากนัก
    • เพิ่งรู้จักแนวทางนี้ไม่นานผ่าน SECUSO password generator https://secuso.aifb.kit.edu/english/105.php

      • ตอนนี้ใช้งานการสร้างรหัสผ่านแบบ deterministic อยู่
      • ชุดแอปโอเพนซอร์สของ SECUSO ก็ค่อนข้างดีเช่นกัน
    • ถ้าแชร์ passphrase พื้นที่เสี่ยงก็จะกว้างขึ้น เพราะถ้ารั่วครั้งเดียว credential หลายรายการก็จะตกอยู่ในความเสี่ยงพร้อมกัน

  • ฉันใช้ pass มามากกว่า 8 ปีแล้ว และเก็บรหัสผ่านไว้ 1300 รายการ

    • ซิงก์ข้ามอุปกรณ์ด้วย git และพอใจมากกับการใช้งาน

    • "มีรหัสผ่าน 1300 รายการได้ยังไงเยอะขนาดนั้น?"

      • จริง ๆ ก็ไม่เคยนับอย่างจริงจัง แต่เจ้าตัวเองก็ดูจะไม่รู้เหมือนกันว่ามีเยอะแค่ไหน