wtmp

UTMP(5)                    Linux-Programmierhandbuch                   UTMP(5)



BEZEICHNUNG
       utmp, wtmp - Anmeldedatensätze

ÃBERSICHT
       #include <utmp.h>

BESCHREIBUNG
       Die Datei utmp gibt Auskunft darüber, wer das System im Moment
       benutzt. Da nicht alle Programme utmp benutzen, kann es jedoch noch
       mehr Systembenutzer geben.

       Warnung: utmp darf nicht allgemein schreibbar sein, weil viele
       Systemprogramme (törichterweise) von der Korrektheit dieser Datei
       abhängig sind. Falls Sie utmp für irgendwelche anderen Benutzer als
       Besitzer und Gruppe schreibbar lassen, riskieren Sie falsche Einträge
       in Systemprotokolldateien und Ãnderungen von Systemdateien.

       Die Datei besteht aus einer Sequenz von utmp-Strukturen. Die Struktur
       wird wie folgt in <utmp.h> deklariert. (Beachten Sie, dass dies nur
       eine von mehreren Definitionen ist, Details hängen von der Version der
       Libc ab.)

           /* 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
                                      init(8)) */
           #define BOOT_TIME     2 /* Zeitpunkt des Systemstarts (in ut_tv) */
           #define NEW_TIME      3 /* Zeit nach Ãnderung der Systemuhr
                                      (in ut_tv) */
           #define OLD_TIME      4 /* Zeit vor Ãnderung der Systemuhr
                                      (in ut_tv) */
           #define INIT_PROCESS  5 /* Prozess von init(8) 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 int e_termination;    /* Abschluss-Status des Prozesses */
               short int 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 (getsid(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]

       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 time(2). Zeichenketten werden mit einem Null-Byte ('\0')
       beendet, wenn sie kürzer als das Feld sind.

       Die ersten Einträge erstellt init(1) bei der Verarbeitung von
       inittab(5). Bevor ein solcher Eintrag verarbeitet wird, räumt init(1)
       utmp auf, indem bei jedem Eintrag, dessen ut_type nicht DEAD_PROCESS
       oder RUN_LVL ist und für den kein Prozess mit der PID ut_pid
       existiert, ut_type auf DEAD_PROCESS gesetzt wird und ut_user, ut_host
       und ut_time mit Null-Bytes gefüllt werden. Falls kein leerer Datensatz
       mit der benötigten ut_id gefunden wird, erstellt init(1) einen neuen.
       Dabei wird ut_id von der Inittab übernommen, ut_pid und ut_time werden
       auf die aktuellen Werte und ut_type auf INIT_PROCESS gesetzt.

       mingetty(8) (oder agetty(8)) findet den Eintrag mittels der PID,
       ändert ut_type zu LOGIN_PROCESS, ändert ut_time, setzt ut_line und
       wartet darauf, dass eine Verbindung hergestellt wird. Nachdem login(1)
       einen Benutzer authentifizieren konnte, ändert es ut_type zu
       USER_PROCESS, ändert ut_time und setzt ut_host sowie ut_addr.
       Abhängig von mingetty(8) (oder agetty(8)) und login(1) könnten
       Datensätze auch mittels ut_line anstatt der vorzuziehenden ut_pid
       gefunden werden.

       Wenn init(1) feststellt, dass ein Prozess beendet wurde, bestimmt es
       den entsprechenden Eintrag in utmp mittels ut_pid, setzt ut_type auf
       DEAD_PROCESS und füllt ut_user, ut_host sowie ut_time mit Null-Bytes.

       xterm(1) und andere Terminal-Emulatoren erstellen direkt einen
       USER_PROCESS-Datensatz und erzeugen die ut_id durch den Suffix des
       Terminalnamens (die Zeichen, die auf /dev/[pt]ty folgen). Falls sie
       einen DEAD_PROCESS-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 DEAD_PROCESS und es wird
       geraten, dass sie ut_line, ut_time, ut_user und ut_host ebenfalls mit
       Nullen füllen.

       telnetd(8) erzeugt einen LOGIN_PROCESS-Datensatz und lässt login(1)
       den Rest erledigen. Nachdem die Telnet-Sitzung beendet ist, räumt
       telnetd(8) utmp in der oben beschriebenen Art und Weise auf.

       Die Datei wtmp zeichnet alle An- und Abmeldungen im System auf. Das
       Format gleicht utmp, mit der Ausnahme, dass ein leerer Benutzername
       eine Abmeldung vom zugehörigen Terminal anzeigt. Weiterhin bedeutet
       der Terminalname ~ mit den Benutzernamen shutdown oder reboot ein
       Herunterfahren bzw. den Neustart des Systems. AuÃerdem protokolliert
       das Paar von Terminalnamen |/} die alte/neue Systemzeit, wenn diese
       durch date(1) geändert wird. wtmp wird durch login(1), init(1) und
       getty(1) (z.B. mingetty(8) oder agetty(8)) verwaltet. Keines dieser
       Programme erstellt die Datei. Somit wird durch Löschen der Datei das
       Aufbewahren der Datensätze deaktiviert.

