7P by GN⁺ 20시간전 | ★ favorite | 댓글 2개
  • Pass유닉스 철학을 따르는 간단한 패스워드 관리 도구로서, 각 패스워드를 GPG로 암호화하여 파일에 저장함
  • 패스워드는 폴더 구조로 체계적으로 관리 가능하며, 명령행 도구로 추가, 편집, 생성, 조회, 삭제 등을 쉽게 처리함
  • Git 연동을 통해 패스워드 변경 이력 추적 및 동기화가 가능하여, 여러 컴퓨터 및 팀 환경에서도 유용하게 사용 가능함
  • 사용자 자유가 높아, 파일 구조나 저장 데이터 형식을 사용자 상황에 맞게 자유롭게 구성할 수 있음
  • 확장성높은 호환성으로, 다양한 확장 기능플랫폼별 클라이언트/GUI가 활발히 개발 및 배포되고 있음

Pass 소개

  • 패스워드 관리는 단순해야 하며, Unix 철학을 따라야 함
  • Pass는 각 패스워드를 GPG로 암호화한 파일 형태로 보관하며, 파일명은 해당 패스워드가 필요한 웹사이트나 리소스명을 사용함
  • 이 암호화 파일들은 원하는 폴더 구조로 정리할 수 있음. 일반적인 파일 관리 명령어를 통해 컴퓨터 간 복사, 이동, 삭제 등도 간편하게 할 수 있음
  • Pass는 각 패스워드 파일의 추가, 편집, 생성, 조회에 특화된 명령어를 제공하며, 패스워드는 기본적으로 ~/.password-store 하위에 저장됨
  • 간단한 셸 스크립트로만 구현되어 있음
  • 패스워드 복사(클립보드 복사), 패스워드 변경 이력 기록에 Git을 활용함
  • 기본 셸 명령어로도 편집 가능하며, Zsh, Fish, Bash 등 다양한 셸에서 자동 완성 지원
  • 다양한 확장 기능타 플랫폼용 클라이언트/GUI가 활발한 커뮤니티 주도로 개발되고 있음

패스워드 스토어 사용법

  • 저장된 패스워드 전체 목록 조회 가능
  • 특정 패스워드 조회 및 클립보드 복사 기능 지원(자동 클리어)
  • gpg-agent를 통해 편리하게 패스워드 입력 및 인증 처리
  • 새로운 패스워드 추가, 기존 파일 다중라인 저장(-m 옵션), 기본 텍스트 에디터를 통해 파일 직접 편집 가능
  • /dev/urandom을 이용한 랜덤 패스워드 생성 기능 제공(옵션에 따라 심볼 포함/제외, 클립보드 바로 복사 지원)
  • 패스워드 삭제 시, 파일 시스템에서 암호화 파일도 제거됨
  • Git 저장소로 초기화 후, 패스워드 변경마다 커밋 발생 및 pass git push/pull로 동기화 가능
  • 추가 기능 및 상세 사용법은 man page 참조

기본 설정 방법

  • 패스워드 스토어 초기화 시, GPG 키 입력만으로 손쉽게 시작 가능(GPG 키 여러개 지정 시 팀 환경에 적합)
  • 특정 폴더별로 별도 GPG 키 할당 가능(-p 옵션)
  • Git 저장소로도 초기화 가능함(별도로 remote 지정 가능)
  • 모든 패스워드 추가, 삭제, 편집 작업이 Git 커밋으로 관리됨
  • man page에서 더욱 확장된 초기화 예시 확인 가능

설치 방법

  • Debian/Ubuntu: apt-get install pass
  • Fedora/RHEL: yum install pass
  • openSUSE/Gentoo/Arch/Macintosh/FreeBSD 등 다양한 플랫폼 지원
  • Tarball, Git 저장소 직접 clone 가능(모든 릴리즈는 서명된 태그 제공)

