www.Newbie-Net.de

Autologin

Automatisches Einloggen eines Users auf einer Workstation

Autor: Karsten Kruse

Inhalt

Vorwort

Wer eine Linux-Workstation sein Eigen nennt weiss, dass er sich einloggen muss. Dazu werden der Username und das Passwort eingegeben, ein Vorgang der auf einer ohnehin nur von einem benutzen Workstation mitunter lästig und ermüdend werden kann. Zwar gibt es Displaymanager die das automatische Login eines Users erlauben, wie zum Beispiel kdm, doch nicht jeder möchte sich einen solchen installieren; was bringt sonst die schöne, schnelle Hardware wenn der Bootvorgang von einem Displaymanager verlangsamt wird.

Diese Anleitung macht also nur Sinn, wenn der User sich nicht grafisch per xdm/gdm/kdm einloggt sondern auf einem nackten tty (auch bekannt als Konsole) und später die grafische Benutzeroberfläche mit startx startet.

Wichtig: Wenn deine Workstation in einem öffentlich zugänglichem Raum steht, sollte ein automatisierter Login aus Sicherheitsgründen nicht eingestellt werden.

Vorgehensweise

Der Loginvorgang auf einer Linux-Workstation sieht normalerweise folgendermaßen aus:

  1. init liest die Datei /etc/inittab und startet das Programm das für das angegebene tty (auch schlicht Konsole genannt) eingetragen ist. In den meisten Fällen ist das getty oder ein Programm mit ähnlicher Funktion.
  2. getty startet login.
  3. login wartet auf die Eingabe von Usernamen und Passwort eines Benutzers und startet seine Shell aus /etc/passwd mit den Rechten des Users.

Ein einfacher Weg einen User automatisch einzuloggen ist login mit den richtigen Parametern zu starten. Mit -f username wird die Authentifikation übersprungen, login nimmt an, dass der User schon sein Passwort eingegeben hat.

Um das für einen User zu erledigen, könnte man es direkt in /etc/inittab eintragen, je nach init-Version kommt es dann aber zu Problemen mit dem Einlesen der /etc/inittab. Deswegen schreiben wir ein kurzes Wrapper-Programm um das Kommando in /etc/inittab zu vereinfachen. So sieht es aus:

 /*
  *  teclogin.c
  *  Karsten Kruse 2002 - tecneeq(at)tecneeq(dot)de
  *  This code is in the Public Domain
  *
  */

 #include <unistd.h>

 int main() {
   execlp( "login", "login", "-f", "username", 0);
   return 0;
 }

Für username wird der Benutzer eingetragen, der automatisch eingeloggt werden soll. Dieses Programm wird mit folgendem Kommando übersetzt:

 gcc -Os -Wall -static -o /tmp/teclogin_username /tmp/teclogin.c

Das neue Programm /tmp/teclogin_username wird nach /usr/local/sbin kopiert und in /etc/inittab beim gewünschten tty (üblicherweise tty1) als Argument für getty eingetragen. Mein Benutzername ist karsten, die Zeile in /etc/inittab sieht bei meinem Linux normalerweise so aus:

 c1:12345:respawn:/sbin/agetty tty1 linux

Nach dem Eintragen des neuen Programms sieht sie so aus:

 c1:12345:respawn:/sbin/agetty -n -l /usr/local/sbin/teclogon_karsten tty1

Ich befehle meinem getty (in diesem Fall agetty) also einfach nur mit den Parametern -n -l /usr/local/sbin/teclogon_karsten, dass er mein neues Programm starten soll, das neue Programm startet dann login mit den Parametern die benötigt werden um den Benutzer karsten automatisch einzuloggen.

Das wäre alles, nach einem Reboot würde der User auf tty1 angemeldet sein und könnte sofort loslegen.

teclogin_install.sh downloaden und ausführen

Dies wäre nicht Newbie-Net wenn wir nicht einen halbautomatischen Weg hätten um das ganze abzukürzen. Dazu wurde das Script download/teclogin_install.sh geschrieben. Das Script legt die Quelldatei für teclogin_username.c an, kompiliert und installiert es, und schlägt am Ende vor wie die änderung in /etc/inittab aussehen sollte. Das Script sollte als root aufgerufen werden, der einzige Parameter den das Script kennt ist der Username der automatisch eingeloggt werden soll.

Hier sind die Kommandos die nötig wären um das Script auszuführen (nach dem downloaden ausführbar machen, root-Rechte erlangen, Script starten):

 user@host:~> chmod +x teclogin_install.sh
 user@host:~> su
   Password:
 root@host:~> ./teclogin_install.sh karsten

Schliesslich rufen wir noch einen Editor auf um die vorgeschlagene Zeile die teclogin_install.sh ausgegeben hat in /etc/inittab einzutragen:

 root@host:~> mcedit /etc/inittab

Das wars, wenn ich teclogin_install.sh richtig geschrieben habe und du die vorgeschlagene Zeile in /etc/inittab richtig eingetragen hast sollte alles fertig sein und beim nächsten Reboot wird der Benutzer automatisch eingeloggt. Sollte das nicht der Fall sein, oder du willst du den Benutzer nicht mehr automatisch einloggen, gehst du auf ein anderes tty (z.B. mit der Tastenkombination STRG+ALT+2) und machst die Änderung in /etc/inittab rückgängig.

Reboot und ein Tipp

Nach eine Reboot sollte der Benutzer jetzt automatisch eingeloggt werden. Wenn du, wie ich, die grafische Benutzeroberfläche mit startx starten würdest, könntest du das in eines deiner Shell-Startscripte eintragen.

Ich benutze bash als Loginshell und ein guter Platz um die grafische Benutzeroberfläche zu starten wäre die Datei ~/.bashrc. Da wir nur startx ausführen wollen wenn wir automatisch eingeloggt werden müssen wir eine Abfrage bauen. Diese Abfrage vergleicht die Ausgabe von stty mit einem Wert den wir ermitteln indem wir von Hand einmal tty in der Konsole aufrufen auf der wir automatisch eingeloggt wurden. Die Ausgabe könnte so aussehen:

 user@host:~> tty
 /dev/vc/1

Mein Eintrag am Ende von ~/.bashrc würde dann folgendermassen aussehen:

 # Folgendes nur ausführen wenn wir uns interaktiv eingeloggt haben
 if [ "$PS1" ] ; then
   # Folgendes nur ausführen wenn die Variable $DISPLAY nicht gesetzt
   # ist und das tty "/dev/vc/1" ist
   if [ -z "$DISPLAY" ] && [ $(tty) = /dev/vc/1 ]; then
     startx
   fi
 fi

Rebooten wir jetzt, sollte der Benutzer automatisch eingeloggt werden und es startet sofort die grafische Benutzeroberfläche.

Nachwort

Ich hoffe alles hat bei dir so reibungslos funktioniert wie bei mir. Bei Problemen oder Fragen könnt ihr wie üblich den Chat, den Newsserver, das Forum oder die Mailingliste im Newbie-Net besuchen.

Karsten Kruse (tecneeq(at)tecneeq(dot)de) live aus dem Land des binären Weihwassers für www.Newbie-Net.de und www.Pro-Linux.de ... ich gebe zurück ins Studio ;)