Single SignOn onder Linux

Single signon veilig inloggen door je password maar eenmalig te gebruiken

Er wordt in de bedrijfswereld vrij veel over gesproken, Single SignOn oftewel eenmalig inloggen. Het idee is dat je dagelijks toegang moet krijgen tot diverse systemen en informatiebronnen, bijvoorbeeld je e-mail, de agenda, en meestal nog een aantal servers. Als die systemen hebben een eigen username/password systeem en het is aan jou om die allemaal te onthouden. Vaak stellen mensen initieel overal hetzelfde wachtwoord in (de username of gebruikersnaam wordt vaak uitgereikt door de systeembeheerder en kan je zelf niet bepalen). Maar soms moet je dan bij het ene systeem om de 3 maanden je wachtwoord veranderen terwijl dit op een ander systeem nooit meer hoeft. Bovendien wordt je van dat eindeloos inloggen ook niet blij.

Dus wat willen we: Single SignOn, ‘s ochtends eenmaal inloggen en dat geldt dan voor alle systemen totdat een bepaald tijd verstreken is en je opnieuw moet inloggen.

Onder Linux is dit al erg lang mogelijk. Het beste systeem hiervoor is waarschijnlijk Kerberos vernoemd naar de driekoppige hellehond uit de griekse mythologie. Voor thuisgebruik is Kerberos wat overdreven en kan je min of meer hetzelfde effect bereiken met ssh (Secure Shell) en het bijbehorende ssh-agent.
Ssh is een bijzonder krachtig stuk gereedschap, op het eerste gezicht lijkt het misschien alleen een veilige vervanging voor telnet, maar met de juiste commandline opties kan je het gebruiken als vpn-client (door tunnels te definieren) en met scp (secure copy) kan je ftp vervangen.

Ssh login kan werken met username/password authenticatie (met het verschil t.o.v. telnet dat de gegevens niet leesbaar over het netwerk worden gestransporteerd, maar worden beschermd door encryptie). Maar het ondersteund ook PKI. PKI staat voor Public Key Infrastructure en werkt met een publieke en een privé sleutel die bij elkaar horen. De publieke sleutel mag iedereen weten en de bijbehorende privé sleutel moet geheim blijven. Als iemand iets versleuteld met jou publieke sleutel, dan kan jij als bezitter van de bijbehorende privé sleutel als enige het bestand weer leesbaar maken. Als jij onder een bericht (b.v. een e-mail) een digitale handtekening zet met je privé sleutel, dan kan iedereen met jou publieke sleutel valideren dat de handtekening ook echt van jou afkomstig is.

Om ssh in combinatie met PKI te gebruiken moet je eerst een sleutelpaar genereren, dat gaat als volgt:

[~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): **********
Enter same passphrase again: **********
Your identification has been saved in /home/beekman/.ssh/id_dsa.
Your public key has been saved in /home/beekman/.ssh/id_dsa.pub.
The key fingerprint is: 23:c5:9c:7c:79:7c:f2:c9:3f:d7:63:53:79:0d:8a:b3 ewald@oiepoie.nl

Nu moeten we ervoor zorgen dat je publieke sleutel terecht komt op alle systemen waarop je voortaan zonder extra inloggen wilt kunnen werken. N.B. je moet al een account hebben op deze systemen, het enige wat we willen bereiken is username/password authenticatie vervangen door onze single signon.

Om te publieke sleutel op de andere computer neer te zetten gebruien we nogmaals ssh om de verbinding op te bouwen. Dit kan met een “oneliner”, alleen moeten we nu nog even met ons wachtwoord authenticeren:


[beekman@pandora ~]> cat ~/.ssh/id_dsa.pub | ssh beekman@vortex 'cat - >> ~/.ssh/authorized_keys'
beekman@vortex's password:

We kunnen nu al checken of PKI authenticatie via ssh werkt, het vraagt nu nog wel om een wachtwoord omdat je privé sleutel is beschermd met een wachtwoord (anders zou bijvoorbeeld de root gebruiker op je huidige computer er misbruik van kunnen maken, want die kan immers bij ieder bestand wat op de computer aanwezig is).


