Provided by: manpages-de_4.21.0-2_all bug

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(1)) */
           #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(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 (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 Nullbyte (»\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
       Nullbytes  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

STANDARDS

       POSIX.1  definiert  keine  utmp-Struktur,  sondern  eine  namens  utmpx  (als   Teil   der
       XSI-Erweiterung)  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 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.

       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)

ÜBERSETZUNG

       Die  deutsche  Übersetzung dieser Handbuchseite wurde von Daniel Kobras <kobras@linux.de>,
       Helge Kreutzmann <debian@helgefjell.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>
       und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.