Skip to main content
  1. Teches/

The Standard Unix Password Manager: Pass

··1823 words·9 mins· ·
Pass Pass Password Manager Password Encryption Gpg Asymmetric Public Key Private Key
Wildan
Author
Wildan
An Ordinary Human Being
Table of Contents

Introduction
#

pass adalah tool password manager di Linux yang dikembangkan menggunakan GPG (GNU Privacy Guard).1 GPG sendiri merupakan utility di Linux yang biasa digunakan oleh sistem operasi dalam melakukan proses enkripsi dan menandatangani data dan komunikasi yang terjadi, seperti misalnya ketika pengguna Linux sedang meng-install paket tertentu.2 Oleh karena itu, biasanya, paket GPG (gnupg) sudah tersedia secara default di sistem operasi.

ss1
~/.password-store

pass menyimpan file password yang terenskripsi di direktori home (~/.password-store) seperti yang terlihat pada gambar di atas. Jika kita pergi ke direktori tersebut, tentu saja kita bisa melihat nama sub-direktori berikut dengan nama file-nya juga. Akan tetapi, isi dari file tersebutlah yang tidak dapat dibaca karena sudah terenkripsi. Perhatikan juga bahwa file yang tersimpan di direktori tersebut memiliki ekstensi .gpg. Itu artinya, seperti yang baru saja saya sampaikan, file-file tersebut dienkripsi menggunakan GPG.

ss2
the content of encrypted file on ~/.password-store directory

pass sendiri adalah software yang dikembangkan dengan lisensi open source dan gratis. Bahkan, kita dapat menemukan project repository official-nya di tautan di bawah ini.

zx2c4/password-store

Read-only mirror of https://git.zx2c4.com/password-store - https://www.passwordstore.org/ . Pull requests and issues on GitHub cannot be accepted and will be automatically closed. The proper way to submit changes is via the mailing list; see https://lists.zx2c4.com/mailman/listinfo/password-store .

Shell
677
108

Nah, di artikel ini, kita akan belajar cara mengelola password dengan salah satu password manager terbaik di Linux, yaitu pass.

Installation
#

Berikut adalah cara meng-install pass di beberapa Linux populer:

DistroCommand
Debian/Ubuntusudo apt install pass
Arch Linuxsudo pacman -Sy pass
Fedorasudo dnf install pass

Opensuse tidak menyediakan paket pass sehingga untuk meng-install-nya kita dapat merujuk pada repository Github-nya untuk meng-compile-nya sendiri.

NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):

  environment.systemPackages = [
    pkgs.pass
  ];

Atau jika menggunakan nix-shell:

nix-shell -p pass

Managing Passwords
#

Berikut adalah langkah-langkah mengelola password menggunakan pass:

1. Master Key
#

Sebelum melakukan enkripsi, kita perlu membuat master key terlebih dahulu. Master key ini terdiri dari 2 kunci, yaitu private key dan public key.

Private key adalah kunci yang nanti akan digunakan untuk mengunci atau mengenkripsi file password, sementara public key adalah kunci yang nanti akan digunakan untuk membuka atau mendekripsi file password. Oleh karena itu, private key harus kita jaga dan tidak boleh diberikan kepada orang lain.

1.1 Creating Master Key
#

Berikut adalah cara membuat master key dengan GPG:

gpg --full-generate-key
  1. Kemudian, pilih opsi (1) RSA and RSA untuk algoritma yang digunakan (demi alasan keamanan).
  2. Selanjutnya, ketikkan 4096 untuk keysize-nya (lagi-lagi, demi alasan keamanan).
  3. Berikutnya, kita dapat memilih waktu expire untuk master key ini. Tapi, jika kita ingin agar master key tersebut tidak pernah expire, pilih opsi pertama, 0 = key does not expire.
  4. Konfirmasi dengan tekan y di keyboard.
  5. Akan muncul prompt Real name:, isikan dengan nama yang diinginkan.
  6. Juga akan muncul prompt Email address:, isikan dengan email yang diinginkan.
  7. Bagian comment dapat dilewati (dibiarkan kosong).
  8. Terakhir, tekan O di keyboard jika sudah selesai.
  9. Sebelum ditutup, kita akan diminta memasukkan passphrase yang nanti akan sering digunakan untuk mengelola pass.