[beekman@pandora ~]> ssh beekman@vortex
Enter passphrase for key '/home/beekman/.ssh/id_dsa':
Last login: Thu Jan 12 20:22:16 2006 from 18-196.surfsnel.dsl.internl.net

De laatse stap is om het programma ssh-agent altijd op te starten als je inlogt op het systeem waar vandaan je werkt en die toegang te geven tot je privé sleutel. Als er vervolgens gevraagd wordt om deze sleutel omdat je op een andere computer wilt inloggen of omdat je een bestand wilt kopieeren met scp dan zal ssh-agent dit voor je afvangen.
Het opstarten van ssh-agent gaat vanuit het .login bestand dat eenmalig uitgevoerd wordt als je voor het eerst inlogd op je computer. Dit is de keer dat je je wachtwoord moet intypen om je privésleutel vrij te geven voor ssh-agent. De scripts hier werken voor de csh en tcsh shells.


[beekman@pandora ~]> cat .login

[code]
set sshAgent=/usr/bin/ssh-agent
set sshAgentArgs=”-c”
set tmpFile=exportAgentEnv
if ( -x “$sshAgent” ) then
if ( ! $?SSH_AUTH_SOCK ) then
$sshAgent $sshAgentArgs | head -2 > $tmpFile
source $tmpFile
rm $tmpFile
echo “ssh agent started [${SSH_AGENT_PID}]”
ssh-add
endif
endif
[/code]

Met een klein .logout scriptje zorg je dat ssh-agent ook weer netjes afgesloten wordt bij het uitloggen:

[beekman@pandora ~]> cat .logout

[code]
if ( $?SSH_AGENT_PID ) then
echo “killing ssh agent [${SSH_AGENT_PID}]”
ssh-add -D
kill $SSH_AGENT_PID
unset SSH_AGENT_PID
unset SSH_AUTH_SOCK
endif
[/code]

Nu is het een kwestie van uitloggen en inloggen en je wachtwoord ingeven.

Even checken of ssh-agent ook echt draait:


[beekman@pandora ~]> ps -f | grep ssh-agent
beekman   5863  5259  0 13:56 pts/1    00:00:00 grep ssh-agent

En het gebruik testen, bijvoorbeeld door wat heen en weer te kopieeren (pandora is mijn laptop waarop ik ben ingelogd, vortex is de server die ver weg staat):


[beekman@pandora ~]> touch test.txt
[beekman@pandora ~]> scp test.txt vortex:
test.txt                          100%    0     0.0KB/s   00:00
[beekman@pandora ~]> ssh vortex "ls -l test.txt"
-rw-r--r--  1 beekman beekman 0 Apr  2 14:46 test.txt
[beekman@pandora ~]> rm -f test.txt
[beekman@pandora ~]> scp vortex:test.txt .
test.txt                          100%    0     0.0KB/s   00:00
[beekman@pandora ~]> ls -l test.txt
-rw-r--r--  1 beekman beekman 0 2006-04-02 13:59 test.txt

en natuurlijk door in te loggen:


[beekman@pandora ~]> ssh vortex
Last login: Sun Apr  2 13:24:51 2006 from 18-196.surfsnel.dsl.internl.net
[beekman@vortex ~]>

Problemen?
Default staat in de systeemwijde instellingen voor sshd (de secure shell daemon) Public Key Authentication aan. Het kan natuurlijk zijn dat de systeembeheerder dit heeft uitgezet. Je kan met ssh erg goed zien wat er mis gaat als er problemen zijn door de optie -v mee te geven. Ssh laat dan stap voor stap zien wat er gebeurd. Je kan meerdere keren -v achter elkaar zetten om nog meer info te zien (tot drie keer aan toe.

Windows
De beste windows ssh client is Putty.
Als je veel heen en weer wilt kopieeren dan is winscp een aanrader. Beide zijn gratis te gebruiken.