패스워드 관리 프로그램인 pass를 팀이 사용할 수 있게 도와주는 프로그램
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bin
password_store
script
test
.gitattributes
.gitignore
LICENSE
README.org

README.org

tpass (team pass)

tpass를 왜 만들었나?

팀 패스워드 관리를 pass 프로그램으로 할 때, 팀 동료 공개키 관리를 도와준다.

$ pass init team_1@company.com team_2@company.com

팀원이 추가될 때마다 pass init 인자로 기존 멤버에 새로운 멤버를 추가해 다시 암호화(reencrypt)를 해서 공유해야 한다.

프로젝트 tpass 아이디어는 간단하다.

팀 동료 공개키를 특정 디렉터리(.team_pubs)에 모아놓고 팀원 추가(bin/add_user), 팀원 제거(bin/remove_user) 스크립트로 공개키를 추가 또는 삭제한다.

bin/update 스크립트로 .team_pubs 디렉터리에 있는 공개키로 암호화를 한다.

버전 컨트롤(git으로만 테스트)로 팀 패스워드 공유를 생각하고 스크립트를 짰다.

시작하기

$ git clone https://github.com/ohyecloudy/tpass.git ~/tpass
$ cd ~/tpass
$ script/bootstrap

tpass 사용에 필요한 세팅을 하는 script/bootstrap 스크립트 실행.

설치 - windows

git for windows SDK 설치

$ pacman -Sy
$ pacman -S pass

pacman 패키지 매니저로 pass 프로그램을 설치한다.

설치 - mac, linux

pass 메뉴얼 참고

tpass 스크립트 사용 방법

tpass는 유저 추가 또는 삭제만 한다. 패스워드 추가, 수정, 삭제는 pass 프로그램을 직접 사용한다.

내가 첫 유저

$ gpg --gen-key

gpg key가 없다면 먼저 생성.

$ cd ~/tpass
$ bin/add_user ohyecloudy@gmail.com
$ git add .
$ git commit -m "add ohyecloudy@gmail.com"
$ bin/update
$ git log -n 1
recrypted 커밋이 자동으로 만들어졌는지 확인
$ git push

혼자 북치고 장구치면 된다. bin/add_user 스크립트로 자신을 추가하고 bin/update 스크립트를 실행해 암호 저장소를 만들면 된다.

유저 추가

test/test_add_user 테스트 스크립트 참고.

1. 신규 유저 - public key를 저장소에 추가

$ gpg --gen-key

gpg key가 없다면 먼저 생성.

$ cd ~/tpass
$ bin/add_user ohyecloudy@gmail.com
$ git add .
$ git commit -m "add ohyecloudy@gmail.com"
$ git push

public key를 bin/add_user 스크립트를 사용해 추가. 아직 암호 저장소에는 접근할 수 없다. 기존 유저에게 부탁해야 한다.

2. 기존 유저 - 신규 유저를 포함해서 패스워드 저장소를 다시 암호화

$ cd ~/tpass
$ git pull
$ bin/update
$ git log -n 1
recrypted 커밋이 자동으로 만들어졌는지 확인
$ git push

암호 저장소를 bin/update 스크립트를 실행해 신규 유저 gpg key를 포함해 다시 암호화.

3. 신규 유저

$ cd ~/tpass
$ git pull

이제 사용할 수 있다.

유저 삭제

test/test_remove_user 테스트 스크립트 참고

1. 유저 삭제 스크립트 실행

$ cd ~/tpass
$ git pull
$ bin/remove_user ohyecloudy@gmail.com

bin/remove_user 스크립트를 사용해 public key를 모아둔 디렉터리에서 삭제. 아직 저장소를 다시 암호화한 게 아니기 때문에 접근 가능.

2. 삭제한 유저를 제외하고 패스워드 저장소를 다시 암호화

$ cd ~/tpass
$ bin/update
$ git log -n 1
recrypted 커밋이 자동으로 만들어졌는지 확인
$ git push

