pass – menedżer haseł (nie tylko) dla geeków

Zapamiętanie haseł do wszystkich serwisów, sklepów, banków itp. to trudna rzecz. Dlatego poleca się menedżery haseł. Ale dlaczego by nie mieć takiego wprost w bashu?

TL;DR

Pass to menedżer haseł zbudowany na bazie basha i jego narzędzi. Pozwala stworzyć strukturę haseł szyfrowanych za pomocą GPG. Poza zwykłymi funkcjami szyfrowania umożliwia również kopiowanie hasła do schowka, przeszukiwanie bazy (w tym również szukanie haseł).

Jeszcze jeden menedżer haseł?

Coraz większą wagę przywiązuje się do bezpieczeństwa. Dwuatapowe uwierzytelnienie, tokeny, karty chipowe… ale na końcu zawsze trzeba podać jakiś pin albo hasło. Zapamiętanie kilkudziesięciu czy nawet kilkuset haseł jest – dla przeciętnego człowieka – trudne, jeśli nie niemożliwe. Specjaliści od bezpieczeństwa polecają menedżery haseł. Najczęściej przewija się KeePass w różnych odmianach lub – może nieco bardziej ryzykowne, ale wciąż bezpieczne i wygodne – on-line’owe serwisy do przechowywania haseł. 

Okazuje się jednak, że bash i dostępne w nim domyślnie narzędzia pozwalają stworzyć rozwiązanie, które jest równie bezpieczne jak produkty firm trzecich, a zupełnie od nich niezależne. Dobrym przykładem na to, że warto być niezależnym była sytuacja,  w której znany i lubiany serwis LastPass zmienił politykę i ograniczył dostęp użytkowników do ich haseł. Mnóstwo ludzi przeniosło swoje hasła do innych, bardziej otwartych serwisów. Nic takiego się nie zdarzy, jeśli będziemy używać… basha.

Pass to menedżer haseł w postaci skryptu bashowego. Integruje programy dostępne w każdym repozytorium linuksowym – gpg, xclip, qrencode oraz polecenia samego basha takie jak tree, cp, mv, tworząc z nich sprawny system ochrony informacji. Potrafi również współpracować z gitem. Wszystko jest na miejscu, dostępne i na pewno nikt nie wpadnie na pomysł, żeby kazać nam za to płacić. De facto wszystkie operacje obsługiwane przez pass można wykonać ręcznie z poziomu konsoli, program jednak znacznie ułatwia i przyspiesza korzystanie z nich.

Instalacja

Program znalazł dla siebie miejsce w repozytoriach najpopularniejszych dystrybucji i można go zainstalować za pomocą menedżera pakietów:

Ubuntu / Debian

$ sudo apt-get install pass

Fedora / RHEL

$ sudo yum install pass

openSUSE

$ sudo zypper in password-store

Gentoo

# emerge -av pass

Arch

$ pacman -S pass

FreeBSD

# pkg install password-store

Jest dostępny również dla macOS:

$ brew install pass

Dla Windows nie, bo w tym systemie… nie ma basha. Ale można zainstalować pass z poziomu WSL.

W trakcie instalacji doinstalowywane są wszystkie potrzebne programy (wszystkie są w repozytoriach) więc nie trzeba ręcznie dodawać żadnych zależności.

Szyfrowanie

Pass wykorzystuje GnuPG do szyfrowania informacji. W wielu dystrybucjach jest on domyślnie zainstalowany, jeśli nie – zostanie dodany w trakcie instalacji menedżera haseł. Jak dobre jest to szyfrowanie? Ktoś odpowiedział sprytnie: jak wskazuje na to nazwa – całkiem niezłe. Do tej pory nie udało się złamać GnuPG, a przy obecnej mocy komputerów odtworzenie klucza prywatnego na podstawie publicznego będzie trwało tysiące lat. Nasze hasła są więc bezpieczne. Więcej o GnuPG (w tym jak wygenerować klucze i nimi zarządzać) – w artykule “Gdy Prywatność Górą” w naszym ulubionym serwisie linuksowym.

