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

BEZEICHNUNG

       utmp, wtmp - login Eintrge

BERSICHT

       #include <utmp.h>

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 5 utmp

       eingeben.

BESCHREIBUNG

       Die utmp Datei gibt Auskunft darber, 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 abhngig sind.  Falls
       Sie utmp fr jeden schreibbar lassen, riskieren Sie falsche  Eintrge  in
       Systemlogdateien und Modifikationen von Systemdateien.

       Die Datei besteht aus einer Sequenz von Eintrgen der Struktur utmp, die
       ber die Include-Datei deklariert wird.  Das Format von utmp  ist  nicht
       strikt  festgelegt,  sondern  hngt  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;           /* Rckgabestatus des Prozesses.  */
              };

              struct utmp {
                short int ut_type;          /* Typ des Eintrags */
                pid_t ut_pid;               /* Kennung des Anmeldeprozesses */
                char ut_line[UT_LINESIZE];  /* Gertename - "/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; /* Rckgabestatus 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 fr sptere
                                               Verwendung. */
              };

       Diese Struktur enthlt den Namen der  Gertedatei  fr  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 krzer als das Feld sind, das sie enthlt.

       Die  ersten  Eintrge,  die je erstellt werden, entstehen durch init(8),
       der inittab(5) verarbeitet.   Bevor  ein  solcher  Eintrag  verarbeitet
       wird,  rumt  init(8)  utmp  auf, indem bei jedem Eintrag dessen ut_type
       nicht DEAD_PROCESS oder RUN_LVL ist und fr 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 gefllt werden.   Falls  kein  leerer
       Eintrag  mit  der  bentigten  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)
       knnten Eintrge 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 fllt 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 fr diese  ID  finden,  wird  er  wieder
       benutzt,  ansonsten  wird  ein  neuer  Eintrag erstellt.  Falls mglich,
       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
       fllen.

       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  lsst  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) gendert wird.  wtmp wird  durch  login(1),  init(8)
       und  getty(1) verwaltet.  Keins dieser Programme erstellt die Datei, so
       dass, falls sie gelscht wird, keine Aufzeichnungen mehr gemacht werden.

DATEIEN

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

KONFORM ZU

       Linux  utmp Eintrge 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 ursprngliche v7/BSD-hnliche Programme veranlat, tote
       und   login-Eintrge    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    gendert,    wodurch    diese    Eintragnummer    ohne    jede
       Konfigurationsdatei  reserviert  wird.   ut_id  zu lschen fhrt zu Race-
       Conditions und resultiert in beschdigten utmp Eintrgen und potenziellen
       Sicherheitslchern.    Die   SYSV-Semantik   verlangt  nicht,  die  oben
       angegebenen Felder mit Null-Bytes zu  lschen,  aber  es  erlaubt  viele
       Programme  zu  benutzen,  die  die BSD-Semantik benutzen und utmp nicht
       verndern.  Wie  beschrieben,  benutzt  Linux  die  BSD-Konventionen  fr
       Leitungsnamen.   SYSV  benutzt  nur  das  Typ-Feld um solche Eintrge 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  Lschen der Datei abgeschaltet werden knnen, muss
       utmp bei Linux immer vorhanden  sein.   Falls  who(1)  verboten  werden
       soll, dann kann man utmp einfach nicht allgemein lesbar machen.

EINSCHRNKUNGEN

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

FEHLER

       Ein  Groteil  der  obigen Beschreibung basiert auf der libc5.  Aktuelle
       Versionen knnten inzwischen ein anderes Verfahren verwenden.

SIEHE AUCH

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