Search
🔒

팀 공용 계정 관리 (pass)

Reference

1. 설치 및 생성

pass 는 gpg 기반의 CLI password 관리 tool이다.

pass 설치

Mac의 경우, brew로 pass를 설치 후 자동완성 세팅을 해준다.
$ brew install pass # 시간이 10분 이상 걸릴 수 있다. $ echo "source /usr/local/etc/bash_completion.d/password-store" >> ~/.bash_profile # 자동완성
Shell
복사

gpg key 생성

$ gpg --gen-key
Shell
복사
GPG key를 생성하면 public key와 private key가 같이 생성되고, ~/.gnupg/ 디렉토리에 저장된다.

생성된 gpg key 확인

$ gpg --list-keys /Users/gu/.gnupg/pubring.kbx ---------------------------- pub ed25519 2023-04-23 [SC] [expires: 2025-04-22] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX uid [ultimate] ???? <?????@gmail.com> sub cv25519 2023-04-23 [E] [expires: 2025-04-22]
Shell
복사
여기서 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 이 부분이 public gpg-id 이다.

pass 활성화

만들어진 gpg-id로 pass를 활성화한다.
$ pass init XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Shell
복사
이제 ~/.password-store/ 디렉토리가 만들어졌고, 여기에 암호화된 비밀번호를 .gpg 파일로 저장한다.

2. pass 사용하기

비밀번호 저장

$ pass insert mydir/myname@test.com mkdir: created directory '/Users/??/.password-store/mydir' Enter password for mydir/myname@test.com:mypassword Retype password for mydir/myname@test.com:mypassword
Shell
복사
위 command를 입력하면, mydir 디렉토리를 만들면서 (/ 로 구분해서 더 깊은 디렉토리도 만들 수 있다) myname@test.com 의 비밀번호를 입력, 저장할 수 있다.
참고로 Deepest 계정은 deepest/google/team.deepest@gmail.com, deepest/discord/team.deepest@gmail.com 으로 만들었습니다!

저장된 계정, 비번 확인

# 전체 계정 확인 $ pass Password Store └── mydir └── myname@test.com # 계정별 비밀번호 확인 $ pass mydir/myname@test.com mypassword
Shell
복사

비밀번호 생성

애초에 새 계정을 만들 때부터 pass를 이용해 비번을 생성 & 저장할 수 있다.
$ pass generate mydir2/myname2@test.com 16 The generated password for mydir2/myname2@test.com is: NhZypm~N&'3#X`p4 $ pass Password Store └── mydir └── myname@test.com └── mydir2 └── myname2@test.com
Shell
복사
pass generate <아이디:str> <자릿수:int>
정해진 자릿수에 맞는 강력한 비번을 만들고 저장한다.

3. Git으로 pass 관리하기

~/.password-store/ 디렉토리를 직접 git으로 관리할 수도 있지만, pass 자체적으로 git 을 지원한다.
$ pass git init Initialized empty Git repository in /Users/??/.password-store/.git/
Shell
복사
remote repository 와 연동하면 팀원들과 pass 계정 정보를 공유할 수 있다.
$ pass git remote add origin <remote_repository_address> $ pass git push origin main
Shell
복사
일단 git과 연결되면, pass의 정보가 바뀔 때마다 commit이 자동으로 이루어진다.
pass git push, pass git pull 등을 사용해서 업데이트 한다.

4. 팀원과 공유하기

pass는 여러 개의 gpg-id를 지원한다. 즉, 하나의 비밀번호를 여러 개의 public key로 동시에 암호화할 수 있고, 팀원 중 누군가 새로운 비밀번호를 저장하면 pass는 팀원 전체의 public key들로 비밀번호를 암호화한다.
그러나 팀원이 10명이라고 해서 서로 다른 public key마다 따로 암호화된 파일 10개가 생기는 것은 아니고, 10개의 public key를 모두 사용해 암호화된 파일 1개가 생성된다. 이 암호화된 파일이 pass directory에 저장되며 git repository로 공유된다.
각 팀원은 다른 팀원들의 public key 전체와 자신의 private key 1개를 가지고 있어야 한다.
정리하면, 팀원 모두의 public key를 이용해 비밀번호를 “암호화”하고, 비밀번호를 “복호화”할 때는 자신의 private key를 사용한다. 따라서 모든 팀원은 각 gpg-id의 public key를 ~/.gnupg/ 에 저장하고 있어야 한다.

public key 공유하기

여러 방법이 있지만, key server를 사용하는 것이 일반적이다. 팀원 전체가 각자의 public key를 key server에 저장해두면 공유가 쉽다.
# 공유할 gpg-id의 key 확인 $ gpg --list-secret-keys /Users/gu/.gnupg/pubring.kbx ---------------------------- pub ed25519 2023-04-23 [SC] [expires: 2025-04-22] XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX uid [ultimate] ???? <?????@gmail.com> ssb cv25519 2023-04-23 [E] [expires: 2025-04-22]
Shell
복사
key server 중에서는 MIT PGP Public Key Server (pgp.mit.edu)를 주로 사용한다.
$ gpg --keyserver pgp.mit.edu --send-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Shell
복사
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY 가 팀원의 public key 이다.

public key 가져오기

팀원의 키를 key server에서 공유 받을 수 있다.
$ gpg --keyserver pgp.mit.edu --recv-key YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Shell
복사
저장된 public key list를 보면 팀원의 key가 추가된 것을 알 수 있다.
$ gpg --list-keys
Shell
복사
가져온 key는 바로 쓸 수는 없고, 신뢰 수준을 조정해서 사용한다.
$ gpg --edit-key YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY gpg> trust Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y gpg> q
Shell
복사

새로운 팀원과 pass 공유 & 재설정

새로운 팀원은 기존 팀원 중 누군가가 자신을 pass에 포함시켜주기를 기다려야 한다. 새로운 팀원을 포함시키려면 그 팀원의 gpg-id를 pass에 추가한다.
$ pass init XXXXX... YYYYY... ZZZZZ...
Shell
복사
새로운 gpg-id를 추가하려면, 기존에 포함되어 있는 gpg-id도 포함해 pass를 다시 설정해준다.
이러면 기존에 저장되어 있던 비밀번호들이 새로운 public key set을 통해 다시 암호화된다.
변경된 내용은 git repository를 업데이트해서 공유한다.
$ pass git push
Shell
복사
이제 새 팀원은 git repository를 pull 하여 비밀번호에 접근할 수 있다.
새 팀원은 다른 팀원들의 public key를 key server에서 공유 받아야 새로운 비밀번호를 pass에 추가할 수 있다.