Sejf

Każdy menedżer haseł ma swoje miejsce, w którym są trzymane tajne informacje. Pass przechowuje hasła w katalogu ~/.password-store. To, jak podzielimy ten katalog na podkatalogi – czy będą to kategorie, czy serwisy, czy cokolwiek innego, zależy tylko od użytkownika. Ograniczeniem jest wyłącznie struktura katalogów. W nazwach można używać spacji i znaków diakrytycznych (choć nieco komplikuje to potem obsługę).

Sejf trzeba zainicjować. Zostanie do niego przypisany klucz GnuPG (musimy mieć i publiczny i prywatny, żeby móc zapisać i odczytać hasła). Sejf można zainicjować poleceniem 

pass init [-p podkatalog] <klucz GnuPG>

Jeśli zostanie podany podkatalog (co jest opcjonalne) to klucz zostanie przypisany wyłącznie do tego podkatalogu (i jego podrzędnych). W efekcie pass, mimo, że używa jednego sejfu, umożliwia korzystanie z ochrony haseł wielu osobom, pracującym na tej samej maszynie.

Mało tego, można podać więcej niż jeden klucz naraz i hasła będą szyfrowane dla wielu odbiorców (dla GnuPG to normalka). Przydaje się to, jeśli z tego samego sejfu korzysta np. cały zespół.

Dodawanie haseł

Żadna byłaby korzyść z sejfu, gdyby nie można było nic do niego włożyć. Hasła dodajemy za pomocą polecenia

pass add <ścieżka/nazwa>

lub 

pass insert <ścieżka/nazwa>

gdzie ścieżka to nazwa katalogu, w którym zostanie umieszczone hasło. Można podać od razu cały szereg podkatalogów, składających się na ścieżkę, pass zadba o to, by kolejne podkatalogi zostały pozakładane.

Polecenia add i insert są równoważne, alias jest dla wygody – co komu łatwiej zapamiętać. Program obfituje w takie podwójne – informatycy powiedzieliby „redundantne” polecenia, ułatwiające zapamiętanie obsługi.

Można podać od razu całą ścieżkę, potrzebne (pod)katalogi zostaną założone automatycznie

Jak widać (a raczej jak nie widać) wpisywane hasło nie jest wyświetlane (jak przy wszystkich hasłach w bashu), żeby nie można było go podejrzeć. Prośba o wpisanie hasła pojawia się dwukrotnie, a  jeśli oba ciągi znaków się nie zgadzają – operacja nie jest wykonywana.

Jeśli nie ma niebezpieczeństwa podejrzenia hasła można do polecenia dodać przełącznik -e (lub --echo) – w tym przypadku wpisywany tekst zostanie wyświetlony na ekranie, a prośba o wprowadzenie pojawi się tylko raz.

Hasła co jakiś czas się zmieniają. Nikt tego nie lubi, ale trzeba je w miarę regularnie zmieniać. Trzeba je również zmienić w menedżerze. Nic prostszego – wystarczy dodać ponownie nowe hasło pod tą samą nazwą. Pass zapyta, czy je nadpisać. Jeśli ktoś chce uniknąć pytania – można dodać przełącznik -f (lub --force) i nadpisać hasło bez konieczności potwierdzania.

Podgląd

Podgląd jest domyślną operacją – nie trzeba podawać dodatkowych poleceń (choć można wpisać show jeśli ktoś lubi być precyzyjny). Jeśli podamy ścieżkę do katalogu w sejfie – zostanie wylistowana jego zawartość bez pytania o hasło (struktura katalogów nie jest szyfrowana). Jeśli natomiast poprosimy program o pokazanie hasła (trzeba podać całą ścieżkę) to zobaczymy standardowe pytanie o hasło do klucza GnuPG i – po jego podaniu – zostanie wyświetlone odszyfrowane hasło.

