Kody jednorazowe czyli One Time Password (OTP) służą jako dodatkowe zabezpieczenie np. konta e-mail. Do generowania kodów przeważnie używa się aplikacji na telefon typu Google Authenticator. Do wygenerowania kodu OTP jest potrzebny tajny kod w postaci ciągu znaków Base32 lub Hex.
W systemmie Linux istnieje takie narzędzie jak oathtool, jednak za każdym
razem trzeba podać tajny kod, wię jest to dość uciążliwe. Dlatego do
przechowywania kodów użyjemy programu pass, który potrafi szyfrować hasła
za pomocą klucza PGP.
Instalacja niezbędnych programów
dnf install oathtool gnupg2 pass fzf
Jeśli posiadamy już klucz PGP możemy sprawdzić jego nazwę oraz jego ID w innym
przypadku należy wygenerować klucz PGP za pomocą polecenia
gpg2 --full-generate-key. Proces generowania klucza jest opisany na stronie
https://sebmd.github.io/posts/generowanie-klucza-gnupg-pgp/
Sprawdźmy jakie posiadamy klucze za pomocą polecenia gpg2 --list-secret-keys
gpg2 --list-secret-keys
/home/testowy/.gnupg/pubring.kbx
--------------------------------
sec rsa2048 2019-04-19 [SC]
4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0
uid [ absolutne ] testowy (komentarz) <testowy@example.com>
ssb rsa2048 2019-04-19 [E]
Inicjalizacja programu pass, wymaga podania ID tajnego klucza PGP
pass init 4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0 mkdir: utworzony katalog '/home/testowy/.password-store/' Password store initialized for 4E70814B987ECB1AC675A5BD9B76BB5DDC8ADBE0
Jak widać dane będą przechowywane w katalogu ~/.password-store/
Dodanie konta do pass najlepiej poprzedzić jakimś wyrazem np. otp spowoduje to,
że tajne klucze będą przechowywane w podkatalogu otp, dzięki czemu można będzie
łatwiej je znaleźć.
Dodanie konta testowy@gmail.com
pass edit otp/testowy@gmail.com
Wyświetlenie hasła dla konta testowy@gmail.com
pass otp/testowy@gmail.com RWNLFJJNKP2B2VS4
Wygenerowanie kodu jednorazowego dla tajnego klucza RWNLFJJNKP2B2VS4.
oathtool --base32 RWNLFJJNKP2B2VS4 --totp 091421
Teraz złóżmy to wszystko razem:
oathtool --base32 --totp "$(pass "otp/$(find ~/.password-store/otp/* -exec basename {} .gpg \; | fzf)")"
Żeby było jeszcze łatwiej proponuję stworzyć aliasy otp i otp-add w pliku ~/.bashrc
alias otp='oathtool --base32 --totp "$(pass "otp/$(find ~/.password-store/otp/* -exec basename {} .gpg \; | fzf)")"'
Dla aliasu otp-add stworzymy funkcję o tej samej nazwie, dodatkową zaletą funkcji
jest to, że jeśli podamy nazwę konta ze spacjami to zostaną one zastąpione znakiem -.
function otp-add() {
if [ -z $1 ]; then
echo
echo Podaj nazwę konta.
echo
else
nazwa=$(echo "$@" | tr ' ' '-')
pass edit otp/$nazwa
fi
}
alias otp-add=otp-add
W skrócie działa to tak:
-
passprzechowuje tajne kody zaszyfrowane kluczem PGP -
oathtoolgeneruje kody jednorazowe podawane przezpass -
fzfułatwia wyszukiwanie
| Date: 2020-10-24T19:53:23+02:00 |