Wachtwoordbeheer voor groepen
Wachtwoordopslag voor groepen: pass
Als PGP en Git je favoriete tools zijn en je meer op de commandline zit dan niet, dan is pass de wachtwoordmanager iets voor jou. De manager is met name erg handig als er een hele groep gebruikers met adminrechten het wachtwoordbeheer moeten delen.
De manier waarop pass werkt is verrassend eenvoudig: hij gebruikt PGP om de wachtwoordgegevens te versleutelen. Elk wachtwoord met alle bijbehorende gegevens, zoals de gebruikersnaam, komt in een apart bestand terecht. De versleuteling van PGP is er sowieso al op ingericht dat meerdere gebruikers de gegevens in principe kunnen ontsleutelen. Dit maakt het delen in groepen een stuk makkelijker. De bestanden kun je een zelfgekozen naam geven en ze kunnen in een directoryboom worden gestructureerd. Naar wens stopt pass deze map in een git-repository. Op die manier kun je dan de wachtwoorddatabase verdelen en synchroniseren via Git.
Voor iedereen die niet op dagelijkse basis met PGP en Git werkt: Pretty Good Privacy (PGP) is vooral bekend van de e-mailversleuteling, maar kan net zo goed bestanden veilig houden. Een gebruiker krijgt een set die uit een privé- en een openbare sleutel bestaat. De privésleutel moet hij goed bewaren en beveiligen met een passphrase, de openbare sleutel geeft hij door. Derden kunnen dan met de openbare sleutel bestanden versleutelen, die de eigenaar van de privésleutel (en passphrase) weer naar leesbare tekst kan omzetten. Gebruikers kunnen verschillende vertrouwensniveaus voor personen instellen. Als er tegenwoordig sprake is van PGP-software, heeft men het over het algemeen over de opensource OpenPGP-implementatie GnuPG, oftewel GPG, die voor alle gebruikelijke platforms beschikbaar is.
Allereerst moet je voor PGP een sleutelpaar genereren. Dat voeren de installatieprogramma's meestal voor je uit. Dit kan enkele minuten duren, omdat de software ervoor moet zorgen dat er ook genoeg willekeur wordt toegepast. Verder hoef je niets te doen. Het vooraf bepaalde vertrouwens- niveau van de eigen sleutel is geschikt voor het gebruikte systeem. Indien je een bestaand sleutelpaar per ex-/import met pass op een ander systeem wilt gebruiken, moet je je volledige vertrouwen aan je sleutel toekennen. Voor het gebruik van pass is het geen vereiste om je eigen sleutels door derden te laten ondertekenen.
Git is ook opensourcesoftware die softwareontwikkelaars gebruiken voor het versiebeheer van bestanden. Linus Torvalds heeft hier de ontwikkeling van geïnitieerd, omdat hij geen passende oplossing kon vinden voor de Linux-kernel. Git helpt ontwikkelaars om veranderingen in detail te kunnen doorgronden. Het werkt met een aantal stappen: bestanden van een zogenaamde repository (beheer- en gebruiksgegevens) kunnen gekopieerd worden, en er kan op verschillende locaties aan worden gewerkt. Vervolgens kunnen de verschillende versies via push en pull weer bij elkaar gezocht en met merge weer tot een geheel worden samengevoegd. SSH of HTTPS zijn bijvoorbeeld geschikt om bestanden op te roepen. Git is beschikbaar voor alle gangbare platforms.
Om hulp vragen
Pass maakt gebruik van PGP en Git. Het start de ondersteunende programma's en laat het versleutelen daaraan over, geheel volgens het traditionele Unix gebruik. Om pass te kunnen gebruiken, zul ook de andere programma's moeten hebben. Linux-distributies met pass-pakketten lossen dat voor je op. Voor distributies die het pakket niet hebben, moet je zelf regelen dat je PGP en Git kunt benaderen. De documentatie van pass helpt je hierbij verder (zie link).
Na de installatie op een Unix-achtig besturingssysteem initialiseer je met
pass init joe@example.com
je toekomstige wachtwoordopslag (Store). Tijdens dit proces moet je aan pass vertellen welke PGP-sleutel het moet gebruiken voor het versleutelen van de wachtwoorden. Je Key-ID of emailadres zijn al genoeg. Het is nu al mogelijk om meerdere PGP-sleutels van de latere gebruikers op te geven.
Hun openbare sleutels moeten daarvoor lokaal beschikbaar zijn. Pass maakt vervolgens de map .password-store aan in je home-directory en slaat de PGP-ID's op in het bestand .gpg-id.
Al je Git voor de synchronisatie wilt gebruiken, moet je dit vervolgens aan pass mededelen:
pass git init
Vanaf nu zal pass bij elke handeling een git commit uitvoeren, of, met andere woorden, het documenteert de wijziging. Met
pass insert web/farceboek
maak je nieuwe wachtwoorden aan. Hiermee maakt pass in .password-store in je home-directory de submap 'web' aan en plaatst daarin een bestand met de naam 'farceboek'. In dit bestand bewaart het dan het wachtwoord dat met de opgegeven PGP-keys versleuteld is, waarnaar ook direct wordt gevraagd. De passphrase van de PGP-sleutel komt hier nog niet in het spel. Deze is pas nodig bij het ontsleutelen. De bestanden die op deze manier worden aangemaakt mogen meer bevatten dan alleen het wachtwoord. Als je met
pass insert -m web/fnl
een nieuw wachtwoord maakt, zorgt de optie -m ervoor dat je meerdere regels in het bestand kunt opslaan. Het is gebruikelijk om op de eerste regel het wachtwoord te schrijven en de daaropvolgende regels voor andere informatie te gebruiken, bijvoorbeeld het bij het wachtwoord behorende e-mailadres of de gebruikersnaam. Op deze manier kunnen ook de antwoorden voor veiligheidsvragen samen met een wachtwoord worden opgeslagen.
De eerste regel kun je vanuit een commandline naar het klembord kopiëren:
pass -c web/fnl
waar deze standaard 45 seconden bewaard blijft. Zonder de optie -c wordt het wachtwoord meteen op de commandline getoond. Via pass kun je ook de Git-versiegeschiedenis oproepen:
pass git log
Indien (pass) zonder parameters wordt uitgevoerd, laat de wachtwoordmanager zien wat er in het geheugen zit. Met het volgende commando wis je de gegevens uit het voorgaande voorbeeld (in de versiegeschiedenis blijven deze gewoon zichtbaar):
pass rm web/farceboek web/fnl
Meer hoef je voor lokaal gebruik niet te weten. Handig om te gebruiken is het commando generate, dat met behulp van de unixtool pwgen random wachtwoorden genereert. De verdere commando's volgen het gebruikelijke stramien van de unix-shells: hernoemen met mv, in een lijst weergeven met ls, doorzoeken met grep, zoeken met find en kopiëren met cp. Met de installatie van pass wordt over het algemeen het bash auto-aanvullen in de wachtwoordopslag geactiveerd, zodat je de directorypaden niet helemaal hoeft te typen, maar met de tab-toets kunt laten aanvullen.
Git activeren
Om een lokale wachtwoordopslag, waarvan via Git de versies worden beheerd, met anderen te delen, moet je het bestand ergens opslaan waar iedereen toegang tot heeft. Richt bijvoorbeeld met git init --bare een lege repository in, kopieer de gegevens daarheen definieer het respository als de oorspronkelijke locatie, bijvoorbeeld met:
pass git remote add origin
https://git.example.com/mypass pass git push --set-upstream
origin master
Dit kun je dan elders vandaan halen:
git clone https://git.examples.com/
mypass ~/.password-store
Om te zorgen dat meerdere gebruikers een gezamenlijke wachtwoordopslag kunnen gebruiken, is het slim om de volgende stappen te nemen (we hebben hier de gebruiker jolla als voorbeeld genomen). Maak eerst in de directorytree de map '.keys' aan, exporteer daarheen de openbare sleutels van alle gebruikers en voeg .keys toe aan de Gitrepository:
mkdir ~/.password-store/.keys gpg --armor --output ~/.password- store/.keys/jolla-public.txt
--export jolla@example.com pass git add .keys pass git commit -m "Nieuwe sleutel"
Bij het importeren van zo'n wachtwoordopslag via git clone naar een andere pc, kun je via
gpg --import ~/.password-store/.keys/*
in een keer de openbare sleutel van de PGPconfiguratie bekendmaken. Na het toevoegen of verwijderen van openbare sleutels, bijvoorbeeld omdat een gebruiker het bedrijf heeft verlaten, moet de gehele wachtwoordopslag opnieuw versleuteld worden. Dit doe je met
pass init joe@example.com
jolla@example.com
Dit werkt alleen wanneer je de opgegeven gebruikers ook al vertrouwt. Indien nodig, onderteken je hun sleutel:
gpg --lsign-key jolla@example.com
Onze beheerders hebben nog een tip gegeven: als je niet alle wachtwoorden met je collega's wilt delen, kunnen aliassen een uitkomst bieden om een tweede bestand met privéwachtwoorden te gebruiken. Dit doe je door in het bestand .bashrc de alias lpass aan te maken:
alias lpass="PASSWORD_STORE_DIR=~/ ..password-store-local
PASSWORD_STORE_GIT=~/ ..password-store-local pass" _lpass(){
PASSWORD_STORE_DIR=~/ ..password-store-local/ _pass
} complete -o filenames -o nospace
-F _lpass lpass
Voor privéwachtwoorden gebruik je dan lpass, voor de werkgerelateerde wachtwoorden gebruik je pass. Beide vullen met de tab-toets de namen aan.
Grens bepalen
Achter pass schuilen enkele honderden regels bash-script. Dat vormt het raamwerk, maar voldoet niet aan alle wensen, zoals het werken met meerdere wachtwoordbestanden en de handelingen die nodig zijn voor het opnieuw versleutelen wanneer je PGPsleutels toevoegt. Naast de uitbreidingen van pass, importeertools voor gegevens uit andere wachtwoordmanagers en diverse clients door de community, ontstaan daardoor ook afgeleide oplossingen die pass als basis gebruiken.
De in Go geschreven doorontwikkeling gopass lijkt veelbelovend (niet te verwarren met een ooit gestarte, maar inmiddels gestagneerde versie met een Windows-GUI). De tool kan direct binaire data verwerken, zoals privésleutels, beoordeelt de kwaliteit van wachtwoorden, vereenvoudigt de synchronisatie en het sleutelbeheer, en kan omgaan met afgeschermde stores die met verschillende GPG-ID's worden versleuteld. Gopass draait ook onder Windows, hoewel de ontwikkelaars nog waarschuwen de tool niet voor praktijkdoeleinden te gebruiken.
Windows wordt als enige platform een beetje snobistisch behandeld. Er zijn apps voor iOS en Android, er is een Apple-script waarmee je op macOS-computers passwachtwoorden makkelijk kunt benaderen. Of de apps net zo overtuigend veilig aanvoelen als pass, moeten gebruikers voor zichzelf uitmaken. Wat de app betreft die voor Qt beschikbaar is, is dat nog oppassen geblazen: deze app toont na het invoeren van de PGPpassphrase alle wachtwoorden. Ze zijn dan ook direct beschikbaar in het werkgeheugen,
(ddu)c wat we eigenlijk erg slordig vinden.