Die Login-Verwaltung |
Übersicht |
Unter Login-Verwaltung versuchen wir verschiedenen Varianten aufzuzeichnen, wie einem Benutzer der Zugang zum System ermöglicht werden kann.
Jede Standardinstallation kommt entweder mit einem Konsolen-Login oder einer grafischen Anmeldung daher. Im Fall des tristen Konsolenmodus gelangt bei nahezu allen Distributionen ein Programm namens mingetty zum Einsatz. Aber es existieren weitere Varianten eines initialen »Terminals«, welche das Anmelden am System steuern, Gettys, die ihre Stärken vor allem bei Dial-in- und Modem-Anmeldevorgängen beweisen.
An der grafischen Anmeldung schwingt ein X Display Manager das Zepter. In Zeiten von KDE delegieren die verbreiteten Distributionen die Aufgaben dem kdm, seltener wird man noch dem xdm begegnen und der gdm kontrolliert die Anmeldung an ein RedHat-Linux. In diesem Abschnitt sollen nur wenige einleitende Worte die Mächtigkeit des Konzepts verdeutlichen, die Display-Manager werden im Kapitel Login-Manager tiefgründig diskutiert.
Neben den den Anmeldevorgang steuernden Programmen gebührt der Datei /etc/login.defs eine wichtige Rolle. Wie der Name schon verdeutlicht, steuert sie in gewissem Maße das Verhalten der Startup-Programme.
Letztlich tragen auch /etc/securetty und Passwort zum Gelingen oder Scheitern einer Anmeldung bei.
Die Datei /etc/issue |
Alle im folgenden Abschnitt beschriebenen »Getty« sind in der Lage, vor der Login-Aufforderung eine Mitteilung auf den Bildschirm auszugeben. Den Text dazu beziehen sie, wenn nicht explizit etwas anderes angegeben wurde, aus der Datei /etc/issue. In dieser Datei sind verschiedenste Ersatzdarstellungen zulässig, z.B. um den Rechnernamen oder die aktuelle Zeit einzublenden. Allerdings unterscheiden sich die »Gettys« hinsichtlich der unterstützten Platzhalter. Im Falle von mingetty könnte der Inhalt der Datei so aussehen:
user@sonne> cat /etc/issue Willkommen auf Rechner \n, System \s Version \r! |
Der Willkommensgruß kann diverse Platzhalter umfassen, die den Text in begrenztem Umfang dynamisch anpassen:
\b
\d
\l
\m
\n
\o
\r
\s
\t
\u
\v
Der Platzhalter \b wird nur von Gettys verstanden, die auch serielle Schnittstellen überwachen können.
Bei Verwendung von fbgetty muss anstatt des Backslashs (\) das Prozentzeichen verwendet werden (%d, %u,...). Da fbgetty sich noch in einem frühen Entwicklungsstadium befindet, wird es in der weiteren Diskussion keine Rolle spielen.
Gib mir ein Terminal |
In historischen Zeiten der Mainframes ermöglichten physikalische Terminals den Zugang zu den sündhaft teuren Großrechnern. Ein Terminal war nichts weiter als eine Einheit aus Bildschirm und Tastatur, das über einen seriellen Anschluss am Rechner steckte. Als Software lief im Mainframe ein kleines Programm »Get's a TTY«, - oder kurz als getty bezeichnet, das die Anmeldung steuerte. Der Name »Getty« für Login-Programme ist geblieben, auch wenn physikalische Terminals heute nur noch in der Computerliteratur verbreitet sind.
Gettys tragen dafür Sorge, dass sich überhaupt jemand am System anmelden kann. Dazu überwachen sie serielle Geräte wie Virtuelle Terminals, Textterminals oder auch Modems. Ein Getty bringt die Login-Aufforderung auf den Bildschirm, es fragt nach dem Passwort und startet anschließend das Kommando login, das Benutzerkennzeichen und Passwort verifiziert und den Zugang zum Rechner gestattet bzw. ablehnt.
Gettys gibt es reihenweise und eines ist für einen Einsatzbereich besser geeignet, als es ein anderes vermag. Einige Gettys überwachen einzig die virtuellen Terminals, andere sind auf den Faxempfang spezialisiert. Die verbreiteten Vertreter der Gilde werden wir im folgenden Abschnitt kennen lernen. Zuvor seien die Aufgaben genannt, für dessen Erledigung Gettys herangezogen werden:
I.A. erwartet man von einem Getty, dass es mit den Starten des Systems das ihm zugedachte Device eröffnet und mit einer Login-Aufforderung aufwartet. Des Weiteren sollte es erneut starten, sobald eine Sitzung beendet wurde. Der begangene Weg, dies unter Linux zu erreichen, ist ein entsprechender Eintrag in der Datei /etc/inittab:
user@sonne> cat /etc/inittab | grep respawn ~~:S:respawn:/sbin/sulogin 1:123:respawn:/sbin/mingetty --noclear tty1 2:123:respawn:/sbin/mingetty tty2 3:123:respawn:/sbin/mingetty tty3 4:123:respawn:/sbin/mingetty tty4 5:123:respawn:/sbin/mingetty tty5 6:123:respawn:/sbin/mingetty tty6 #7:2:respawn:+/sbin/init.d/rx tty7 # mo:23:respawn:/usr/sbin/mgetty -s 38400 modem # mo:23:respawn:/usr/lib/fax/faxgetty /dev/modem # I6:23:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6 # I7:23:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7 |
Das obige System ist offensichtlich nur für ein Konsolenlogin konfiguriert (nicht zu Verwechseln mit einer Anmeldung übers Netz mit Programmen wie telnet oder ssh); als Getty gelangt mingetty zum Einsatz. Entscheidend ist die Angabe von respawn, die den Init-Prozess anweist, im Falle der Beendigung einer Sitzung das jeweilige Getty erneut zu starten (ein Getty-Prozess startet per exec ein Loginprogramm, welches wiederum bei erfolgreicher Anmeldung mittels exec bspw. eine Shell lädt).
Selbstverständlich steht es Root zu, ein Getty per Hand zu starten, jedoch kann er einen solchen Befehl nur absetzen, wenn auf dem entsprechenden Device (bspw. /dev/tty2, /dev/ttyS0...) noch kein Getty-Prozess am werkeln ist. Gerade bei von init kontrollierten Geräten genügt der gezielte Abschuss eines existierenden Prozesses herzlich wenig, da init selbst diesen ersetzen wird. Nur eine Änderung der Datei /etc/inittab mit anschließender Benachrichtigung von init (kill -1 1) wird hier weiterhelfen.
agetty |
Das Alternative Linux-Getty ist das einfachste (bedingt) für Einwahlverbindungen geeignete Getty (da es keine Konfigurationsdatei verwendet). Allerdings besitzt es einen entscheidenden Nachteil: Wenn es selbst ein Modemdevice auf eingehende Verbindungen überwacht, ist das Gerät für ausgehende Verbindungen blockiert, selbst wenn noch kein Anruf entgegen genommen wurde. Aus diesem Grund wird agetty vornehmlich auf virtuellen Konsolen oder - wegen der Hardware gesteuerten Flusskontrolle - für den Anschluss eines physikalischen Terminals (Nullmodem...) angewandt.
agetty [Optionen] Baudrate[n] Port [Terminalemulation] |
Die minimalen Argumente für »agetty« sind Port und eine Liste von zulässigen Baudraten. Port steht dabei für den Gerätenamen relativ zum Verzeichnis »/dev« oder für »-«. In letzterem Fall nimmt »agetty« an, dass seine Standardeingabe bereits mit einem Port verbunden ist. Bei Baudrate handelt es sich um eine komma-separierte Liste der unterstützten Geschwindigkeiten. Im Fall einer Modemverbindung startet »agetty« mit dem ersten angegeben Wert. Wird dieser von der Gegenstelle zurückgewiesen (brEAK), schaltet »agetty« auf die nächste Baudrate um.
Die Terminalemulation überschreibt den Wert der Shellvariablen TERM (wird oft initial von init gesetzt).
Des Weiteren werden folgende Optionen unterstützt:
-h
-i
-f Datei
-I Initstring
-l Programm
-m
-n
-t Sekunden
-L
-w
faxgetty |
»Faxgetty« ist Bestandteil des Hylafax-Pakets zum Betrieb eines Faxservers unter Linux. Eine Abhandlung der Thematik findet der interessierte Leser im Kapitel »Netzwerk-Grundlagen« im Abschnitt Allgemeine Dienste, Faxserver.
getty und uugetty |
Beide Programme stammen aus dem Paket »getty_ps«. »getty« dient der Anmeldung an der Virtuellen Konsole oder über ein physikalisches Terminal, während das Programm »uugetty« mit Einwahlleitungen umzugehen vermag.
Da das nachfolgend beschriebene »mgetty« die Funktionen beider Programme nicht nur in sich vereint, sondern mit weiteren Fähgkeiten aufwartet, werden »getty« und »uugetty« heute kaum noch verwendet. Auch wir werden diesen Getty-Vertretern nicht weiter auf den Grund gehen.
mgetty und vgetty |
»Mgetty« ist eine Art Multitalent in Verbindung mit Modems. Es ermöglicht sowohl einen Einwahlserver (Terminalserver oder PPP-Server) als auch den Versand und Empfang von Faxen. Zum Betrieb eines Anrufbeantworters über ein analoges Modem ist »vgetty« aus demselben Paket erforderlich. Beide Gettys werden wir im entsprechenden Abschnitt in Allgemeine Dienste im Kapitel »Netzwerk-Grundlagen« abhandeln.
mingetty |
mingetty verwenden heute alle gängigen Distributionen, um den Anmeldevorgang an den virtuellen Konsolen zu steuern. Der Name deutet den minimalen funktionellen Umfang bereits an, sodass mingetty sich nicht eignet, um bspw. eine serielle Modemleitung anzusprechen.
mingetty erwartet als Argument das Terminal-Device. Optional ermöglicht --long-hostname die Anzeige des vollständigen Rechnernamens vor dem Login-Prompt (Voreinstellung ist der Name vor dem ersten Punkt). --noclear verhindert das Löschen des Bildschirm vor Anzeige der Login-Aufforderung.
In der Voreinstellung verwendet mingetty »/sbin/login« als Login-Programm. Mit --login <Programm« kann ein alternatives Programm und --logopts <Optionen> Parameter an dieses angegeben werden.
mingetty gibt den Inhalt der Datei /etc/issue (falls sie existiert) vor dem Login aus.
Damit sind schon alle Optionen von mingetty genannt; der Präfix ist Programm...
vboxgetty |
»Vboxgetty« ist wichtigster Bestandteil eines auf ISDN basierten Anrufbeantworters. Da dieses Getty nur in Zusammenhang mit einem Anrufbeantworter von Interesse ist, erfolgt die Beschreibung erst im Kapitel »Netzwerk-Grundlagen« unter Allgemeine Dienste, ISDN-Anrufbeantworter.
Die Datei /etc/motd |
Der Inhalt dieser Datei (»Message of the day«) wird vom Kommando login im Anschluss an ein erfolgreichen Anmeldevorgang auf den Bildschirm ausgegeben. So hilft dem Administrator bswp., um allen Benutzern, die Zugang auf diesen Rechner haben, etwas mitzuteilen.
user@sonne> cat /etc/motd Am kommenden Montag wird der Rechner wegen Wartungsarbeiten vorübergehend abgeschalten. Ihre lokal gespeicherten Daten stehen ihnen deshalb nicht zur Verfügung! |
Die Datei /etc/login.defs |
Über diese Datei kann das Login-Verhalten der Shadow-Suite konfiguriert werden. Beachten Sie, dass die Parameter MOtd_FILE, DIALUPS_CHECK_ENAB, LASTLOG_ENAB, MAIL_CHECK_ENAB, OBSCURE_CHECKS_ENAB, PORTTIME_CHECKS_ENAB, CONSOLE, SU_WHEEL_ONLY, CRACKLIB_DICTPATH, PASS_CHANGE_trIES, PASS_ALWAYS_WARN, MD5_CRYPT_ENAB, CONSOLE_GROUPS, ENVIRON_FILE, NOLOGINS_FILE, ISSUE_FILE und PASS_MIN_LEN bei Verwendung von Pluggable Authentication Modules von der dortigen Konfiguration überschrieben werden.
Eine Zeile der Datei beginnt mit dem Konfigurationsparameter. Ihm folgt, durch Leerzeichen oder Tabulator(en) getrennt, der Wert. Ein Doppelkreuz leitet einen Kommentar ein, der mit einem Zeilenumbruch endet.
Die nachfolgende Beschreibung enthält nur eine Auswahl aller Parameter. Im Wesentlichen verzichten wir auf die Erläuterung zu Parametern, die in der derzeitigen Implementierung zwar vorhanden, aber deren Anwendung nicht empfohlen wird.
CHFN_AUTH
CHFN_RESTRICT
CLOSE_SESSIONS
CONSOLE
CRACKLIB_DICTPATH
DEFAULT_HOME
DIALUPS_CHECK_ENAB
ENVIRON_FILE
ENV_PATH
ENV_ROOTPATH
ERASECHAR
FAILLOG_ENAB
FAIL_DELAY
GID_MIN, GID_MAX
ISSUE_FILE
LASTLOG_ENAB
LOGIN_RETRIES
LOGIN_TIMEOUT
MAIL_CHECK_ENAB
MAIL_DIR
MAIL_FILE
MD5_CRYPT_ENAB
MOTD_FILE
NOLOGINS_FILE
OBSCURE_CHECKS_ENAB
PASS_ALWAYS_WARN
PASS_CHANGE_trIES
PASS_MIN_DAYS, PASS_MAX_DAYS
PASS_MIN_LEN, PASS_MAX_LEN
PASS_WARN_AGE
QMAIL_DIR
QUOTAS_ENAB
SULOG_FILE
SYSLOG_SG_ENAB
SYSLOG_SU_ENAB
TTYGROUP
TTYPERM
TTYTYPE_FILE
UID_MIN, UID_MAX
ULIMIT
UMASK
Die Datei /etc/securetty |
Haben Sie schon einmal versucht, unter dem Nutzerkennzeichen root eine Verbindung zu einem Rechner über Telnet zu initiieren? Dann habe Sie schon Bekanntschaft mit der Ausgabe »Keine Berechtigung« gemacht?
Mit der Sicherheit der Administrator-Zugangs steht und fällt die Sicherheit Ihres gesamten Systems. So wird es nicht verwundern, dass man besondere Maßnahmen getroffen hat, um die Möglichkeiten zum Root-Zugang zu erschweren. Die Datei /etc/securetty enthält nun die »vertrauenswürdigen« Terminal, an denen ein Root-Zugang gewährt wird:
user@sonne> cat /etc/securetty tty1 tty2 tty3 tty4 tty5 tty6 |
Obige Konstellation gestattet ein Root-Login nur von einer der virtuellen Konsolen aus. Ein Versuch über ein Pseudo-Terminal (z.B. über das Netz) wird somit immer abgewiesen.
/etc/securetty wird vom Kommando login ausgewertet.
Die Datei /etc/shells |
Wenn ein Benutzer sich erfolgreich am System anmeldet, dann startet die in der Datei /etc/passwd fest gelegte Shell. Ein Benutzer hat nun die Möglichkeit, eine andere so genannte Default-Shell einzustellen.
Diese Loginshell ist nun ein zentraler Angelpunkt, denn alle Prozesse, die ein Benutzer im Laufe der Sitzung kreiert, sind Abkömmlinge des die Shell ausführenden Prozesses. Eine mangelhafte implementierte Shell könnte somit unter Umständen die Stabilität des gesamten Systems gefährden.
Aus diesem Grund werden alle Shells, die ein Benutzer als seine default-Shell verwenden darf, in der Datei /etc/shells zusammengefasst. Eine dort nicht erwähnte Shell wird somit niemals vom Kommando chsh akzeptiert werden. Beachten Sie, dass die Shells mit vollständigem Pfad anzugeben sind:
user@sonne> cat /etc/shells /bin/bash /bin/csh /bin/false /bin/sh /bin/tcsh /usr/bin/csh /usr/bin/ksh /usr/bin/passwd /usr/bin/tcsh /usr/bin/zsh |
X-Login |
Passwort |