Login
Immer anmelden
SSL Login

 
Newsletter
Werbung
Shopping
International Shopping
 
 


Yatego Shopping bei über 10000 Händlern und über
3 Mio. Artikel.


Linux

:

Linux-Bücher

Handy
Shop

  und Computer.

Viele Services

:

Apple iPad Reader,


Ratgeber,

 

Techniktops,

 

Yatego Clicks

  & über 3000

Gutscheine.

 
Mo, 13. August 2007, 00:00

Automatisches Login per USB-Stick

Login für mehrere Benutzer mit pamusb

Ziel dieses Artikels ist es, sich durch einen USB-Stick zu identifizieren und danach automatisch eingeloggt zu werden, inklusive Start der grafischen Benutzeroberfläche.

Skript zur Überprüfung

Das Skript heißt loginusb2 und wird in /usr/local/bin angelegt. Warum es loginusb2 heißen muss, wird gleich erklärt.

Das Skript sieht folgendermaßen aus (hier mit einem Beispiel für die Display-Manager KDM und GDM). Es steht als loginusb2_normal zum Download bereit.

#!/bin/bash
IFS="
"
Y=1
while [ $Y == 1 ]; do
 for X in `grep "<user id=" /etc/pamusb.conf | cut -d "\"" -f 2 | cut -d "\"" -f 1`;
 do
 if &#91; $X != "root" &#93; && &#91; $X != "scox" &#93;; then
 pamusb-check --quiet $X
 if &#91; $? == 0 &#93;; then
 Y=2
 killall S99zloginusb
 kill `pidof fbi`
 <strong>#Beispiel-Konfiguration für den Display-Manager kdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginLocked=\).*/\1false/" /etc/kde3/kdm/kdmrc
 /etc/init.d/kdm start &
 <strong>#Beispiel-Konfiguration für den Display-Manager gdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/1$X/" /etc/gdm/gdm.conf-custom
 sed -i "s/\(^AutoLoginEnable=\).*/1true/" /etc/gdm/gdm.conf-custom
 /etc/init.d/gdm start &
 else
 sleep 2
 fi
 fi
 done;
done;

Dieses Skript macht Folgendes: Zuerst wird die Datei /etc/pamusb.conf geöffnet und die dort registrierten Benutzer werden ausgelesen. Jetzt wird mit Hilfe des Programmes pamusb-check getestet, ob einer der registrierten Benutzer seinen USB-Stick an den Computer angeschlossen hat. Dies wird durch eine Endlosschleife immer wieder geprüft.

Hat sich dann ein Benutzer erfolgreich identifiziert, wird der Display-Manager vorbereitet. D.h. in der Konfigurationsdatei wird der Autologin aktiviert und der Autologin Benutzer eingetragen. Letztendlich wird der Display-Manger gestartet und das Skript beendet sich.

Nicht vergessen, die Datei ausführbar zu machen: chmod +x /usr/local/bin/loginusb2

Nun ergibt sich ein Problem: Wenn das Skript zuerst gestartet wird, kann man fbi zum Anzeigen des Bildes erst starten, wenn das Skript fertig ist. Wenn das Skript fertig ist, ist der Login aber schon vollzogen, das Bild also sinnlos.

Andersherum ist es ähnlich. Da fib ein Programm ist, wird das nachfolgende Programm in der init-Liste erst gestartet, wenn man fib beendet. Auch das ist nicht Sinn der Sache. Also werden das Login-Skript und fbi über ein zweites Skript im Hintergrund gestartet (das muss auf diese Weise gelöst werden, da man init-Skripte nicht im Hintergrund starten kann).

Dafür legen wir die Datei /usr/local/bin/loginusb anlegen, machen sie ausführbar und schreiben folgendes hinein:

#!/bin/bash
/usr/local/bin/loginusb2 &
while true; do
 fbi --noverbose /root/loginusb.jpg
done

Die while-Schleife fängt den Fall ab, dass ein Benutzer fbi mit [q] beendet. In dieser Situation wird es einfach wieder neu gestartet.

Damit das Skript beim Starten ausgeführt wird, muss es in das init-System integriert werden (das z nach S99 ist wichtig, damit das Skript als letztes gestartet wird!):

ln -s /usr/local/bin/loginusb /etc/rc2.d/S99zloginusb

Ohne Framebuffer

Das Ganze geht auch ohne Framebuffer, wenn man ein anderes Aussehen bevorzugt. Zuerst muss der Link /etc/rc2.d/S99zloginusb auf loginusb2 zeigen und nicht auf loginusb:

ln -s /usr/local/bin/loginusb<b>2</b> /etc/rc2.d/S99zloginusb