Berikut adalah video tutorialnya:

Kita dapat membuat lebih dari satu master key.

Notes:

Mungkin, beberapa distro (seperti yang sama alami di NixOS) tidak dapat menyelesaikan proses pembuatan master key karena prompt “paraphrase” di akhir tidak muncul. Itu disebabkan belum terpasangnya satu package terkait, yaitu pinentry.

Berikut adalah cara install dan konfigurasinya:

DistroCommand
Debian/Ubuntusudo apt install pinentry-curses
Arch Linuxsudo pacman -Sy pinetry
Opensusesudo zypper install pinentry
Fedorasudo dnf install pinentry

NixOS:

Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):

  environment.systemPackages = [
    pkgs.pinentry-curses
  ];

Atau jika menggunakan nix-shell:

nix-shell -p pinentry-curses

Untuk mengaktifkan pinentry, masukkan perintah berikut di
~/.gnupg/gpg-agent.conf:

pinentry-program /usr/bin/pinentry-curses

1.2 Listing Master Key
#

Kita juga dapat melihat daftar master key yang kita miliki dengan perintah:

gpg --list-keys

ss3
listing master keys

1.3 Removing Master Key
#

Kita juga dapat menghapus master key:

gpg --delete-secret-and-public-keys <name_or_email>

ss4
removing master keys

Dengan perintah tersebut, kita menghapus secret key dan public key yang terasosiasi oleh username atau email tersebut.

1.4 Editing Master Key
#

Selain itu, kita juga dapat meng-edit master key:

gpg --edit-key <name_or_email>

Dalam mode edit ini, kita dapat melakukan banyak hal, seperti mengganti expire key-nya dan mengganti passphrase.

ss5
editing master keys

2. Passwords Store
#

Sekarang, kita akan mulai menggunakan pass untuk mengelola password.

2.1 Initializing pass
#

Mula-mula, sebelum membuat password di pass, kita perlu menginisialisasikannya terlebih dahulu menggunakan master key yang sudah dibuat sebelumnya dengan perintah berikut:

pass init <key>

ss6
initializing pass

2.2 Creating Pass
#

Cara membuat password baru:

pass insert <filename>

Dengan perintah tersebut, kita berarti membuat password yang akan disimpan dalam nama file yang langsung berada di bawah direktori ~/.password-store.

Atau jika kita ingin menyimpan password kita di dalam bentuk struktur sub-direktori juga bisa:

pass insert <sub-dir>/<filename>

ss7
creating new pass

Perhatikan bahwa file “github” berada langsung di bawah direktori ~/.password-store, sementara, file “email” untuk wildan & alex berada di sub-direktori ~/.password-store/email. Jika kita pertama kali membuat sebuah sub-direktori, perintah di atas secara otomatis juga akan membuatkan sebuah folder baru.

2.3 Generating Pass
#

pass juga menyediakan fitur generate password. Artinya, pass akan membuatkan password dengan kombinasi acak antara abjad, angka, dan simbol untuk kita.

Cara men-generate password:

pass generate <filename>
# atau
pass generate <sub-dir>/<filename>

ss8
generating new pass

Perhatikan bahwa saya men-generate 2 file password baru, yaitu “snake” & “chess” yang sama-sama berada di sub-direktori ~/.password-store/game/offline. Seperti terlihat juga pada gambar bahwa password yang dibuat oleh pass untuk “snake” & “chess” adalah kombinasi abjad (kapital maupun huruf kecil), angka, dan simbol dengan panjang 25 karakter.

2.4 Listing Pass
#