Wyświetlenie zaszyfrowanej zawartości wymaga podania hasła do klucza GPG

Podawanie tych wszystkich katalogów może się wydawać uciążliwe, jednak pamiętajmy, że korzystamy z dobrodziejstw basha, a podawane nazwy to katalogi. Klawisz tab działa doskonale i nazwy są podpowiadane zazwyczaj po wpisaniu 1-2 liter. 

Zdarza się jednak, że jesteśmy w środowisku, które nie jest bezpieczne – np. na dworcu kolejowym czy w autobusie, gdzie ktoś może stać za nami i podejrzeć hasło. Pass radzi sobie z tym doskonale: wystarczy dodać przełącznik -c (lub --clip) i hasło nie pojawi się na ekranie, za to zostanie skopiowane do schowka. Mamy 45 sekund na wklejenie go w odpowiednie pole (wbrew pozorom 45 sekund to naprawdę kupa czasu). Po tym czasie poprzednia zawartość schowka zostaje przywrócona.

Jest jeszcze jedna ciekawa opcja, która przyda się, gdy chcemy w takim „niebezpiecznym” środowisku przekazać komuś hasło. Otóż operacja wyświetlania hasła przyjmuje również przełącznik -q (lub –qrcode). Spowoduje to wyświetlenie hasła w postaci QRcodu, który można sobie zeskanować telefonem. Nie słyszałem do tej pory, żeby ktoś nauczył się odczytywać QRcody bez dodatkowych urządzeń więc metoda powinna być bezpieczna…

Edycja

Pass umożliwia również edycję haseł za pomocą edytora. Pass używa domyślnego edytora – zależnie od dystrybucji będzie to vim, nano albo coś jeszcze innego. Polecenie

$ pass edit <ścieżka/hasło>

otworzy podane hasło w oknie edytora.

Możemy również wybrać edytor, modyfikując zawartość zmiennej systemowej EDITOR:

$ EDITOR={vim, nano, piko, tilde, geany, gedit, libreoffice}

Tak, tak – można użyć również edytorów okienkowych, a nawet Libreoffice’a…

Autor programu podkreśla, że edytowane pliki są rozszyfrowywane do ramdysku, żeby nie można ich było odzyskać z twardego dysku. Jak bezpieczeństwo to bezpieczeństwo…

Notatki

Ponieważ „hasła” to zwykłe pliki tekstowe, zaszyfrowane za pomocą GnuPG to nie muszą się one ograniczać do tych kilku tajemnych znaków. Pass może przechowywać również większe pliki – na przykład notatki, prywatny pamiętnik itp. Można użyć tej opcji do zapamiętania oprócz hasła także nazwy użytkownika w danym serwisie. Nic jednak nie stoi na przeszkodzie, by w takiej notatce wpisać znacznie więcej informacji.

Pass oferuje przy wprowadzaniu opcję -m (lub --multiline), która powoduje, że po wprowadzeniu pierwszej linii program wciąż oczekuje, umożliwiając dalsze wprowadzanie tekstu. Po wpisaniu całej wiadomości przyciskamy Ctrl+D i tekst jest szyfrowany i zapisywany.

Notatki mogą być dłuższe (w zasadzie bez ograniczeń)

Znacznie wygodniejszym wyjściem jest skorzystanie z opisanej wyżej edycji. W ten sposób znacznie wygodniej edytuje się wielowierszowy tekst. Można nawet wprowadzać w ten sposób nowe hasła – zamiast polecenia add trzeba użyć edit i podać ścieżkę do nowego hasła. Program utworzy nowy plik, który otworzy się w edytorze (ale będzie widoczny na ekranie więc ta opcja np. na dworcu odpada).

Usuwanie haseł

Zdarza się również, że rezygnujemy z korzystania z jakiegoś serwisu. Pass umożliwia również robienie porządków. Korzysta w tym celu z systemowego polecenia rm:

Hasła usuwa się analogicznie jak w systemie operacyjnym

Jeśli usuwamy katalog z podkatalogami konieczne jest – jak w bashu – użycie opcji -rf