DATEIEN
       /var/run/utmp
       /var/log/wtmp

KONFORM ZU
       POSIX.1 definiert keine utmp-Struktur, sondern eine namens utmpx mit
       den Spezifikationen der Felder ut_type, ut_pid, ut_line, ut_id, ut_user
       und ut_tv. Die Länge der Felder ut_line and ut_user wird von POSIX.1
       nicht spezifiziert.

       Linux definiert die Strukturen utmpx und utmp als identisch.

   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.

       v7/BSD hat weniger Felder, vor allem fehlt ut_type, 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 ut_id fehlt.

       In Linux (wie auch in System V) wird das ut_id-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 ut_id 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 Null-Bytes 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.

       In System V gibt es die Felder ut_host und ut_addr_v6 nicht.

ANMERKUNGEN
       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 who(1) deaktivieren wollen, darf utmp
       nicht für alle anderen Systembenutzer (world) lesbar sein.

       Das Dateiformat ist maschinenabhängig. Es wird daher empfohlen, dass
       es nur auf der Architektur verarbeitet wird, auf der es erstellt wurde.

       Beachten Sie, dass auf biarch-Architekturen, also Systemen, die sowohl
       32-Bit- und 64-Bit-Anwendungen ausführen können (x86-64, ppc64, s390x
       usw.), ut_tv im 32-Bit-Modus und auch im 64-Bit-Modus die gleiche
       GröÃe hat. Das gleiche gilt für ut_session und ut_time, 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 ut_session zu int32_t geändert wird
       und der von ut_tv zu einer »struct« mit zwei int32_t-Feldern ( tv_sec
       und tv_usec). Da ut_tv womöglich nicht das Gleiche ist wie ein struct
       timeval, wird anstelle des Aufrufs

           gettimeofday((struct timeval *) &ut.ut_tv, NULL);

       die folgende Methode empfohlen, das Feld zu setzen:

           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;

SIEHE AUCH
       ac(1), date(1), init(1), last(1), login(1), logname(1), lslogins(1),
       users(1), utmpdump(1), who(1), getutent(3), getutmp(3), login(3),
       logout(3), logwtmp(3), updwtmp(3)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.02 des Projekts
       Linux-man-pages. 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/.


ÃBERSETZUNG
       Die deutsche Ãbersetzung dieser Handbuchseite wurde von Daniel Kobras
       <kobras@linux.de>, Helge Kreutzmann <debian@helgefjell.de> und Martin
       Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.

       Diese Ãbersetzung ist Freie Dokumentation; lesen Sie die GNU General
       Public License Version 3 oder neuer bezüglich der Copyright-
       Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn Sie Fehler in der Ãbersetzung dieser Handbuchseite finden,
       schicken Sie bitte eine E-Mail an <debian-l10n-
       german@lists.debian.org>.



Linux                         15. September 2017                       UTMP(5)