팀 패스워드 관리를 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 스크립트 실행.
$ pacman -Sy $ pacman -S pass
pacman 패키지 매니저로 pass 프로그램을 설치한다.
pass 메뉴얼 참고
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 테스트 스크립트 참고.
$ 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 스크립트를 사용해 추가. 아직 암호 저장소에는 접근할 수 없다. 기존 유저에게 부탁해야 한다.
$ cd ~/tpass $ git pull $ bin/update $ git log -n 1 recrypted 커밋이 자동으로 만들어졌는지 확인 $ git push
암호 저장소를 bin/update 스크립트를 실행해 신규 유저 gpg key를 포함해 다시 암호화.
$ cd ~/tpass $ git pull
이제 사용할 수 있다.
test/test_remove_user 테스트 스크립트 참고
$ cd ~/tpass $ git pull $ bin/remove_user ohyecloudy@gmail.com
bin/remove_user 스크립트를 사용해 public key를 모아둔 디렉터리에서 삭제. 아직 저장소를 다시 암호화한 게 아니기 때문에 접근 가능.
$ 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 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
$ 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를 사용하면 된다.
git for windows SDK와 같이 배포되는 pass
프로그램을 추가 설치 없이 사용하려고 만들었다. 그래서 팀 패스워드 관리 목적으로 만든 justwatchcom/gopass는 고려 대상에서 제외했다.