Zweitens muss loginusb2 bearbeitet werden. Da fbi nicht mehr gestartet wird, muss es auch nicht beendet werden. Außerdem sollte noch eine kurze Nachricht erscheinen, damit der Benutzer weiß, was passiert. Das Resultat steht als loginusb2_ohne_fb zum Download bereit.

#!/bin/bash
IFS="
"
Y=1
clear
echo "Willkommen"
echo "Bitte identifizieren Sie sich mit Ihrem USB-Stick!"
echo "Warte auf USB-Stick..."
while &#91; $Y == 1 &#93;; do
 for X in `grep "<user id=" /etc/pamusb.conf | cut -d "\"" -f 2 | cut -d "\"" -f 1`;
 do
 if &#91; $X != "root" &#93; && &#91; $X != "scox" &#93;; then
 pamusb-check --quiet $X
 if &#91; $? == 0 &#93;; then
 Y=2
 
 echo "USB-Stick identifiziert. Sie werden angemeldet..."
 
 <strong>#Beispiel-Konfiguration für den Display-Manager kdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginLocked=\).*/\1false/" /etc/kde3/kdm/kdmrc
 /etc/init.d/kdm start &
 <strong>#Beispiel-Konfiguration für den Display-Manager gdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/1$X/" /etc/gdm/gdm.conf-custom
 sed -i "s/\(^AutoLoginEnable=\).*/1true/" /etc/gdm/gdm.conf-custom
 /etc/init.d/gdm start &
 else
 sleep 2
 fi
 fi
 done;
done;

Natürlich muss der Eintrag vga= wieder aus der Kernel-Zeile raus, ebensowenig braucht man für diese Methode das Programm fbi.

Ubuntu/Kubuntu: Konsolen manuell starten

Zuerst müssen die Konsolen aus upstart entfernt werden. Dazu werden die Startskripte einfach in den Backupordner unter /root/backup verschoben:

mv /event.d/tty1 /root/backup
mv /event.d/tty2 /root/backup
mv /event.d/tty3 /root/backup
mv /event.d/tty4 /root/backup
mv /event.d/tty5 /root/backup
mv /event.d/tty6 /root/backup

Nun werden die Konsolen nicht mehr automatisch gestartet. Da natürlich nicht auf sie verzichtet werden kann, müssen sie manuell gestartet werden. Dies geschieht in /usr/local/bin/loginusb2, das hier als loginusb2_mit_getty zum Download bereitsteht.

#!/bin/bash
IFS="
"
Y=1
while &#91; $Y == 1 &#93;; do
 for X in `grep "<user id=" /etc/pamusb.conf | cut -d "\"" -f 2 | cut -d "\"" -f 1`;
 do
 if &#91; $X != "root" &#93; && &#91; $X != "scox" &#93;; then
 pamusb-check --quiet $X
 if &#91; $? == 0 &#93;; then
 Y=2
 killall S99zloginusb
 kill `pidof fbi`
 <strong>getty 38400 tty1 &</strong>
 <strong>getty 38400 tty2 &</strong>
 <strong>getty 38400 tty3 &</strong>
 <strong>getty 38400 tty4 &</strong>
 <strong>getty 38400 tty5 &</strong>
 <strong>getty 38400 tty6 &</strong>
 
 <strong>#Beispiel-Konfiguration für den Display-Manager kdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^NoPassEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc
 sed -i "s/\(^AutoLoginLocked=\).*/\1false/" /etc/kde3/kdm/kdmrc
 /etc/init.d/kdm start &
 <strong>#Beispiel-Konfiguration für den Display-Manager gdm:</strong>
 sed -i "s/\(^AutoLoginUser=\).*/1$X/" /etc/gdm/gdm.conf-custom
 sed -i "s/\(^AutoLoginEnable=\).*/1true/" /etc/gdm/gdm.conf-custom
 /etc/init.d/gdm start &
 else
 sleep 2
 fi
 fi
 done;
done;

Jetzt sollten die Konsolen erst starten, wenn die Identifikation durch den Benutzer erfolgreich war!

Danksagungen und letzte Hinweise

Nun sollte eigentlich alles funktionieren.

Bedanken möchte ich mich an dieser Stelle bei folgenden Personen, die mir beim Erstellen dieses Artikels geholfen haben: Gerrit, yaccin und mreczio!

Der ursprüngliche und möglicherweise aktuellere Artikel liegt auf virtualpixel.de. Falls noch irgendwelche Fragen bestehen, einfach die Kommentarfunktion dort nutzen oder mir eine E-Mail schicken!

Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Forum
Neue Nachrichten