SSH wordt veel gebruikt voor remote toegang tot systemen. SSH biedt naast de mogelijkheid om in te loggen met een password, ook de mogelijkheid om in plaats hiervan een public/private keypair te gebruiken en in te loggen met de secret key. Een probleem met secret keys is echter dat je ze echt secret moet houden. Bugs in software zorgen er echter voor dat je als gebruiker de software die je zelf draait niet altijd kan vertrouwen. Omdat die software draait met al je rechten heeft die software ook al jouw rechten inclusief het recht om jouw 'secret' key te lezen. Om deze reden kiezen veel mensen er voor om een passprase op hun secret key te zetten. Als we uit zouden gaan van het 'principle of least authority' (POLA), dan zou bijvoorbeeld een webbrowser helemaal geen rechten moeten krijgen om de private key die SSH gebruikt te benaderen, en zou er dus geen passphrase op de private key nodig zijn. Het MinorFs biedt voorzieningen om dit mogelijk te maken. Het basis idee achter het MinorFs is dat MinorFs 'prive' opslag voorzieningen biedt aan pseudo persistente processen.
De hier volgende beschrijving laat zien hoe MinorFs gebruikt kan worden om SSH zo te gebruiken zodat inloggen met een secret key zonder passphrase mogelijk en verantwoord wordt.
Voordat we kunnen beginnen met het veilig gebruiken van MinorFs moeten we eerst een beheer password zetten voor het MinorFs beheertool '2rulethemall'. Het 2rulethemall programma heeft horere privileges binnen MinorFs dan alle andere programma's. Het heeft namelijk rechten tot alle MinorFs data van de gebruiker. Na validatie van een meegegeven password zal 2rulethemall zijn hoge privilege afstaan aan de gebruiker. De eerste keer dat 2rulethemall gestart wordt zal deze echter geen password kennen, en zal deze om een nieuw password vragen. Voor we van start gaan moeten we dus eerst dat password zetten.
~> 2rulethemallDe eerste stap die we nu moeten nemen is dat we als het waren ssh aan MinorFs moeten voorstellen. We starten ons SSH proces en laten het process toegang zoeken tot MinorFs. MinorFs ziet dan dat er een nieuw 'pseudo persistent process' is, en zal een privé directory aanmaken voor dit process. Als we SSH starten zal SSH om een password vragen. We kunnen SSH op dit punt met CTRL-C gewoon afsluiten.
2rulethemall NO PASSWORD SET !!!New password:thisisabadpassword
~> ssh rob@bogus.polacanthus.net -i /mnt/minorfs/priv/home/id_rsaNu zijn we op het punt aangekomen dat we met het hoge privilege aan de slag moeten. We kunnen nu het best onze history uitzetten om te voorkomen dat er paden met hoge privileges in de history file terecht komen.
Warning: Identity file /mnt/minorfs/priv/home/id_rsa not accessible: No such file or directory.
Password:
Nu dat we privé storage hebben voor ons SSH proces gaan we 2rulethemall gebruiken om ons zelf toegang te verschaffen tot de prive directory van SSH.
~> 2rulethemallWe hebben een directory gevonden, /mnt/minorf/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
2rulethemall password:thisisabadpassword
2rulethemall path=/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e
~> grep ssh /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/*/*.xml
/mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/meta.xml:/usr/bin/ssh
~> attr -g cap /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/Het nu gevonden path is de privé directory van de 1e draaiende (op de zelfde manier gestarte) instantie van SSH. We gaan nu gebruikmakend van dit path een nieuw keypair maken voor SSH. Let op, we voeren dus GEEN passphrase in, want die hebben we niet meer nodig!
a3a0e537fb2b05e06cf653aa1514eca492792ee8/inst1
Attribute "cap" had a 57 byte value for /mnt/minorfs/cap/3d5d3efbf73bb711e7a47f82a44f471fcf77c72e/
a3a0e537fb2b05e06cf653aa1514eca492792ee8/inst1:
/mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd
~> ssh-keygenWe zijn nu klaar met het gebruik van hoge privileges en kunnen de history dus weer gewoon aan zetten vanaf hier.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rob/.ssh/id_rsa):/mnt/minorfs/cap/
586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.
Your public key has been saved in /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.pub.
~> cp /mnt/minorfs/cap/586026bc7cd37de3049711cddc2d60a0824dd3bd/id_rsa.pub ~
Nu hebben we een nieuwe secret key in de prive dir van onze SSH staan, en de public key in onze homedir. We kunnen de public key nu op de reguliere manier naar de server kopiëren:
~> scp id_rsa.pub rob@bogus.polacanthus.net:Ok, klaar, nu kunnen we SSH gebruiken zonder passphase op onze key, en op een veilige manier.
Password:
id_rsa.pub 100% 395 0.4KB/s 00:00~> ssh rob@bogus.polacanthus.net
rob@bogus:~% cp id_rsa.pub .ssh/authorized_keys
rob@bogus:~% cp id_rsa.pub .ssh/authorized_keys2
rob@bogus:~% logout
~>
~> ssh rob@bogus.polacanthus.net -i /mnt/minorfs/priv/home/id_rsaJe kunt met ls controleren dat /mnt/minorfs/priv/home/id_rsa niet toegankelijk, nee zelfs niet zichtbaar is voor een willekeurig ander proces. Alleen de eerste instantie van SSH kan hem benaderen, en zelfs alleen als deze op exact de zelfde manier en natuurlijk door de zelfde gebruiker wordt gestart.
rob@bogus:~%
Door Rob Meijer
Deze posting is gelocked. Reageren is niet meer mogelijk.