.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
.\" Fri Apr 2 11:32:09 MET DST 1993
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" .
.\" %%%LICENSE_END
.\"
.\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
.\" Modified 1995-02-26 by Michael Haardt
.\" Modified 1996-07-20 by Michael Haardt
.\" Modified 1997-07-02 by Nicolás Lichtmaier
.\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH UTMP 5 "21. Dezember 2020" Linux Linux\-Programmierhandbuch
.SH BEZEICHNUNG
utmp, wtmp \- Anmeldedatensätze
.SH ÜBERSICHT
\fB#include \fP
.SH BESCHREIBUNG
Die Datei \fIutmp\fP gibt Auskunft darüber, wer das System im Moment
benutzt. Da nicht alle Programme \fIutmp\fP benutzen, kann es jedoch noch mehr
Systembenutzer geben.
.PP
\fBWarnung\fP: \fIutmp\fP darf nicht allgemein schreibbar sein, weil viele
Systemprogramme (törichterweise) von der Korrektheit dieser Datei abhängig
sind. Falls Sie \fIutmp\fP für irgendwelche anderen Benutzer als Besitzer und
Gruppe schreibbar lassen, riskieren Sie falsche Einträge in
Systemprotokolldateien und Änderungen von Systemdateien.
.PP
Die Datei besteht aus einer Sequenz von \fIutmp\fP\-Strukturen. Die Struktur
wird wie folgt in \fI\fP deklariert. (Beachten Sie, dass dies
nur eine von mehreren Definitionen ist, Details hängen von der Version der
Libc ab.)
.PP
.in +4n
.EX
/* nachfolgend die Werte für das Feld ut_type */
#define EMPTY 0 /* Datensatz enthält keine gültigen Daten
(früher unter Linux als UT_UNKNOWN
bekannt) */
#define RUN_LVL 1 /* Wechsel des System\-Runlevels (siehe
\fBinit\fP(1)) */
#define BOOT_TIME 2 /* Zeitpunkt des Systemstarts (in \fIut_tv\fP) */
#define NEW_TIME 3 /* Zeit nach Änderung der Systemuhr
(in \fIut_tv\fP) */
#define OLD_TIME 4 /* Zeit vor Änderung der Systemuhr
(in \fIut_tv\fP) */
#define INIT_PROCESS 5 /* Prozess von \fBinit\fP(1) erzeugt */
#define LOGIN_PROCESS 6 /* Prozessgruppen\-Führer für
Benutzer\-Anmeldung */
#define USER_PROCESS 7 /* normaler Prozess */
#define DEAD_PROCESS 8 /* beendeter Prozess */
#define ACCOUNTING 9 /* nicht implementiert */
#define UT_LINESIZE 32
#define UT_NAMESIZE 32
#define UT_HOSTSIZE 256
struct exit_status { /* Typ für ut_exit, nachfolgend */
short e_termination; /* Abschluss\-Status des Prozesses */
short e_exit; /* Exit\-Status des Prozesses */
};
struct utmp {
short ut_type; /* Typ des Datensatzes */
pid_t ut_pid; /* PID des Anmeldeprozesses */
char ut_line[UT_LINESIZE]; /* Gerätename des Terminals \-
"/dev/" */
char ut_id[4]; /* Suffix des Terminalnamens,
oder inittab(5)\-Kennung */
char ut_user[UT_NAMESIZE]; /* Benutzername */
char ut_host[UT_HOSTSIZE]; /* Rechnername für Anmeldung auf
fernem System oder Kernel\-Version
für Runlevel\-Nachrichten */
struct exit_status ut_exit; /* Exit\-Status eines als
DEAD_PROCESS gekennzeichneten
Prozesses; wird nicht von
Linux\-Version von init(1)
verwendet */
/* Die Felder ut_session und ut_tv müssen bei der Kompilierung
für 32 Bit und 64 Bit dieselbe Größe haben. Dadurch können
Datendateien und gemeinsam genutzter Speicher von 32\-Bit\-
und 64\-Bit\-Anwendungen gemeinsam verwendet werden. */
#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
int32_t ut_session; /* Session ID (\fBgetsid\fP(2)), für
Fensterverwaltung verwendet*/
struct {
int32_t tv_sec; /* Sekunden */
int32_t tv_usec; /* Mikrosekunden */
} ut_tv; /* Zeit\-Datensatz wurde
eingetragen */
#else
long ut_session; /* Session ID */
struct timeval ut_tv; /* Zeit\-Datensatz wurde
eingetragen */
#endif
int32_t ut_addr_v6[4]; /* Internet\-Adresse des fernen
Rechners, IPv4\-Adressen nutzen
nur ut_addr_v6[0] */
char __unused[20]; /* für zukünftige Nutzung reserviert */
};
/* Vorkehrungen für Rückwärtskompatibilität */
#define ut_name ut_user
#ifndef _NO_UT_TIME
#define ut_time ut_tv.tv_sec
#endif
#define ut_xtime ut_tv.tv_sec
#define ut_addr ut_addr_v6[0]
.EE
.in
.PP
Diese Struktur enthält den Namen der Gerätedatei für das Terminal des
Benutzers, seinen Namen bei der Anmeldung und deren Zeitpunkt im Format von
\fBtime\fP(2). Zeichenketten werden mit einem Nullbyte (»\e0«) beendet, wenn
sie kürzer als das Feld sind.
.PP
Die ersten Einträge erstellt \fBinit\fP(1) bei der Verarbeitung von
\fBinittab\fP(5). Bevor ein solcher Eintrag verarbeitet wird, räumt \fBinit\fP(1)
\fIutmp\fP auf, indem bei jedem Eintrag, dessen \fBut_type\fP nicht
\fBDEAD_PROCESS\fP oder \fBRUN_LVL\fP ist und für den kein Prozess mit der PID
\fBut_pid\fP existiert, \fBut_type\fP auf \fBDEAD_PROCESS\fP gesetzt wird und
\fBut_user\fP, \fBut_host\fP und \fBut_time\fP mit Nullbytes gefüllt werden. Falls
kein leerer Datensatz mit der benötigten \fBut_id\fP gefunden wird, erstellt
\fBinit\fP(1) einen neuen. Dabei wird \fBut_id\fP von der Inittab übernommen,
\fBut_pid\fP und \fBut_time\fP werden auf die aktuellen Werte und \fBut_type\fP auf
\fBINIT_PROCESS\fP gesetzt.
.PP
\fBmingetty\fP(8) (oder \fBagetty\fP(8)) findet den Eintrag mittels der PID,
ändert \fIut_type\fP zu \fBLOGIN_PROCESS\fP, ändert \fIut_time\fP, setzt \fIut_line\fP
und wartet darauf, dass eine Verbindung hergestellt wird. Nachdem
\fBlogin\fP(1) einen Benutzer authentifizieren konnte, ändert es \fIut_type\fP zu
\fBUSER_PROCESS\fP, ändert \fIut_time\fP und setzt \fIut_host\fP sowie
\fBut_addr\fP. Abhängig von \fBmingetty\fP(8) (oder \fBagetty\fP(8)) und \fBlogin\fP(1)
könnten Datensätze auch mittels \fBut_line\fP anstatt der vorzuziehenden
\fBut_pid\fP gefunden werden.
.PP
Wenn \fBinit\fP(1) feststellt, dass ein Prozess beendet wurde, bestimmt es den
entsprechenden Eintrag in utmp mittels \fIut_pid\fP, setzt \fIut_type\fP auf
\fBDEAD_PROCESS\fP und füllt \fIut_user\fP, \fIut_host\fP sowie \fIut_time\fP mit
Null\-Bytes.
.PP
\fBxterm\fP(1) und andere Terminal\-Emulatoren erstellen direkt einen
\fBUSER_PROCESS\fP\-Datensatz und erzeugen die \fIut_id\fP durch den Suffix des
Terminalnamens (die Zeichen, die auf \fI/dev/[pt]ty\fP folgen). Falls sie einen
\fBDEAD_PROCESS\fP\-Datensatz für diese ID finden, wird er wieder benutzt,
ansonsten wird ein neuer Eintrag erstellt. Falls möglich, markieren sie vor
Beendigung den Eintrag als \fBDEAD_PROCESS\fP und es wird geraten, dass sie
\fIut_line\fP, \fIut_time\fP, \fIut_user\fP und \fIut_host\fP ebenfalls mit Nullen
füllen.
.PP
\fBtelnetd\fP(8) erzeugt einen \fBLOGIN_PROCESS\fP\-Datensatz und lässt \fBlogin\fP(1)
den Rest erledigen. Nachdem die Telnet\-Sitzung beendet ist, räumt
\fBtelnetd\fP(8) \fIutmp\fP in der oben beschriebenen Art und Weise auf.
.PP
Die Datei \fIwtmp\fP zeichnet alle An\- und Abmeldungen im System auf. Das
Format gleicht \fButmp\fP, mit der Ausnahme, dass ein leerer Benutzername eine
Abmeldung vom zugehörigen Terminal anzeigt. Weiterhin bedeutet der
Terminalname \fB\(ti\fP mit den Benutzernamen \fBshutdown\fP oder \fBreboot\fP ein
Herunterfahren bzw. den Neustart des Systems. Außerdem protokolliert das
Paar von Terminalnamen \fB|\fP/\fB}\fP die alte/neue Systemzeit, wenn diese durch
\fBdate\fP(1) geändert wird. \fIwtmp\fP wird durch \fBlogin\fP(1), \fBinit\fP(1) und
\fBgetty\fP(1) (z.B. \fBmingetty\fP(8) oder \fBagetty\fP(8)) verwaltet. Keines dieser
Programme erstellt die Datei. Somit wird durch Löschen der Datei das
Aufbewahren der Datensätze deaktiviert.
.SH DATEIEN
\fI/var/run/utmp\fP
.br
\fI/var/log/wtmp\fP
.SH "KONFORM ZU"
.PP
POSIX.1 definiert keine \fIutmp\fP\-Struktur, sondern eine namens \fIutmpx\fP mit
den Spezifikationen der Felder \fIut_type\fP, \fIut_pid\fP, \fIut_line\fP, \fIut_id\fP,
\fIut_user\fP und \fIut_tv\fP. Die Länge der Felder \fIut_line\fP and \fIut_user\fP wird
von POSIX.1 nicht spezifiziert.
.PP
Linux definiert die Strukturen \fIutmpx\fP und \fIutmp\fP als identisch.
.SS "Vergleich mit historischen Systemen"
Die Einträge in Linux\-utmp\-Dateien sind weder zu v7/BSD noch zu System V
konform, sondern eine Mischung aus beiden.
.PP
v7/BSD hat weniger Felder, vor allem fehlt \fIut_type\fP, was native
v7/BSD\-Programme veranlasst, tote Einträge und Anmeldeeinträge
anzuzeigen. Weiterhin gibt es keine Konfigurationsdatei, die jeder Sitzung
eine Eintragsnummer zuordnet. Das ist bei BSD der Fall, weil dort das Feld
\fIut_id\fP fehlt.
.PP
In Linux (wie auch in System V) wird das \fIut_id\fP\-Feld nicht mehr geändert,
nachdem ihm ein Wert zugewiesen wurde. Dadurch wird dieser Slot reserviert,
ohne dass eine Konfigurationsdatei erforderlich ist. Das Löschen von
\fIut_id\fP führt zu Race\-Conditions und resultiert in beschädigten Einträgen
in utmp und potenziellen Sicherheitslücken. Die Semantik von System V
erfordert nicht, die oben angegebenen Felder mit Nullbytes zu löschen, aber
ermöglicht die Nutzung vieler Programme, die die BSD\-Semantik verwenden und
utmp nicht verändern. Wie oben beschrieben, wendet Linux die
BSD\-Konventionen für Leitungsnamen an.
.PP
.\" mtk: What is the referrent of "them" in the following sentence?
.\" System V only uses the type field to mark them and logs
.\" informative messages such as \fB"new time"\fP in the line field.
In System V gibt es die Felder \fIut_host\fP und \fIut_addr_v6\fP nicht.
.SH ANMERKUNGEN
.PP
Im Gegensatz zu anderen Systemen, in denen die Protokollierung in utmp durch
Löschen der Datei abgeschaltet werden kann, muss utmp bei Linux immer
vorhanden sein. Wenn Sie \fBwho\fP(1) deaktivieren wollen, darf utmp nicht für
alle anderen Systembenutzer (world) lesbar sein.
.PP
Das Dateiformat ist maschinenabhängig. Es wird daher empfohlen, dass es nur
auf der Architektur verarbeitet wird, auf der es erstellt wurde.
.PP
Beachten Sie, dass auf \fIbiarch\fP\-Architekturen, also Systemen, die sowohl
32\-Bit\- und 64\-Bit\-Anwendungen ausführen können (x86\-64, ppc64, s390x usw.),
\fIut_tv\fP im 32\-Bit\-Modus und auch im 64\-Bit\-Modus die gleiche Größe hat. Das
gleiche gilt für \fIut_session\fP und \fIut_time\fP, wenn Sie vorhanden sind. Dies
ermöglicht den gemeinsamen Zugriff von 32\-Bit\- und 64\-Bit\-Anwendungen auf
Datendateien und gemeinsamen Speicher. Das wird erreicht, indem der Typ von
\fIut_session\fP zu \fIint32_t\fP geändert wird und der von \fIut_tv\fP zu einer
»struct« mit zwei \fIint32_t\fP\-Feldern ( \fItv_sec\fP und \fItv_usec\fP). Da
\fIut_tv\fP womöglich nicht das Gleiche ist wie ein \fIstruct timeval\fP, wird
anstelle des Aufrufs
.PP
.in +4n
.EX
gettimeofday((struct timeval *) &ut.ut_tv, NULL);
.EE
.in
.PP
die folgende Methode empfohlen, das Feld zu setzen:
.PP
.in +4n
.EX
struct utmp ut;
struct timeval tv;
gettimeofday(&tv, NULL);
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
.EE
.in
.\" .PP
.\" Note that the \fIutmp\fP struct from libc5 has changed in libc6.
.\" Because of this,
.\" binaries using the old libc5 struct will corrupt
.\" .IR /var/run/utmp " and/or " /var/log/wtmp .
.\" .SH BUGS
.\" This man page is based on the libc5 one, things may work differently now.
.SH "SIEHE AUCH"
\fBac\fP(1), \fBdate\fP(1), \fBinit\fP(1), \fBlast\fP(1), \fBlogin\fP(1), \fBlogname\fP(1),
\fBlslogins\fP(1), \fBusers\fP(1), \fButmpdump\fP(1), \fBwho\fP(1), \fBgetutent\fP(3),
\fBgetutmp\fP(3), \fBlogin\fP(3), \fBlogout\fP(3), \fBlogwtmp\fP(3), \fBupdwtmp\fP(3)
.SH KOLOPHON
Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts
Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie
Fehler gemeldet werden können, sowie die aktuelle Version dieser Seite
finden sich unter \%https://www.kernel.org/doc/man\-pages/.
.PP
.SH ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von
Daniel Kobras ,
Helge Kreutzmann ,
Martin Eberhard Schauer
und
Mario Blättermann
erstellt.
.PP
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License Version 3
.UE
oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
.PP
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an die
.MT debian-l10n-german@lists.debian.org
Mailingliste der Übersetzer
.ME .