Als je je geheime ssh-sleutels waarmee je op je servers inlogt op je laptop opslaat (standaard in ~/.ssh), loop je een aantal risico’s. Elk proces dat onder je gebruiker op de computer draait, heeft immers toegang tot die geheime sleutel. Als de sleutel met een wachtwoord is versleuteld en je maakt gebruik van een ssh-agent, wordt de sleutel ontcijferd zodra je je wachtwoord invoert en kan elk proces onder je gebruiker daarna de ontcijferde sleutel opvragen aan de ssh-agent, zonder dat je dit weet. Bovendien kan malware zich ook als ssh-agent uitgeven, waarna het de ontcijferde sleutel ontvangt.

Een andere oplossing is om je ssh-sleutels niet op je computer op te slaan, maar op een smartcard. Die sluit je dan via USB aan. Elke keer als je op een server inlogt, stelt je smartcardlezer de vraag om de pincode voor je smartcard in te voeren om de geheime sleutel te ontcijferen. Dat gebeurt op de smartcard zelf en je computer krijgt die ontcijferde sleutel nooit te zien, waardoor malware de code niet kan stelen. Veilig, maar je dient dan wel de hele tijd een smartcard en kaartlezer mee te nemen. Bovendien gebeurt de configuratie van de smartcard nog altijd op je computer die je moet vertrouwen. En de gebruikersinterface van een smartcardlezer is vrij beperkt.

De makers van de mobiele app Kryptonite vonden daar iets op. Hun app combineert veilige opslag van de sleutel op een extern apparaat met de vertrouwde gebruikersinterface van een smartphone. De app genereert ssh-sleutels die nooit je smartphone verlaten. Op de servers hoef je niets speciaals te configureren. De communicatie tussen je computer en de app op je smartphone gebeurt via versleutelde en ondertekende push-notificaties en bluetooth-berichten.

Download de app voor Android of iOS. Open de app en druk op Generate key pair. Voer dan je e-mailadres in, dat in het commentaar van de publieke sleutel komt om je te identificeren. Druk op Next.

Installeer daarna op je computer het programma kr, dat als ssh-agent functioneert en zowel Linux als macOS ondersteunt. De eenvoudigste manier voor de installatie verloopt met de volgende opdracht:

curl https://krypt.co/kr | sh

Voer deze opdracht eerst uit zonder de | sh om de inhoud van het installatiescript te bekijken. Je ziet dan welke opdrachten het script uitvoert, zoals het toevoegen van repository’s en sleutels van de ontwikkelaars. Overigens is ook de broncode van kr en de mobiele app volledig gepubliceerd. Daarna ‘pair’ je het programma kr met de app Kryptonite op je telefoon. Dat gaat met:

kr pair

Het programma toont dan een qr-code in je terminalvenster, die je met de app op je telefoon inscant. Je publieke sleutel krijg je te zien met:

kr me

En je uploadt die publieke sleutel naar je server met:

kr add gebruiker@example.com

Daarna gebruik je ssh zoals je gewend bent. Maar zodra je een ssh-opdracht uitvoert om in te loggen op een server die je publieke sleutel heeft, vraagt kr aan Kryptonite om de authenticatie op te zetten met de bijbehorende geheime sleutel op je telefoon. De geheime sleutel dient immers om de ssh-handshake te ondertekenen. Normaal gebeurt dat op je computer, maar kr geeft de te ondertekenen data aan Kryptonite door, die je met de geheime sleutel ondertekent, en alleen de resulterende handtekening terugstuurt naar je computer.

Op je telefoon krijg je dan een notificatie met de vraag of je de toegang tot de ssh-server wilt afwijzen, één keer toestaan of een uur lang toestaan. De app is overigens met meerdere computers te pairen. Met de opdracht kr krijg je uitleg over de mogelijke subopdrachten die kr ondersteunt.
https://krypt.co/faq/

Rekenen met bytes