데이터 조직 및 유연성

  • Pass는 사용자 정의에 따라 자유롭게 데이터를 조직 가능(스키마 및 형식 강제 없음)
  • 다중라인 저장, 파일명으로 데이터 구분, 폴더 구조 등 다양한 방식 선택 가능
  • 예: Amazon/bookreader의 경우, 첫 줄에 패스워드, 이후 URL, 사용자명, 시크릿 질문 등 추가 정보 저장 가능
  • 필요 시 각 정보를 별도 파일(예: password, secretquestion1 등)로 관리하는 방식도 선택 가능
  • 클립보드 복사 옵션은 첫 줄만 복사하므로 실사용과 부가 정보 저장을 효율적으로 병행 가능

확장 기능

  • 확장 기능(extensions) 은 다양한 사용자 요구사항에 대응하기 위해 지원
  • 시스템 폴더 또는 사용자 폴더에 설치하며, 환경변수로 활성화 여부를 지정
  • 커뮤니티에서 활발하게 다양한 확장 기능이 개발·제공되고 있음

호환 클라이언트

  • 여러 플랫폼용 클라이언트/GUI가 커뮤니티에 의해 개발 및 배포되고 있음
  • 사용자는 자신의 운영체제나 사용환경에 맞는 클라이언트 선택 가능

다른 패스워드 관리자에서의 마이그레이션

  • 타 패스워드 관리자에서 데이터 이관 시 다양한 변환 스크립트와 방법 지원
  • 유저가 자신에게 적합한 방식으로 최적의 데이터 조직을 선택 가능

제작자 및 라이선스

  • Jason A. Donenfeld(zx2c4.com)가 개발
  • GPLv2+ 라이선스로 자유롭게 사용 및 수정 가능

사실 단순히 저장만 하는 도구는 많지만 중요한 것은 자동 채우기 같은 integration이죠