Przeszukiwanie sejfu

Po jakimś czasie haseł w sejfie robi się sporo. Część z nich jest już nieaktualna, część w dalszym ciągu wymaga ochrony. Odnalezienie właściwego czasem może być problemem. Pass daje nam dwa narzędzia: przeszukiwanie nazw i przeszukiwanie treści haseł i notatek.

Aby wyszukać nazwy haseł (zazwyczaj nazwy serwisów internetowych lub adresy mailowe) należy użyć:

$ pass find

lub 

$ pass search 

(to znowu alias, można użyć jednego lub drugiego, zależnie od tego, co komu łatwiej zapamiętać).

Łatwo można wyszukać opis

To jeszcze nic niezwykłego. Pass daje również możliwość przeszukania treści zaszyfrowanych plików – mogą to być hasła lub co bardziej przydatne, notatki. Jeśli podkatalogi sejfu były szyfrowane różnymi kluczami to pytanie o hasło pojawi się tyle razy, ile było kluczy. Rzecz jasna przeszukać możemy tylko te, do których znamy hasło. 

No i wyszło szydło z worka…

Pass w sieci

Na codzień używamy różnych menedżerów haseł – te dostępne w postaci wtyczek do przeglądarek są wygodne, bo uzupełniają od razu formularze logowania. Pass może stanowić swoisty backup – każdy serwer może kiedyś odmówić posłuszeństwa albo dostawca dojdzie do wniosku, że jednak zażąda sporej kwoty za swoje usługi. 

Sam Pass nie ma opcji importu, jednak powstał doskonały i wszechstronny importer. Ponieważ ten tekst robi się już długi i nudny to po informacje o imporcie pozwolę sobie odesłać czytelników na stronę twrórcy.

Inną sprawą jest dostępność danych w sieci. Pass, jako skrypt bashowy, jest programem lokalnym. Tak więc sieciowa dostępność naszych haseł jest możliwa tylko przez synchronizację katalogu sejfu z jakimś dyskiem w chmurze. W ten sposób można ten katalog rozpropagować na wiele urządzeń. Na każdym z nich jednak musimy mieć klucze publiczne i prywatne odpowiedzialne za szyfrowanie tego sejfu.

Używanie menedżera haseł jest w XXI wieku nieodzowne. Pass raczej nie jest czymś, co może wyprzeć konkurencję. Jednak możliwość przechowywania notatek, przeszukiwania zaszyfrowanych danych, niezależność od jakichkolwiek komercyjnych rozwiązań powodują, że warto go rozważyć choćby jako rozwiązanie backupowe. A jako – może niekoniecznie zgodnie z intencjami twórcy – miejsce na bezpieczne notatki, sprawdza się znakomicie.

2 komentarze
  1. Warto wspomnieć, że istnieją wtyczki do przeglądarek, które umożliwiają uzupełnianie pól na stronach internetowych korzystając z pass (np dla Firefoksa: https://github.com/passff/passff).

    Odnośnie możliwości sieciowych to autor nie wspomniał, że pass hasła przechowuje w zwykłym repozytorium git (nie tyle “może współpracować z gitem” ile “to jest repozytorium git z zaszyfrowanym hasłami”). Więc wcale nie trzeba żadnego wspólnego dysku w chmurze. Można użyć funkcji do synchronizacji repozytoriów w różnych lokalizacjach wbudowanych w git wraz ze wszystkimi jego dobrodziejstwami.

    1. Dziękuję za (p)odpowiedź 🙂

      Co do gita to nie mogę potwierdzić wersji, że pass korzysta z niego domyślnie. Czysta instalacja na czystym systemie (pass v. 1.7.3) nie utworzyła repozytorium – trzeba to sobie dokonfigurować.

Komentarze są wyłączone.

Poprzedni post

Automatyczny listing po “cd”

Następny post
Screen z Peppermint OS

Peppermint OS 11 już jest

Powiązane posty