safe – een wachtwoord-manager voor de opdrachtregel

Ik heb een aantal verschillende wachtwoord-managers geprobeerd, maar geen enkele beviel. Ik denk dat het komt doordat ze teveel structuur opleggen. Ze willen de informatie opsplitsen in velden, meestal een URL, een gebruikersnaam, een wachtwoord en een commentaar. Maar soms is mijn geheime data niet op die manier gestructureerd. En zelfs als dat wel het geval is, heb ik geen zin me af te vragen welk deel van de informatie in welk veld hoort. Ik wil vrije tekst die ik kan doorzoeken met grep zonder te hoeven bedenken op welk veld ik wil zoeken.

Ik heb daarbij een wachtwoord-manager nodig met een opdrachtregel-interface, want ik kan niet altijd een grafisch programma draaien. Soms werk ik op een computer zonder X-server, soms is het netwerk te langzaam. Maar zolang het niet te langzaam is voor ssh, werkt een programma op de opdrachtregel wel.

Ik heb dus maar besloten mijn eigen wachtwoord-manager te maken. Ik heb hem nu sinds ongeveer acht maanden in gebruik en ik ben nog steeds tevreden. Dat betekent dat hij misschien ook wel nuttig is voor anderen.

Het principe is simpel: Alle geheimen zijn opgeslagen in een tekstbestand dat versleuteld is met gpg (onderdeel van GnuPG). Een programmaatje genaamd safe helpt de file te beheren. Het kan een geheim opzoeken, toevoegen, verwijderen of bewerken.

Wat safe eigenlijk doet is de programma's gpg en grep aanroepen met de juiste argumenten. In andere woorden, het doet niets ingewikkelds. Het kapselt bestaande hulpmiddelen in in een handig gebruikersinterface. En dat is goed om twee redenen: Zonder dit handige gereedschap zou ik waarschijnlijk niet voor elke dienst een ander wachtwoord maken en waarschijnlijk ook geen wachtwoord met willekeurige tekens. En ten tweede is het goed te weten dat de veiligheid en de beschikbaarheid van mijn wachtwoord-kluis niet afhankelijk zijn van dit ene programma. Als safe faalt, kan ik nog altijd mijn wachtwoorden ‘met de hand’ beheren, alleen wat minder makkelijk.

Het lag voor de hand om gpg voor de versleuteling te gebruiken. Mijn mail-programma's (voornamelijk kmail en Apple Mail) gebruikten GnuPG al voor het signeren en versleutelen van e-mail, dus het was al geïnstalleerd en ik had al een geheime sleutel om dingen mee te versleutelen. En gpg heeft de handige eigenschap dat het de sleutel een paar minuten, meestal 20, in het geheugen houdt, zo dat, als je gpg binnen een paar minuten opnieuw gebruikt (direct, of via safe of je e-mail-programma) je niet opnieuw je wachtwoord hoeft in te typen.

Het versleutelde bestand kan verscheidene geheimen bevatten. Elk geheim bestaat uit willekeurige tekst en mag meer dan één regel lang zijn. Maar in het versleutelde bestand wordt elk geheim opgeslagen op één regel, zodat hulpprogramma's zoals grep en sort er goed mee kunnen werken. Dat wordt bereikt door elk regeleinde te vervangen door de twee tekens ‘\n’, en, om ambiguïteit te voorkomen, elke backslash (\) te vervangen door ‘\b’. Dat zijn de enige twee veranderingen in de tekst, zodat het bestand zo nodig ook zonder het programma safe eenvoudig te bewerken is,

Hieronder volgt hoe safe te gebruiken is:

Geheimen weergeven

Om een geheim op te zoeken, geef je een zoekpatroon dat overeenkomt met een deel van het gezochte geheim. Als het bestand bijvoorbeeld de geheime tekst ‘login.example.org marja17 geh3im’ bevat, kun je een opdracht zoals hieronder gebruiken om het te vinden:

safe example.org

Safe zal zo nodig om het wachtwoord vragen om de geheime sleutel te ontgrendelen, zal dan het bestand doorzoeken met grep en het passende geheim (of geheimen) weergeven.

De volgende opties voor grep worden ook ondersteund: -i (negeer het onderscheid tussen hoofd- en kleine letters), -F (gebruik het zoekpatroon als een letterlijke tekst in plaats van een reguliere expressie) en -E (interpreteer het patroon als een uitgebreide reguliere expressie of Extended Regular Expression). Bijvoorbeeld:

safe -i EXAMPLE.org

vindt hetzelfde geheim als het vorige voorbeeld.

Als het patroon met een minteken begint, zet je er twee mintekens (--) en een spatie voor. De -- geeft het einde aan van de opties en het begin van de tekst of het zoekpatroon.

Geheimen opslaan

Om een geheim toe te voegen roep je safe aan met de -1 optie:

safe -a dit is mijn geheim

Het argument moet tussen aanhalingstekens worden gezet als het tekens bevat die een speciale functie hebben voor de shell.

Maar denk eraan dat het niet veilig is een geheim op de opdrachtregel te zetten. Tenzij je daarvoor maatregelen hebt getroffen zal de opdrachtregel in de opdrachten-geschiedenis worden opgeslagen. Dat is een bestand (bijvoorbeeld ~/.bash_history) dat leesbaar is voor de rootgebruiker of voor wie fysieke toegang tot de harde schijf heeft.

De oplossing is het geheim weg te laten:

safe -a

Dit zorgt ervoor dat safe om tekst vraagt met de zin ‘Enter data:’ (‘Geef data in’). Het programma vraagt slechts om één regel tekst. Als het geheim meer regels bevat gebruik je -m:

safe -m

safe zal nu om regels tekst vragen met de zin ‘End data with ^D:’ (‘Beëindig de data met ^D’). Type alle regels in en eindig met een Control-D aan het begon van een regel.

Een geheim verwijderen

Om een geheim te verwijderen gebruik je -d:

safe -d login.example.org marja17 geh3im

De tekst moet precies hetzelfde zijn als het geheim. (Dat wil zeggen, de tekst is geen patroon voor grep.) Het is een goed idee er aanhalingstekens omheen te zetten, om te voorkomen dat de shell speciale tekens interpreteert (‘?’, ‘*’, enz.)

Een geheim wijzigen

Je kunt een bestaand geheim wijzigen met een teksteditor met behulp van de optie -e. Bijvoorbeeld:

safe -e EXAMPLE.org

safe zal alle overeenkomstige geheimen opzoeken en zal een teksteditor openen. Elk geheim eindigt met een regel met de tekst ‘DO NOT EDIT THIS LINE’ (‘Wijzig deze regel niet’). Haal die regel niet weg, anders kan safe het begin en eind van de tekst van een geheim niet meer vinden.

Je kunt de volledige handleiding hier lezen (in het Engels).

Het programma downloaden

Je kunt het programma krijgen door het bestand safe-latest.tgz te downloaden. Het is een gecomprimeerd tar-bestand met drie bestanden erin: safe zelf, dat een Bash-script is; safe.1, de handleiding; en Makefile, die van nut kan zijn om het programma te installeren: Om het programma bijvoorbeeld onder je eigen homedirectory te installeren, voer je de opdracht make install PREFIX=$HOME uit.

Gerelateerde programma's

Om willekeurige wachtwoorden te genereren gebruik ik makepasswd.

Bert Bos
Gemaakt 26 augustus 2018