Provided by: manpages-de_0.5-4.1ubuntu1_all bug

BEZEICHNUNG

       utmp, wtmp - login Einträge

ÜBERSICHT

       #include <utmp.h>

BESCHREIBUNG

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

       Warnung:   utmp  darf  nicht  allgemein  schreibbar  sein,  weil  viele
       Systemprogramme von der Korrektheit dieser Datei abhängig sind.   Falls
       Sie utmp für jeden schreibbar lassen, riskieren Sie falsche Einträge in
       Systemlogdateien und Modifikationen von Systemdateien.

       Die Datei besteht aus einer Sequenz von Einträgen  der  Struktur  utmp,
       die  über  die  Include-Datei deklariert wird.  Das Format von utmp ist
       nicht  strikt  festgelegt,  sondern  hängt  ab  von  der  Version   der
       verwendeten libc.  Das folgende Beispiel ist glibc 2.2.5 entnommen:

              #define UT_UNKNOWN            0
              #define RUN_LVL               1
              #define BOOT_TIME             2
              #define NEW_TIME              3
              #define OLD_TIME              4
              #define INIT_PROCESS          5
              #define LOGIN_PROCESS         6
              #define USER_PROCESS          7
              #define DEAD_PROCESS          8
              #define ACCOUNTING            9

              #define UT_LINESIZE           32
              #define UT_NAMESIZE           32
              #define UT_HOSTSIZE           256

              struct exit_status {
                short int e_termination;    /* Abbruchstatus des Prozesses.  */
                short int e_exit;           /* Rückgabestatus des Prozesses.  */
              };

              struct utmp {
                short int ut_type;          /* Typ des Eintrags */
                pid_t ut_pid;               /* Kennung des Anmeldeprozesses */
                char ut_line[UT_LINESIZE];  /* Gerätename - "/dev/" */
                char ut_id[4];              /* init id or abgek. Leitungsname */
                char ut_user[UT_NAMESIZE];  /* Benutzer login-Name */
                char ut_host[UT_HOSTSIZE];  /* Rechner-Name bei remote login */
                struct exit_status ut_exit; /* Rückgabestatus eines Prozesses, der
                                               als DEAD_PROCESS markiert ist. */
                long int ut_session;        /* Sessionkennung, benutzt, um mehrere
                                               Fenster zu unterscheiden. */
                struct timeval ut_tv;       /* Zeit, zu der der Eintrag erstellt
                                               wurde. */
                int32_t ut_addr_v6[4];      /* Internetadresse des Ursprungsrechners
                                               der Login-Verbindung. */
                char __unused[20];          /* Unbenutzt, reserviert für spätere
                                               Verwendung. */
              };

       Diese  Struktur  enthält den Namen der Gerätedatei für das Terminal des
       Benutzers, seinen Login-Namen und den Zeitpunkt im Format von  time(2),
       an dem er sich eingeloggt hat.  Zeichenketten sind mit ’\0’ terminiert,
       falls sie kürzer als das Feld sind, das sie enthält.

       Die ersten Einträge, die je erstellt werden, entstehen  durch  init(8),
       der  inittab(5)  verarbeitet.   Bevor  ein  solcher Eintrag verarbeitet
       wird, räumt init(8) 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 Eintrag mit der benötigten ut_id gefunden  wird,  erstellt  init
       einen.  Dabei wird ut_id von inittab übernommen, ut_pid und ut_time auf
       die aktuellen Werte und ut_type auf INIT_PROCESS gesetzt wird.

       getty(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(8)  einen  Benutzer
       authentifizieren  konnte,  ändert  es  ut_type  zu USER_PROCESS, ändert
       ut_time und setzt ut_host und ut_addr.  Je nach getty(8)  und  login(8)
       könnten Einträge auch mittels ut_line anstatt der vorzuziehenden ut_pid
       gefunden werden.

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

       xterm(1)  und  andere  Terminal-Emulatoren   erstellen   direkt   einen
       USER_PROCESS- Eintrag und erzeugen die ut_id entweder durch die letzten
       beiden Zeichen von /dev/ttyp%c oder durch p%d bei  /dev/pts/%d.   Falls
       sie  einen  DEAD_PROCESS-  Eintrag  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  mit  Nullen
       füllen.

       xdm(8)  sollte keinen utmp-Eintrag erstellen, weil es kein zugeordnetes
       Terminal gibt.  Falls es trotzdem gemacht wird, werden  Fehlermeldungen
       wie  finger:  cannot  stat  /dev/machine.dom die Folge sein.  Es sollte
       jedoch ein wtmp Eintrag erzeugt werden, genau wie es auch  bei  ftpd(8)
       geschieht.

       telnetd(8)  erzeugt  einen LOGIN_PROCESS-Eintrag und lässt login(8) den
       Rest erledigen.   Nachdem  die  telnet-Sitzung  beendet  ist,  markiert
       telnetd(8) den utmp- Eintrag in der oben beschriebenen Art und Weise.

       Die  wtmp  Datei  zeichnet alle An- und Abmeldungen im System auf.  Das
       Format gleicht utmp, mit der Ausnahme,  dass  ein  leerer  Benutzername
       eine  Abmeldung  vom  angegebenen Terminal anzeigt.  Weiterhin bedeutet
       die Terminalleitung "~" mit dem Benutzernamens "shutdown" oder "reboot"
       ein  Herunterfahren  bzw.   den  Neustart  des Systems und das Paar der
       Terminalleitungen "|"/"}" zeichnet die alte/neue Systemzeit  auf,  wenn
       diese  durch  date(1) geändert wird.  wtmp wird durch login(1), init(8)
       und getty(1) verwaltet.  Keins dieser Programme erstellt die Datei,  so
       dass,  falls  sie  gelöscht  wird,  keine  Aufzeichnungen  mehr gemacht
       werden.

DATEIEN

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

KONFORM ZU

       Linux utmp Einträge sind weder zu v7/BSD noch zu SYSV konform: Sie sind
       eine  Vereinigung  von  beidem.   v7/BSD  hat weniger Felder, vor allem
       fehlt ut_type, was ursprüngliche v7/BSD-ähnliche  Programme  veranlaßt,
       tote   und   login-Einträge   anzuzeigen.    Weiterhin  gibt  es  keine
       Konfigurationsdatei, die jeder Session  eine  Eintragsnummer  zuordnet.
       Dies  wird  in  BSD  gemacht,  weil dort ut_id fehlt.  In Linux (wie in
       SYSV), wird das ut_id Feld eines Eintrags nach dem initialen Setzen nie
       wieder    geändert,    wodurch    diese    Eintragnummer    ohne   jede
       Konfigurationsdatei reserviert wird.  ut_id zu löschen führt  zu  Race-
       Conditions   und   resultiert   in   beschädigten  utmp  Einträgen  und
       potenziellen Sicherheitslöchern.  Die SYSV-Semantik verlangt nicht, die
       oben  angegebenen  Felder  mit  Null-Bytes  zu löschen, aber es erlaubt
       viele Programme zu benutzen, die die  BSD-Semantik  benutzen  und  utmp
       nicht  verändern.   Wie beschrieben, benutzt Linux die BSD-Konventionen
       für Leitungsnamen.  SYSV benutzt nur das Typ-Feld um solche Einträge zu
       markieren  und  zeichnet Meldungen wie "new time" im Leitungs-Feld auf.
       SYSV hat ein Feld mehr, um  den  Exit-Status  von  beendeten  Prozessen
       aufzuzeichnen.   UT_UNKNOWN  scheint  eine Linux Erfindung zu sein.  In
       Linux gibt es keinen  ACCOUNTING  Typ.   SYSV  hat  kein  ut_host  oder
       ut_addr  Feld.   Anders als bei verschiedenen anderen Systemen, wo utmp
       Aufzeichnungen durch Löschen der Datei abgeschaltet werden können, muss
       utmp  bei  Linux  immer  vorhanden  sein.  Falls who(1) verboten werden
       soll, dann kann man utmp einfach nicht allgemein lesbar machen.

EINSCHRÄNKUNGEN

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

FEHLER

       Ein Großteil der obigen Beschreibung basiert auf der  libc5.   Aktuelle
       Versionen könnten inzwischen ein anderes Verfahren verwenden.

SIEHE AUCH

       ac(1),  date(1),  last(1),  login(1),  who(1), getutent(3), updwtmp(3),
       init(8).