Selain dengan melihat langsung ke direktori ~/.password-store, pass juga memungkinkan kita untuk melihat daftar file password yang sudah kita buat dengan perintah:

pass ls
# atau sesederhana
pass

ss9
listing passwords

2.5 Showing Pass
#

Untuk melihat konten dari file password, gunakan perintah:

pass show <filename>
# atau
pass show <sub-dir>/<filename>

ss10
showing password file content

2.6 Editing Pass
#

Kita juga bisa secara langsung meng-edit konten dari file-file password kita, misalnya dengan tujuan untuk menambahkan detail metadata lain, seperti email, catatan, dan lain sebagainya:

pass edit <filename>
# atau
pass edit <sub-dir>/<filename>

ss12
editing pass

2.7 Copying Pass
#

Kita juga dapat meng-copy password tertentu ke clipboard tanpa menampilkannya di terminal:

pass -c <filename>
# atau
pass -c <sub-dir>/<filename>

ss11
copying password to clipboard without showing it to the terminal

Perhatikan bahwa password yang di-copy ke clipboard juga diberi batasan waktu (default-nya 45 detik). Artinya, kalau kita tidak segera mem-paste-kan password tersebut ke suatu tempat, password akan hilang dari clipboard dan kita perlu mengulang perintah di atas kembali jika ingin menggunakannya lagi.

Note:

Jika kita sudah meng-edit atau menambahkan metadata atau informasi tambahan sebelumnya ke dalam file password tertentu, perintah di atas hanya akan meng-copy informasi password kita saja yang berada di baris paling atas. Artinya, informasi lain di baris bawahnya tidak akan ikut ter-copy.

2.8 Finding Pass File
#

Jika kita memiliki banyak file (apalagi ditambah juga dengan banyak sub-direktori/sub-folder), maka mencari satu file password tertentu akan terasa sulit. Kita dapat mencari file password dengan mudah melalui perintah berikut:

pass find <filename>
pass find <dir-name>
# atau 
pass search <filename>
pass search <dir-name>

ss13
finding password filename

2.9 Grepping Metadata
#

Jika kita misalnya ingin mengetahui informasi spesifik mengenai metadata yang tersimpan dalam file-file password tersebut (termasuk informasi tentang password itu sendiri tentunya), kita dapat menggunakan perintah:

pass grep <string>

ss14
grepping metadata

Seperti terlihat, kita bisa mendapatkan string “email” yang terdapat di file

  • ~/.password-store/github
  • ~/.password-store/email/alex
  • ~/.password-store/email/wildan

2.9 Deleting Pass
#

Kita pun dapat menghapus password yang sudah dibuat dengan perintah:

pass rm <filename>
# atau
pass rm <dir-name>/<filename>

ss15
removing password

Notes
#

  1. Ketika berinteraksi “pertama kali” dengan hal yang berkaitan langsung dengan konten file password, misalnya seperti menampilkan password, meng-copy password ke clipboard, meng-edit konten file password, dan lain sebagainya, pass akan meminta passphrase.
  2. Pengaturan passphrase yang muncul tersebut juga dapat diatur, agar misalnya passphrase tersebut tidak hanya akan diminta pertama kali saja, tetapi, jika sudah lewat 5 detik dari permintaan pertama. Inilah yang disebut dengan pengaturan caching time. Caranya, kita menambahkan baris berikut di ~/.gnupg/gpg-agent.conf:
default-cache-ttl 5

3. Pass x Git
#

Semua pengelolaan password di atas tentu saja hanya terjadi di komputer lokal kita. Sekarang, bagaimana jika kita ingin agar password-password tersebut dapat dikelola juga di komputer yang lain? Solusinya adalah dengan menggunakan fitur “git” yang disediakan oleh pass.

3.1 Initializing git
#

Untuk meng-inisialisasikan git, (dan ini adalah hal pertama yang mesti dilakukan), caranya:

pass git init

3.2 Adding repo
#