bin/update 스크립트를 사용해 삭제한 유저를 제외하고 다시 암호화.

디렉터리별 접근 권한을 정의

bin/add_user, bin/remove_user 두번째 인자로 서브 디렉터리 경로를 넣으면 된다. 유저 추가, 삭제와 마찬가지로 유저 변화가 있다면 bin/update를 실행해야 한다.

$ cd ~/tpass
$ bin/add_user ohyecloudy@mail.com redzone
$ bin/update
$ git log -n 1
recrypted 커밋이 자동으로 만들어졌는지 확인
$ git push

redzone 디렉터리 접근 권한을 할당했다. root 디렉터리 접근 권한이 있더라도 redzone 디렉터리 접근 권한을 받지 않으면 저장한 패스워드를 볼 수 없다.

$ pass insert redzone/aws/account/team@company.com

pass 프로그램을 사용해 패스워드 추가, 조회, 삭제 방법은 동일. 권한 관리는 디렉터리 기준인 것만 기억하면 된다.

$ cd ~/tpass
$ bin/remove_user ohyecloudy@mail.com redzone
$ bin/update
$ git log -n 1
recrypted 커밋이 자동으로 만들어졌는지 확인
$ git push

두번째 인자로 서브 디렉터리 경로를 넣으면 해당 디렉터리 접근 권한을 제거한다.

pass 사용 방법

패스워드 추가

$ pass insert aws/account/team@company.com
Enter password for aws/account/team@company.com:
Retype password for aws/account/team@company.com:

$ pass ls
Password Store
└── aws
    └── account
        └── team@company.com

패스워드 추가, 파일 생성 - PEM

$ pass insert -m aws/pem/dev-server < dev-server.pem

Enter contents of aws/pem/dev-server and press Ctrl+D when finished:

$ pass ls
Password Store
└── aws
    └── pem
        └── dev-server

-m 옵션을 사용하면 여러 줄도 문제없다.

$ pass aws/pem/dev-server > dev-server.pem

$ ssh -i dev-server.pem user@dev-server

파일로 생성해 사용하면 된다.

패스워드 조회

$ pass aws/account/team@company.com
1234

패스워드 자동 생성

$ pass generate aws/account/user@company.com
The generated password for aws/account/user@company.com is:
}6ch/7DW>ljK5mRdzL3s{AtN2

$ pass aws/account/user@company.com
}6ch/7DW>ljK5mRdzL3s{AtN2

-n 옵션을 추가하면 특수문자(symbol)는 빼고 임의 패스워드를 만든다.

패스워드 삭제

$ pass ls
Password Store
└── aws
    └── account
        ├── team@company.com
        └── user@company.com

$ pass rm aws/account/user@company.com
Are you sure you would like to delete aws/account/user@company.com? [y/N] y
/Users/ohyecloudy/.password-store/aws/account/user@company.com.gpg

$ pass ls
Password Store
└── aws
    └── account
        └── team@company.com

사용법 참고

사용 가능 인원

test/testlong_many_users 테스트로 100명까지 사용 가능 확인

$ cd ~/tpass
$ test/testlong_many_users 500

인자로 유저 수를 바꿔서 테스트할 수 있다.

테스트 방법

$ cd ~/tpass
$ script/test

테스트에서 다른 유저 환경을 구축하려고 docker를 사용한다.

$ cd ~/tpass/test
$ vagrant up
$ vagrant ssh
$ cd /vagrant
$ script/test

docker가 안 깔리는 구형 컴퓨터를 사용하고 있거나(눈물) 그런 프로그램으로 내 컴퓨터를 더럽히기 싫다면 vagrant를 사용하면 된다.

왜 굳이 pass 프로그램을 사용하려고 하는가?

git for windows SDK와 같이 배포되는 pass 프로그램을 추가 설치 없이 사용하려고 만들었다. 그래서 팀 패스워드 관리 목적으로 만든 justwatchcom/gopass는 고려 대상에서 제외했다.