Bcal is een commandlineprogramma dat allerlei formaten voor getallen kan omzetten, vooral in het domein van opslag. In Ubuntu Zesty Zapus (17.04) is bcal in de standaard repository beschikbaar voor installatie; in eerdere versies voeg je de PPA van de ontwikkelaar toe:

sudo add-apt-repository ppa:twodopeshaggy/jarun

Werk daarna de pakketlijsten bij:

sudo apt update

En installeer het programma:

sudo apt install bcal

Wil je bijvoorbeeld weten hoeveel bytes 8 GiB is, typ dan:

bcal 8 gib

Dan krijg je onder meer te zien dat 8 GiB gelijk is aan 8192 MiB, 8388608 KiB en 8589934592 B. Ook de hexadecimale voorstelling als adres krijg je te zien (0x200000000) en zelfs het LBA-formaat van het adres op een harde schijf of ssd. Maar bcal is ook handig om zowel de binaire als de hexadecimale en decimale voorstelling van een getal op te vragen:

bcal -c 25

Na de optie -c voer je ofwel een decimaal getal in, ofwel een hexadecimaal getal voorafgegaan door 0x, ofwel een binair getal voorafgegaan door 0b.

En ook de CHS- en LBA-adressering van blokken data op een opslagapparaat kun je converteren. Een CHS-adressering naar LBA converteren doe je met de volgende syntax:

bcal -f cC-H-S-MAX_HEAD-MAX_SECTOR

Andersom converteer je als volgt LBA naar CHS:

bcal -f lLBA-MAX_HEAD-MAX_SECTOR

Als er in de adressering waardes gelijk aan 0 zijn, kun je ze weglaten. Een weggelaten MAX_HEAD heeft de standaardwaarde 16 en MAX_SECTOR 63.

https://github.com/jarun/bcal

Reboot nooit meer de verkeerde computer

Als je vaak via ssh op meerdere computers tegelijkertijd ingelogd bent, zal het je wel eens gebeurd zijn dat je per ongeluk de verkeerde computer gereboot hebt. Gelukkig is daar een eenvoudige oplossing voor: het programma Molly-guard. De naam komt overigens van Molly, de peuter die regelmatig op de grote rode resetknop van de IBM 4341 mainframe aan de University of Illinois drukte. De vader van de peuter was daar programmeur en monteerde een geïmproviseerde cover in plexiglas over de knop, zodat zijn dochter de mainframe niet meer kon rebooten.

Molly-guard is een bekend programma en is dan ook in de standaard repository’s van de meeste distributies te vinden. Het vervangt de bestaande scripts voor shutdown, reboot, halt, poweroff, coldreboot, pm-hibernate, pm-suspend en pm-suspend-hybrid en controleert eerst of je je in een interactieve ssh-sessie bevindt voordat het de oorspronkelijke scripts uitvoert.

Als je in een interactieve ssh-sessie de reboot-opdracht uitvoert, vraagt Molly-guard je om de naam van de machine die je wilt rebooten in te voeren. Meestal is dat al genoeg om te beseffen dat je op het punt staat om de verkeerde machine te rebooten, waarna je de reboot-opdracht afbreekt met een druk op Ctrl+C. Als je wel goed zit, voer je uiteraard de naam in, waarna Molly-guard de machine reboot. Je moet dan natuurlijk wel Molly-guard op al je machines installeren.

De configuratie gebeurt in /etc/molly-guard/rc. Zo kun je ervoor zorgen dat Molly-guard altijd om de naam van de machine vraagt, niet alleen als je via ssh bent ingelogd:

ALWAYS_QUERY_HOSTNAME=true

En je kunt zelfs instellen dat je de fully-qualified domain name moet invoeren in plaats van de korte hostnaam:

USE_FQDN=true

Overigens verplaatst Molly-guard de programma’s die het vervangt naar de directory /lib/molly-guard. Als je om de een of andere reden toch rechtstreeks de oorspronkelijke programma’s wilt uitvoeren, is dat dus mogelijk, bijvoorbeeld met:
sudo /lib/molly-guard/reboot