pass adalah toolpassword 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.
~/.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.
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.
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.
Berikut adalah cara membuat master key dengan GPG:
gpg --full-generate-key
Kemudian, pilih opsi (1) RSA and RSA untuk algoritma yang digunakan (demi alasan keamanan).
Selanjutnya, ketikkan 4096 untuk keysize-nya (lagi-lagi, demi alasan keamanan).
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.
Konfirmasi dengan tekan y di keyboard.
Akan muncul prompt Real name:, isikan dengan nama yang diinginkan.
Juga akan muncul prompt Email address:, isikan dengan email yang diinginkan.
Bagian comment dapat dilewati (dibiarkan kosong).
Terakhir, tekan O di keyboard jika sudah selesai.
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:
Distro
Command
Debian/Ubuntu
sudo apt install pinentry-curses
Arch Linux
sudo pacman -Sy pinetry
Opensuse
sudo zypper install pinentry
Fedora
sudo dnf install pinentry
NixOS:
Masukkan baris berikut di file konfigurasi (/etc/nixos/configuration.nix):
Mula-mula, sebelum membuat password di pass, kita perlu menginisialisasikannya terlebih dahulu menggunakan master key yang sudah dibuat sebelumnya dengan perintah berikut:
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>
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.
pass juga menyediakan fitur generate password. Artinya, pass akan membuatkan password dengan kombinasi acak antara abjad, angka, dan simbol untuk kita.
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.
Selain dengan melihat langsung ke direktori ~/.password-store, pass juga memungkinkan kita untuk melihat daftar file password yang sudah kita buat dengan perintah:
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:
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.
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:
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>
grepping metadata
Seperti terlihat, kita bisa mendapatkan string “email” yang terdapat di file
Ketika berinteraksi “pertama kali” dengan hal yang berkaitan langsung dengan konten file password, misalnya seperti menampilkan password, meng-copypassword ke clipboard, meng-edit konten file password, dan lain sebagainya, pass akan meminta passphrase.
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:
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.
Sebelum menambahkan repository, kita perlu memperhatikan beberapa hal berikut ini terlebih dahulu:
Sudah memiliki akun di Github (atau “Gitlab”).
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 SSHpass 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:Github SSH
Nah, sekarang, agar password-password tersebut dapat digunakan di komputer yang lain, berikut adalah syarat minimalnya:
Komputer tersebut sudah memiliki git.
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" directorypass git clone git@github.com:<username>/<repo-name>.git .password-store
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.