Sebelum menambahkan repository, kita perlu memperhatikan beberapa hal berikut ini terlebih dahulu:

  1. Sudah memiliki akun di Github (atau “Gitlab”).
  2. Sudah membuat repositori di akun Github tersebut.

Himbauan!

Saran saya, untuk alasan keamanan, repositori Github yang digunakan untuk “menyimpan” password-password kita tersebut dibuat “private” saja (jangan “public”). Dengan demikian, repositori tersebut tidak dapat dilihat oleh orang lain alias hanya kita sebagai pemilik akun Github tersebut sajalah yang dapat melihatnya.

Untuk menambahkan remote repositori ke git:

# menambahkan _remote_ repositori di Github via SSH
pass git remote add origin git@github.com:<username>/<repo-name>.git

Kita dapat mengetahui tautan SSH untuk repo Github dengan melihat menu SSH pada bagian Code:

ss16
Github SSH

3.3 Pushing
#

Untuk mem-push repositori git yang ada di komputer lokal kita ke Github:

pass git push -u --all

Maka seluruh direktori/folder berikut dengan file-file password di dalamnya akan “tersimpan” di Github.

ss17
git init, add repo, push

3.4 Cloning
#

Nah, sekarang, agar password-password tersebut dapat digunakan di komputer yang lain, berikut adalah syarat minimalnya:

  1. Komputer tersebut sudah memiliki git.
  2. Komputer tersebut juga sudah memiliki pass.

Kalau belum, berarti harus install terlebih dahulu.

Agar password-password yang sudah ter-"upload" (push) ke Github tadi dapat digunakan kembali di komputer kita yang lain, kita perlu men-"download"-nya (clone) terlebih dahulu:

# clone the Github repo and save it to "~/.password-store" directory
pass git clone git@github.com:<username>/<repo-name>.git .password-store

ss18
cloning the pass repo

Seperti terlihat pada gambar di atas, kita berhasil meng-clone repositori Github-nya. Kita pun berhasil melihat daftar password yang ada. Masalahnya adalah, kita masih belum memiliki akses untuk berinteraksi (melihat, memodifikasi, mengedit, menghapus, dll) dengan password-password tersebut karena kita belum memiliki private key & public key yang diperlukan (lihat bagian kotak berwarna merah di bagian bawah gambar tersebut).

Oleh karena itu, tugas kita sekarang adalah meng-import kedua key tersebut.

3.5 Importing Keys
#

Kita harus meng-export private key & public key terlebih dahulu, baru meng-import-nya.

  1. Export Keys

Lakukan tahap export di komputer tempat membuat password dengan pass (bukan komputer lain).

mkdir keys && cd keys # creating new dir to save exported private & public key
gpg --output private.pgp --armor --export-secret-key <email@domain.com> # export private key
gpg --output public.pgp --armor --export <email@domain.com> # export public key

Setelah itu, kita boleh men-“transfer” direktori tersebut ke komputer tujuan (dengan scp, misalnya).

ss19
exporting private & public keys

  1. Import Keys

Lakukan tahap import di komputer tujuan (tempat kita meng-clone repositori Github password).

gpg --import private.pgp # import private key
gpg --import public.pgp # import public key

ss20
importing private & public keys

Dan sekarang kita sudah bisa “berinteraksi” dengan password-password di komputer lain:

ss21
pass on the other computer


Related

Enrypting Disk in Linux using LUKS
·678 words·4 mins
Cryptsetup Cryptsetup Linux Disk Encryption Luks
A tutorial on how to encrypt disk/drive in linux with cryptsetup.
SSH without Password?
·591 words·3 mins
Ssh Ssh Password
Too lazy to input your SSH password while doing routine task? Here is the solution…
A Comparison of 5 Terminal File Managers
·1022 words·5 mins
File Manager File Manager Terminal Cli Open Source Cool Linux
A glimpse of terminal-based file managers and their uniquenesses.