최근 서버에 문제가 발생해서 ssh 접속을 하려고 했는데,

그만... 글쎄... 패스워드가 기억이 나지를 않는 것이다.


한창 서버 작업을 할 때에는 그냥 쉭쉭~ 입력해서 잘 사용했었는데...

1달 정도 지난 후에... 나의 머리와, 나의 손이 기억을 잊은 것이다.


그런데, 이러한 패스워드를 어디에 적어놓기에는 너무 찜찜해서... 뭔가 방법을 찾고 있던 와중에,

얼마 전에 어떤 밋업에 갔다가 알게된 재미있는 솔루션이 하나 있다 !!!



"pass"라는 이름의 오픈소스 프로젝트인데...

이름이 너무 평범하여 검색엔진으로 검색하기 너무 어렵다.

https://www.passwordstore.org/



0. 설치 환경

- 필자가 이후 과정을 진행한 환경은 다음과 같다.


$ lsb_release -a


No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.3 LTS

Release:        18.04

Codename:       bionic



1. 설치하기

- Ubuntu에서는 이미 패키지로 제공해주고 있었다.


$ sudo apt-get install pass


Reading package lists... Done

Building dependency tree

Reading state information... Done

The following additional packages will be installed:

  gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 qrencode tree x11-common xclip

Suggested packages:

  python libxml-simple-perl ruby

The following NEW packages will be installed:

  gnupg2 libice6 libqrencode3 libsm6 libxmu6 libxt6 pass qrencode tree x11-common xclip

0 upgraded, 11 newly installed, 0 to remove and 0 not upgraded.

Need to get 428 kB of archives.

After this operation, 1,575 kB of additional disk space will be used.

Do you want to continue? [Y/n]



2. GPG Key 생성

- 암호화를 위해 사용될 GPG key를 생성해놓자


$ gpg --gen-key


gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.


Note: Use "gpg --full-generate-key" for a full featured key generation dialog.


GnuPG needs to construct a user ID to identify your key.


Real name: whatwant

Email address: whatwant@gmail.com

You selected this USER-ID:

    "whatwant <whatwant@gmail.com>"


Change (N)ame, (E)mail, or (O)kay/(Q)uit? O

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number

generator a better chance to gain enough entropy.

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number

generator a better chance to gain enough entropy.

gpg: /home/chani/.gnupg/trustdb.gpg: trustdb created

gpg: key 651Axxxx marked as ultimately trusted

gpg: directory '/home/chani/.gnupg/openpgp-revocs.d' created

gpg: revocation certificate stored as '/home/chani/.gnupg/openpgp-revocs.d/465Exxxx.rev'

public and secret key created and signed.


pub   rsa3072 2020-01-04 [SC] [expires: 2022-01-03]

      465Exxxx

uid                      whatwant <whatwant@gmail.com>

sub   rsa3072 2020-01-04 [E] [expires: 2022-01-03]



3. pass 초기화

- 위에서 입력했던 이메일 주소를 이용해서 초기화 하면 된다


$ pass init whatwant@gmail.com


mkdir: created directory '/home/chani/.password-store/'

Password store initialized for whatwant@gmail.com



4. git 설정

- 특이하게도 pass는 도구 차원에서 git을 지원한다.


$ pass git init


Initialized empty Git repository in /home/chani/.password-store/.git/

[master (root-commit) b3b0704] Add current contents of password store.

 1 file changed, 1 insertion(+)

 create mode 100644 .gpg-id

[master 6e3509f] Configure git repository for gpg file diff.

 1 file changed, 1 insertion(+)

 create mode 100644 .gitattributes


- 선택이긴하지만, 이왕이면 백업을 위해서라도 외부에 git repo를 하나 만들어 놓자.

- 그리고 그 git repo 주소를 등록해놓자.


$ pass git remote add origin git@github.com:whatwant/pass.git



5. password 입력하기

- 샘플로 하나 입력해보자


$ pass insert email/xxxx@naver.com


Enter password for email/xxxx@naver.com:

Retype password for email/xxxx@naver.com:

[master 4e6xxxx] Add given password for email/xxxx@naver.com to store.

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 email/xxxx@naver.com.gpg


