oracular (5) utmp.5.gz

Provided by: manpages-de_4.23.1-1_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 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

       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

VERSIONEN

       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.

STANDARDS

       Linux.

GESCHICHTE

       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⟩.