Hacker News 의견
  • 여기에는 pass에 대한 긍정적인 의견이 많지만, 몇 가지 주요 단점들도 분명하게 있음

    • 구조화되지 않은 데이터라는 점 덕분에 일반적으로 다루기 불편함

    • 예를 들어, username과 password를 가지고 스크립트에서 쓸 때마다 직접 파싱하는 코드를 짜야 해서 불편함

    • pass generate로 새 비밀번호를 만들면 기존의 모든 값을 덮어쓰게 됨

    • 즉, password와 secret question 답변이 같이 있을 때 패스워드만 새로 만들면 답변이 사라짐

    • 이력을 확인하는 것이 매우 어려움

    • 모든 내용이 암호화되어 있으니 git diff로도 유용한 내용을 얻을 수 없고, 커맨드라인 도구로 이력이나 실수 복원도 불편함

    • 네이밍이 너무 일반적이어서 검색이 힘듦

    • 최근에는 passworth라는 비슷한 도구를 개발하고 있음 (컨테이너/샌드박스사용도 고려) https://github.com/andrewbaxter/passworth

    • 이력 확인이 어렵다는 부분에 대해, 실제로 pass는 .gitattributes 파일을 설정하여 git이 gpg 파일을 텍스트로 변환해서 diff를 볼 수 있게 지원함

      • 예시는 ~/.password-store/.gitattributes*.gpg diff=gpg 추가하고
      • .git/config에 [diff "gpg"] 설정으로 textconv = gpg2 -d ... 지정
      • 이럴 경우 암호화된 내용도 간단히 diff 할 수 있음
    • pass를 쓰면서 겪은 추가적인 문제들 공유함

      • 중요한 사용절차들이 문서화되어 있지 않음 (ex. pass 저장소를 다른 컴퓨터로 옮길 때 무엇을 복사해야 하는지 불명확)
      • 패키징이 안 된 환경, 예를 들어 헤드리스 NAS에 설치하려고 하면 gpg cross-compile 문제 등으로 매우 어려움
      • pass는 gpg에 아주 얇은 인터페이스를 얹은 구조라, gpg의 모든 단점들을 그대로 가짐 (특히 gpg-agent 관련 문제 등)
      • 여러 조직은 요즘 GnuPG 대신 age 같은 심플한 암호화 도구로 전환 시도 중 https://github.com/FiloSottile/age
      • pass와 안드로이드의 조합은 별로였으며, 공식 패키지는 관리되지 않고, fork는 F-Droid에 없음, UI도 불편함
      • 대체로 pass를 계속 쓰고 있긴 하나, 더 나은 범용 솔루션이 별로 없음
      • FiloSottile/passage로 gpg를 age로 바꾸는 방법도 있지만 Android 지원은 없음
      • gopass가 더 좋아 보이긴 함 (모든 unix에서 동작, pass와 호환, age plugin 제공, https://www.gopass.pw), 하지만 역시 안드로이드 패키징은 없음
    • 데이터 구조화 문제는 폴더 구조로 해결함

      • 각 사이트별로 username, password, email 파일을 따로 관리
      • 때로는 notes(비구조화 노트), 혹은 특별한 경우에는 json(기계 읽기용) 파일 추가
      • meta 데이터가 암호화되지 않은 점이 아쉽지만, 대체로 만족하는 솔루션임
    • 본인은 오히려 데이터 비구조화가 큰 장점이라고 느낌

      • 실제로 Username: xxx 같은 포맷으로 적으면 browserpass 같은 브라우저 플러그인이 인식해서 자동으로 채워줌
    • 데이터 구조화나 히스토리 이슈에 대해 기능별로 의견 공유함

      • 각자 자신만의 convention 쓸 수 있다는 점을 장점으로 봄
      • pass generate로 값이 전부 덮어쓰여도, site/pass, site/secret-question처럼 따로 파일로 관리 가능
      • 디렉토리 트리를 활용하는 방식 자체가 꽤 괜찮음
      • git diff로 생성된 암호 추적은 어렵겠지만 실제로 중요한 건 마지막으로 바뀐 시점(git log로 확인)이며 필요하면 git checkout -d로 복원하면 됨
      • 터미널에서 $ pass 치면 연관 패키지를 띄워주니 검색 문제도 그렇게 심각하지 않음
  • 브라우저 비밀번호 관리자+passkey가 훨씬 편리하지만, pass 금고도 복구코드와 API 키 저장용으로 쓸 만함

    • pass 쓸 때 가장 애매했던 점은 위협 모델이 애매하다는 것이었음

    • GPG 에이전트를 캐시해버리면, 아무 스크립트(npm postinstall 등)도 pass ls로 모든 자격증명을 훑을 수 있음

    • 그럴 바에야 그냥 ~/passwords.txt로 파일 하나에 저장하는 것과 비슷해짐

    • 하지만 캐시를 안 쓰면 매번 긴 GPG 암호를 입력하는 고통

    • YubiKey를 써서 온디맨드로 해제하는 것도 해봤지만, 통합이 부실하고 비밀번호 입력이 자주 필요할 때 상당히 불편함

    • 그래서 Bitwarden으로 이동함

    • 나 같은 경우엔 yubi를 그냥 계속 꽂아둠

      • 어쨌든 물리적 터치가 필요하니, 내 공간이 안전하다면 실질적으로 2차 인증임
      • fido2와 달리 OpenPGP로는 핀을 한 번만 입력하면 꽂혀 있는 동안 계속 해제 상태
      • 대신 매번 터치를 해야 각 비밀번호를 해제하니까 본인에게는 완벽하면서도 편리함
      • 모바일에서도 openkeychain, password store 조합이 잘 작동함
      • 모두가 더 이상 관리하지 않지만 yubi의 하드웨어 암호화만 믿으면 충분하다고 생각함
    • 모든 비밀번호 관리자는 기본적으로 저장소 잠금이 풀려 있으면 마스터 패스워드가 램이나 캐시에 남아서 모든 비밀번호가 노출될 수 있음

      • 사용 안 할 때는 잠궈둬야 안전함
      • Bitwarden처럼 브라우저와 통합된 경우는 공격 벡터(원격 서버, 익스텐션 등)도 넓음
      • 최근 거의 대부분의 브라우저 기반 패스워드 관리자에서 원격 공격자가 피해자의 브라우저로 패스워드를 보낼 수 있는 취약점이 나왔음
      • Bitwarden을 쓰긴 하지만, 정말 중요한 자격증명은 별도로 취급함
    • USB 포트 여유 있으면 Nano key도 꽂아만 두면 됨

      • 만약 악성코드가 yubi 핀을 빼내도 비밀번호를 다 훔치려면, 내가 기기를 천 번 누르게 설득해야 함
    • 나는 암호화 파일 파티션 sqlite DB에 비밀번호를 저장함

      • 스크립트가 비밀번호를 읽자마자 파티션을 바로 닫음
      • 아니면 각 비밀번호마다 파일을 개별적으로 암호화해서 저장할 수도 있음
      • 필요한 경우엔 패스워드 파일을 복호화 후 gpg agent를 클리어함
    • yubikey에 PIN이나 터치를 써서 GPG 키 사용에 승인 필요하도록 설정할 수 있음

      • pass의 가장 큰 문제는 iOS에서 yubikey와의 호환성이 별로임
  • 나는 이것을 정말 좋아하고 매일 씀

    • 특히 OpenPGP 키랑 yubi 조합이 인상적임
    • 각 비밀번호마다 개별적으로 unlock해야 하니, 공격자가 내 컴퓨터 완전히 장악했다 해도 물리적으로 터치한 것만 노출
    • 한번 unlock하면 모든 게 열려버리는 keepass, bitwarden과는 다르게 전체 데이터베이스 노출 위험이 적음
  • CLI를 좋아하는 사람한테는 pass가 흥미롭지만, 평범한 사용자(‘normie’ 기준)에게는 Desktop에서 KeepassXC, 안드로이드에서 KeepassDX, 그리고 Wireguard로 원격 접근 방식이 더 적합해 보임

    • keepass에서 말 잘 안나오는 유용한 기능 중 하나가, 여러 개의 vault를 동시에 열고 검색할 수 있다는 점임

      • 대부분의 패스워드 관리자는 단일 vault를 전제로 설계되어, 결국 모든 비밀번호가 똑같은 수준의 보안 강도가 필요하다는 가정임
      • 내 경우엔 비중요 사이트가 70%쯤이고, 막상 로그인할 때마다 긴 마스터 패스워드를 입력해야 하는 게 귀찮음
      • keepass는 이 70% 비중요 데이터를 별도 vault에 넣고 짧은 패스워드 써도 되니까, 덜 신경 써도 됨
    • ‘normie’라는 기준이 상대적이라고 생각함

      • 나는 그냥 1Password를 쓰며 결과를 믿는 쪽임
    • keepassxc.cli도 잊지 말 것임

      • 비밀값을 프로그램적으로 넣거나 빼는 데 정말 유용함
      • 예전에 암호화된 secrets 번들 만들 때, GNU pass를 먼저 시도했으나, gnupg 관리가 복잡하고 홈 디렉토리에 값 저장하는 점 등으로 결국 포기한 적 있음
      • pass가 ubiquity는 좋으나 copy-one-file 워크플로와 안 맞아서 keepassxc로 돌아섬
    • 내 사용 예시 하나가 keepass로 해결되지 않는 것은, 두 대의 분리된 컴퓨터에서 각각 비밀번호를 만들고 나중에 병합하는 작업임

    • KeepassXC도 써보고 싶지만, 배우자와 크리덴셜 공유가 쉽지 않음

      • 전용 vault를 쓴다 해도, 기존 정보 공유할 때는 결국 수작업 copy/paste 필요
      • 그래서 지금은 Vaultwarden으로 정착했고, 생각보다 안정적으로 쓰고 있음
  • pass를 혼자만 쓸 때는 재미있는 솔루션이지만, 여러 명과 공유할 때는 주의해야 함

    • 회사 패스워드 관리용으로 쓴다면 누가 어떤 비밀을 언제 조회했는지 알 방법이 없어, 임직원 변동 시마다 전체 패스워드를 바꿔야 함

    • 누군가 새롭게 접근 권한이 필요해도 파일을 선택적으로 재암호화하는 표준 방법이 없어 직접 구현해야 함

    • git을 써서 저장하긴 하지만 커밋 메세지가 자동 생성되어 실제로는 dropbox만큼만 이득임

    • 실수로 잘못된 내용을 push했다가 되돌리고 싶어도, git history를 다시 써야 하고, 다른 사용자 기기에서는 깨질 수 있음

    • 단순하고 직접 손 보는 것도 장점이지만, 이 단순함 자체가 함정임

    • hash(site_name+main_password) 방식처럼 아름답지만 현실적으로는 다양한 문제가 생김

    • 비즈니스 환경에서도 end-to-end 암호화, 유저간 fingerprint 검증 등 기능이 필요한데, Bitwarden이 그나마 적합해 보이지만 혹시 더 좋은 사례 있다면 추천받고 싶음

    • pass에서도 디렉토리별로 다른 키(혹은 여러 키)를 적용하면 그룹별, 사람별로 접근을 세분화할 수 있음

      • 예: admins 폴더는 admin 키, techs 폴더는 admin과 tech 키 모두 접근 가능
      • 각 직원별로 개인키를 지정해 특정 사이트 접근자만 관리 가능
      • git submodule을 써서 직원별 접근 범위 제어할 수 있음
      • git 이력을 통해서 언제 누구에게 어떤 패스워드를 공개했는지도 추적 가능
    • 내 회사에서는 1Password를 쓰고 있음

      • 그룹별 공유 vault, 서비스 계정, .env 파일을 통한 op run명령, CI 연동 등 다양한 기능을 지원함
    • 평가만 해보고 실제 경험은 없지만, 팀용 패스워드 공유 도구로 passbolt도 좋은 옵션이었음 https://www.passbolt.com

      • 공개키 방식으로, 평문 패스워드는 각 유저의 로컬에서만 보이고, 공유 패스워드는 각 유저의 공개키로 재암호화됨
    • 우리 회사에서는 "pa"라는 생소한 도구를 잘 쓰고 있음 https://git.j3s.sh/pa

      • age 기반, 여러 키로 암호화 가능함
    • FOKS 기반으로 좋은 솔루션을 만드는 것도 가능해 보임 https://foks.pub

  • 최근 pass에서 Bitwarden과 Vaultwarden으로 갈아탐

    • flatpak 기반으로 GUI 앱을 설치하는 환경에서는 Firefox 브라우저 확장과 pass 연동이 되지 않아서 불편했음

    • workaround로 run 창에서 pass -c <path>를 써서 암호 복사 후 브라우저에 붙여넣었지만, 이상적인 경험은 아니었음

    • 안드로이드 공식 앱이 아카이브된 것도 계기였고, fork가 있지만 얼마나 유지될지 모르겠음 https://github.com/android-password-store/Android-Password-Store/…

    • 현재는 vaultwarden을 직접 호스팅하고 여러 bitwarden 클라이언트로 사용 중임

    • pass에서 KeePassXC로 갈아탄 경험 나눔

      • 비슷하게 수백 개 secrets를 pass에 저장해왔음
      • 여러 기기에서 동기화가 쉽고, 중요한 비밀번호만 휴대폰/노트북에 보관하기가 한계라서 전환
      • KeePassXC는 한 개의 파일로 동기화가 쉽고, Android 앱도 2개나 잘 지원됨
      • 수작업으로 데이터 이동에 3시간 정도 걸렸지만, 이 기회에 데이터를 정리함
      • 비밀번호 관리는 드물게 쓰는 기록 앱이라 파일 한개를 네트워크로 옮기면 충분히 세 대를 동기화함
    • passmenu라는 도구도 있음

      • 키 바인딩으로 호출하면 메뉴에서 자동완성으로 원하는 비밀번호 선택 후 클립보드에 복사
      • 명령 프롬프트에서 패스랑 경로 입력할 필요 없어서 편함
    • pass의 안드로이드 앱이 중단된 걸 몰랐음

      • fork를 확인해보니 활발히 작업 중이라 다행이라고 느낌
      • 공식 프로젝트와 fork가 인계되지 않은 이유가 궁금함 (보안 실천 이슈였나 생각)
      • 나 자신은 플러그인보다 프롬프트에서 pass -c를 써서 직접 복사하는 걸 더 선호함
      • 플러그인은 브라우저 시작 시 gpg 키가 풀려버린다든지, 플러그인 제작자가 의도적으로 내 패스워드를 유출시킬 경우 위험성이 있어서 신뢰 문제임
    • vaultwarden에서의 오프라인 사용 경험을 궁금해함

      • 종종 네트워크 연결이 불안정한 환경에서 오프라인으로 인증정보 조회나 갱신이 꼭 필요함
      • vaultwarden이 그 부분을 얼마나 지원하는지는 아직 직접 써보지 않음
  • pass-otp 확장도 있음 https://github.com/tadfisher/pass-otp

    • pass용 안드로이드 앱도 꽤 괜찮음 https://play.google.com/store/apps/details?id=dev.msfjarvis.aps

    • termux에서도 동작함

    • Android Password Store 앱은 작년에 아카이브됐고, agrahn이 fork해서 많이 개선시킴

    • 나만의 대안은 ~/bin에 작은 스크립트 놓고 otp 생성에 pass와 oathtool 쓰는 방식임

      • pass로 키를 꺼내 oathtool로 totp 코드를 생성함
    • 일부 오래된 pass용 안드로이드 앱은 더 이상 내 기기에서 설치 불가하게 됨

      • GPG 연동이 번거로워서 실제로 잘 안 됨
  • GPG 대신 age를 쓰는 경우 도움이 되는 passage 도구 있음 https://github.com/FiloSottile/passage

    • age를 쓰는 pass류 관리자가 여러 개 있음
      • 한 개발자가 비교 표까지 만들어 놓고 있음 (참고로 pago가 내 작품임)
      • 비교표 gitlab 링크
  • 나는 요즘 10년 가까이 다른 접근법을 쓰고 있음

    • 모든 패스워드 메타데이터는 평문 JSON에 저장, 각 항목은 user, 버전, 패스워드 규칙(길이, 문자종류 등) 기록

    • 실제 패스워드는 저장하지 않고, 패스프레이즈+메타데이터 해시로 비밀번호를 '결정적으로' 생성

    • 버전 넘버만 바꿔도 완전히 새로운 패스워드가 생성되고, '버전'만 바꾸면 히스토리도 쉽게 확인할 수 있음

    • 공유가 거의 불가능한 것이 단점(다른 사람이 내가 쓴 패스프레이즈를 알아야 가능)

    • 공유 필요 시에는 패스워드 생성기로 암호화문 생성해 따로 메타데이터로 저장하는 모드도 고려했지만, 실제로는 크게 필요 없었음

    • 패스워드 생성기 방식이 괜찮은 이유는 vault를 잃어버릴 걱정이 줄어듦

      • 공용 hash function만 있으면 어느 환경에서든 패스워드 생성 가능
      • 문제는 메타데이터(사이트 리스트, 규칙 등)가 공개됨과 동시에 보안 우려가 남
      • vault 방식과 본질적으로 큰 차이는 없다고 느껴짐
    • 최근 SECUSO password generator를 통해 이 방식을 알게 됐음 https://secuso.aifb.kit.edu/english/105.php

      • 결정적 패스워드 생성을 쓰고 있음
      • SECUSO는 오픈소스 앱 모음도 괜찮음
    • 패스프레이즈를 공유하면 노출 면적이 넓어져서, 한 번 유출 시 여러 인증정보가 한 번에 위험에 처함

  • pass를 8년 넘게 쓰는 사용자임, 1300개 비밀번호를 저장함

    • git으로 기기 간 동기화해서 정말 만족스럽게 사용 중임

    • "1300개 비밀번호는 어떻게 이렇게 많음?"

      • 막상 숫자를 세보진 않았지만, 본인도 실제로 얼마나 많은지 잘 모름