Druckversion | ||||||||||||||||||||||||||||||||||||||||
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.
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:
Der Willkommensgruß kann diverse Platzhalter umfassen, die den Text in begrenztem Umfang dynamisch anpassen: \b Fügt die Baudrate der aktuellen Verbindung ein
\d Steht für den aktuellen Tag
\l Name des Terminals, an dem mingetty aktiv ist
\m Architektur des Rechner
\n Voller Rechnername (inklusive Domainname)
\o Domainname
\r Betriebssystemversion (Kernelrelease)
\s Betriebssystemname
\t Aktuelle Zeit
\u Anzahl am System angemeldeter Benutzer
\v Betriebssystemversion (Übersetzungszeit des Kernels)
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.
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:
Automatischer Getty-StartI.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:
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.
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.
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 Aktiviert die Hardware gesteuerte Flusskontrolle
-i
Unterdrückt die Ausgabe des Inhalts von /etc/issue.
Dies kann bei Modemverbindungen erforderlich sein, falls die Gegenseite nach
konkreten Zeichenfolgen (Login, Password) sucht.
-f Datei Verwendet die angegebene Datei anstatt /etc/issue
-I Initstring
Zeichenkette (zur Initialisierung eines Modems), die vor dem eigentlichen
Senden an den Port geschickt wird.
-l Programm Alternatives Login-Programm (anstatt /sbin/login).
-m »agetty« versucht die Baudrate anhand der CONNECT-Zeichenkette zu erkennen.
-n
»agetty« fragt nicht nach einem Login-Namen. Sinnvoll ist die
Option bspw, wenn als Login-Programm sulogin genutzt wird.
-t Sekunden Wird innerhalb dieser Zeitspanne kein Nutzername eingegeben, bricht »agetty« ab.
-L
Das zu überwachende Terminal ist eine physikalische/virtuelle Konsole.
»agetty« wartet nicht auf das Verbindungssignal (das bei
Modemverbindungen eine neue Sitzung einleiten würde...).
-w
»agetty« wartet auf den Empfang eines Zeilenumbruchs oder
Wagenrücklaufs, bevor es den Inhalt von /etc/issue an den
Port sendet.
»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.
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« 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 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« 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.
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.
Ü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
Dieser Parameter bestimmt, welche Einträge des GCOS-Feldes der /etc/passwd ein normaler Benutzer mit Hilfe von chfn
ändern darf. Die vier erlaubten Buchstaben sind: f für den
vollständigen Namen, r für die Raumnummer, w für die
Bürotelefonnummer und h für die private Telefonnummer. Fehlt
dieser Parameter, darf einzig Root Änderungen vornehmen.
CLOSE_SESSIONS
Bei Verwendung von Pluggable Authentication
Modules ermöglicht dieser Parameter dem Kommando login, auf das Ende der
Sitzung zu warten und anschließend die PAM-Ressourcen freizugeben (durch
Aufruf von pam_close_session(...)). Die meisten PAM-Module räumen selbst
auf, aber eben nicht alle (u.a. Kerberos).
CONSOLE
Root darf sich nur an den hier erwähnten Terminals anmelden. Neben der
direkten Angabe zulässiger Terminals kann auch der Pfad zu einer Datei
angegeben werden, die die Terminals enthält. Üblich ist /etc/securetty.
CRACKLIB_DICTPATH Pfad zu den Cracklib-Wörterbüchern.
DEFAULT_HOME
Die Werte »true« bzw »false« legen fest, ob ein Benutzer sich anmelden darf,
falls sein Home-Verzeichnis nicht verfügbar ist (bspw. wenn es per NFS
gemountet wird, die Verbindung zum NFS-Server aber nicht hergestellt werden
kann).
DIALUPS_CHECK_ENAB
Eine Datei /etc/dialups kann Terminals enthalten, an denen auf eingehende
Anrufe gewartet wird. Zu jedem Terminal kann ein Passwort festgesetzt werden.
Steht nun der Parameter auf »yes« wird die Abfrage dieses Passworts
vorgenommen.
ENVIRON_FILE Die hier angegebene Datei kann einen Satz vordefinierter Umgebungsvariablen enthalten.
ENV_PATH
Hier wird die initiale Belegung der Variablen PATH vorgenommen. Dieser Eintrag
ist zwingend erforderlich, da noch keine Shell aktiv ist und somit noch kein
Suchpfad für Programme existiert (login muss bspw. die Shell selbst finden).
ENV_ROOTPATH Initiale Belegung von PATH für Root.
ERASECHAR
Das angegebenem Zeichen ermöglicht das Löschen in einem Terminal.
Fehlt die Angabe ist [Backspace] das Löschzeichen.
FAILLOG_ENAB
Bei »yes« werden fehlgeschlagende Anmeldeversuche in der Datei
/var/log/faillog protokolliert.
FAIL_DELAY
Nach einem fehlgeschlagenen Login-Versuch wird die anegegebene Zeitspanne (in
Sekunden) gewartet, bevor ein erneutes Login-Prompt erscheint.
GID_MIN, GID_MAX
Minimaler und maximaler Wert für eine Gruppennummer, die das Kommando groupadd automatisch kalkulieren darf.
ISSUE_FILE Pfadname zu einer Datei, deren Inhalt vor dem Loginprompt angezeigt wird.
LASTLOG_ENAB
Steht hier »yes«, werden nach erfolgreichem Anmelden Informationen zum
Zeitpunkt der letzten Anmeldung und ggf. zu zwischenzeitlichen fehlgeschlagenen
Anmeldeversuchen ausgegeben.
LOGIN_RETRIES
Bei fehlgeschlagenem Anmeldeversuch lässt das Kommando login die
angegebene Anzahl erneuter Versuche zu, bis es sich selbst beendet. Bei lokalen
Login-Konsolen startet i.d.R. ein getty anschließend erneut den
Anmeldevorgang; bei einer Anmeldung übers Netz wird jedoch meist die
Verbindung getrennt.
LOGIN_TIMEOUT
Anzahl Sekunden, die login auf die Eingabe eines Passworts wartet. Nach Ablauf
der Zeitspanne gilt der Versuch als gescheitert.
MAIL_CHECK_ENAB
Steht der Wert auf »yes«, wird ein Benutzer nach dem Login über den
Status seiner Mailbox informiert.
MAIL_DIR
Enthält das Verzeichnis mit den Mailboxen der Benutzer. Das
Benutzerkennzeichen wird automatisch ergänzt. Weicht die Namensgebung von
diesem üblichen Schema ab, muss die Mailbox-Datei mit MAIL_FILE angegeben
werden.
MAIL_FILE
Enthält die Datei mit der Mailbox eines Benutzers. Sie muss im
Heimatverzeichnis des Benutzers liegen; der Pfad zum Heimatverzeichnis wird
automatisch ergänzt. Dieser Parameter sollte nicht gleichzeitig mit MAIL_DIR
verwendet werden.
MD5_CRYPT_ENAB
Bei »yes« wird das Passwort nicht per herkömmlichen DES-Algorithmus
verschlüsselt, sondern mittels eines MD5-Verfahrens. Somit sind
Passwortlängen bis zu 256 Zeichen möglich.
MOTD_FILE
Enthält den vollständigen Pfad zu einer Datei mit der »Nachricht des Tages«. Mehrere Dateien können - per Doppelpunkt
getrennt - angegeben werden. Existieren sie, wird ihr Inhalt nach dem
erfolgreichen Anmelden angezeigt.
NOLOGINS_FILE
Enthält den vollstädnigen Pfad zu einer Datei. Existiert die Datei,
ist einzig Root berechtigt, sich am System anzumelden. Anderen Benutzern wird der
Zugang verwährt, wobei der Inhalt der Datei angezeigt wird. In den meisten
Linux-Konfigurationen wird dasselbe Verhalten durch Anlegen der Datei
/ect/nologin erreicht.
OBSCURE_CHECKS_ENAB
Steht der Wert auf »yes«, wird ein neues Passwort erst akzeptiert, nachdem es
einfachen Test unterzogen wurde (minimale Passwortlänge). Führt Root
das Kommando passwd aus, wird die Prüfung ausgesetzt.
PASS_ALWAYS_WARN
Ändert Root ein Passwort, das einer Überprüfung mittels den
Mechanismen von OBSCURE_CHECKS_ENAB nicht standhalten würde, wird er
gewarnt, falls der Wert des Parameters auf »yes« steht.
PASS_CHANGE_trIES Anzahl Versuche, das Passwort zu ändern, bevor passwd abbricht.
PASS_MIN_DAYS, PASS_MAX_DAYS Minimale/maximale Zeitspanne, die zwischen zwei Passwortänderungen vergehen muss/darf.
PASS_MIN_LEN, PASS_MAX_LEN Mindestlänge bzw. maximale Länge eines Passworts.
PASS_WARN_AGE
Ab so vielen Tagen vor Erreichen der PASS_MAX_DAYS wird ein Benutzer gewarnt,
dass sein Passwort demnächst abläuft.
QMAIL_DIR Gibt den Pfad zum Mailverzeichnis bei Verwendung von qmail an.
QUOTAS_ENAB
Steht hier »yes«, so werden die Werte des GCOS-Feldes der Datei /etc/passwd
verwendet, um Limits den jeweiligen Benutzer zu setzen. Selbstverständlich
wirkt der Eintrag nur, wenn die /etc/passwd die
entsprechenden Angaben auch enthält.
SULOG_FILE
In diese Datei werden Aktivitäten von su aufgezeichnet. Wird die
Datei nicht angegeben, findet keine Protokollierung statt.
SYSLOG_SG_ENAB
Steht hier »yes«, werden alle Aufrufe von sg über den syslogd protkolliert.
SYSLOG_SU_ENAB
Steht hier »yes«, werden alle Aufrufe von su über den syslogd protkolliert.
TTYGROUP
Das Login-Terminal kann mit der angegebenen Gruppe als besitzende Gruppe
gestartet werden. In Verbindung mit TTYPERM lassen sich somit die Rechte
detaillierter steuern.
TTYPERM
Die Rechte, mit denen ein Login-Terminal versehen wird. Fehlt der Eintrag, so
werden die Rechte intern auf 622 gesetzt. Somit sind andere Benutzer
bemächtigt, auf das Terminal zu schreiben (bspw. mit dem Kommando write,
talk...).
TTYTYPE_FILE
Hier wird der Pfad zu einer Datei mit den Terminal-Spezifikationen angegeben.
Diese Datei enthält Zeilen, die einem Terminal einen konkreten Typ
(»Terminalemulation«) zuordnen. So sind lokale Login-Konsolen (tty1..tty6) meist
vom Typ »linux«; Pseudoterminals (ttypX) zur Anmeldung übers Netz
verwenden häufig die »vt100«-Emulation.
UID_MIN, UID_MAX
Minimale bzw. maximale Nummer, die vom Kommando useradd bei der
automatischen Vergabe der UID gewählt werden kann.
ULIMIT Dateien dürfen maximal diese Größe annehmen.
UMASK
Die Voreinstellung der Zugriffsrechte für neu erstellte Dateien und
Verzeichnisse; siehe umask im Abschnitt
Zugriffsrechte.
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:
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.
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:
|
||||||||||||||||||||||||||||||||||||||||
Korrekturen, Hinweise? |