- commit도 같이 작성된 것을 볼 수 있다.



6. git 저장하기

- 원격 git 저장소에 보내보자


$ pass git push -u origin master


Counting objects: 10, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (6/6), done.

Writing objects: 100% (10/10), 1.25 KiB | 426.00 KiB/s, done.

Total 10 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), done.

To github.com:whatwant/pass.git

 * [new branch]      master -> master

Branch 'master' set up to track remote branch 'master' from 'origin'.



7. password 확인하기

- 입력된 password를 확인하고 싶은 경우

- 화면에 노출되는 것이 싫은 경우, 또는 다른 곳에 붙여넣기를 하고 싶은 경우에는 "-c" 옵션을 사용하면 된다고 하지만...

  CUI 환경에서는 안되는 것으로 보인다. (GUI 환경에서는 되는 듯)


$ pass

Password Store

└── email

    └── xxxx@naver.com


$ pass email/xxxx@naver.com

xxxxxxxx


$ pass -c email/xxxx@naver.com

Error: Can't open display: (null)

Error: Could not copy data to the clipboard



8. Reference

https://git.zx2c4.com/password-store/about/#SIMPLE%20EXAMPLES

https://boxnwhis.kr/2017/04/27/how_to_manage_passwords_for_your_team.html



여러 PC에서 사용하기 위해서는 GPG Key를 관리할 방법도 별도로 찾아야할 듯 하지만,

password를 관리할 재미있는 방법을 찾은 듯 하여서 재미있다.


반응형

Ubuntu를 사용하게 되면 가장 많이 사용하는 명령어가 바로 "sudo"이다.
즉, root 권한으로 특정 명령을 실행하는 것인데...


Desktop 운영체제로 Linux를 사용하는 경우 기본 사용자를 종종 root로 하곤 한다.
하지만, Linux를 공부하게 되면 제일 자주 듣는 이야기 중 하나 "root는 위험해요~!!!"

그래서 Ubuntu는 기본적으로 root가 아닌 사용자를 사용하도록 하고 있다.
대신에 sudoer라는 그룹을 두고 해당 그룹에 속하는 계정들에게만
root 권한을 임의로 사용할 수 있도록 허용해준다.
그 방법이 바로 "sudo"이다.


그런데, sudo 명령을 사용할 때에 password 입력을 자꾸 요구하는 것이 번거로울 때가 있다.
그래서 이번 포스트에서는 sudo를 사용할 때에 password를 입력하지 않는 방법을 알아보고자 한다.



1. Password

     - sudo 명령을 이용하는 경우에 password 입력을 요구한다.


     - 물론 한 번 입력하면 한 동안은 password 입력 없이 sudo를 이용할 수는 있지만...




2. /etc/sudoers.d/

     - 특정 계정에 대한 설정을 입력하기 위해서는 파일 하나를 생성해야 한다.


$ sudo nano /etc/sudoers.d/mysudoers

     - 기존 파일을 수정하는 것이 아니라 파일을 하나 만들어야 한다.


chani ALL = NOPASSWD: POWEROFF, SHUTDOWN, HALT, /usr/bin/update-manager

     - 앞의 "chani"는 설정을 할 계정이름이다. 내 경우에 "chani"라는 것이고 다른 분들은 각자 상황에 맞춰서...

     - 뒤의 설정값은 살펴보면 다 알 수 있을 것이라 기대한다.
     - 패스워드 입력안할래... 파워도 끌 수 있고 셧다운도 할 수 있고..........

     - 만약 "apt-get"을 패스워드 입력없이 사용하고 싶다면, 위 파일을 편집하면 된다.

chani ALL = NOPASSWD: POWEROFF, SHUTDOWN, HALT, /usr/bin/update-manager, /usr/bin/apt-get

     - 위처럼 뒤에 해당 명령어를 추가해주면 된다.


$ sudo chmod 0440 /etc/sudoers.d/mysudoers

     - 방금 만든 파일의 속성값을 바꿔주면 이제 모두 끝~!!!





이제부터는 sudo 명령을 사용할 때에 chani 계정은 패스워드 입력없이 사용할 수 있다.

여러분 모두 즐거운 Ubuntu 생활 하세요~~~~

반응형

+ Recent posts