1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
|
.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de), Fri Apr 2 11:32:09 MET DST 1993
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
.\" USA.
.\"
.\" Modified Sun Jul 25 10:44:50 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified Thu Feb 26 16:08:49 MET 1995 by Michael Haardt
.\" Modified Sat Jul 20 14:39:03 MET DST 1996 by Michael Haardt
.\" Modified Sat Aug 10 15:26:25 MET DST 1996 by Michael Haardt
.\"
.TH UTMP 5 "10. August 1996" "Linux" "Dateiformate"
.SH BEZEICHNUNG
utmp, wtmp \- login Eintrge
.SH BERSICHT
.B "#include <utmp.h>"
.SH BESCHREIBUNG
Die
.I utmp
Datei gibt Auskunft darber, wer das System im Moment benutzt. Da nicht
alle Programme
.I utmp
benutzen, kann es jedoch noch mehr Benutzer im System geben.
.B Warnung:
.I utmp
darf nicht allgemein schreibbar sein, weil viele Systemprogramme von
der Korrektheit dieser Datei abhngig sind. Falls Sie
.I utmp
fr jeden schreibbar lassen, riskieren Sie falsche Eintrge in
Systemlogdateien und Modifikationen von Systemdateien.
Die Datei besteht aus einer Sequenz von Eintrgen der folgenden Struktur,
die in der Include-Datei deklariert ist:
.RS
.nf
.sp
.ta 3i
#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 UT_LINESIZE 12
#define UT_NAMESIZE 8
#define UT_HOSTSIZE 16
struct utmp {
short ut_type; /* Typ des Eintrags */
pid_t ut_pid; /* Prozenummer */
char ut_line[UT_LINESIZE]; /* Gertename \- "/dev/" */
char ut_id[2]; /* init id or abgek. Leitungsname */
time_t ut_time; /* Zeit */
char ut_user[UT_NAMESIZE]; /* Benutzer login-Name */
char ut_host[UT_HOSTSIZE]; /* Rechner-Name bei remote login */
long ut_addr; /* IP Adresse des remote Rechners */
};
.sp
.fi
.RE
Diese Struktur enthlt den Namen der Gertedatei fr das Terminal des
Benutzers, seinen Login-Namen und den Zeitpunkt im Format von
.BR time (2),
an dem er sich eingeloggt hat. Zeichenketten sind mit \fB'\e0'\fP
terminiert, falls sie krzer als das Feld sind, das sie enthlt.
Die ersten Eintrge, die je erstellt werden, entstehen durch
.BR init (8),
der
.BR inittab (5)
verarbeitet. Bevor ein solcher Eintrag verarbeitet wird, rumt
.BR init (8)
.I utmp
auf, indem bei jedem Eintrag dessen
.BR ut_type " nicht"
.BR DEAD_PROCESS " oder " BRUN_LVL
ist und fr den kein Proze mit der PID
.BR ut_pid " existiert,"
.BR ut_type " auf " DEAD_PROCESS
gesetzt wird und
.BR ut_user ","
.BR ut_host " und "
.BR ut_time
mit Null-Bytes gefllt werden. Falls kein leerer Eintrag mit der bentigten
.B ut_id
gefunden wird, erstellt init einen. Dabei wird
.B ut_id
von inittab bernommen,
.BR ut_pid " und " ut_time
auf die aktuellen Werte und
.BR ut_type " auf " INIT_PROCESS " gesetzt wird."
.BR getty (8)
findet den Eintrag mittels der PID, ndert
.BR ut_type " zu " LOGIN_PROCESS ", ndert " ut_time ", setzt " ut_line
und wartet darauf, da eine Verbindung hergestellt wird. Nachdem
.BR login (8)
einen Benutzer authentifizieren konnte, ndert es
.BR ut_type " zu " USER_PROCESS ", ndert " ut_time " und setzt "
.BR ut_host " und " ut_addr ". Je nach "
.BR getty (8)
und
.BR login (8)
knnten Eintrge auch mittels
.BR ut_line " anstatt der vorzuziehenden " ut_pid " gefunden werden."
Wenn
.BR init (8)
feststellt, da ein Proze beendet wurde, lokalisiert es den
entsprechenden utmp Eintrag mittels
.BR ut_pid ", setzt"
.BR ut_type " auf " DEAD_PROCESS " und fllt "
.BR ut_user ,
.BR ut_host " und " ut_time " mit Null-Bytes."
.BR xterm (1)
und andere Terminal-Emulatoren erstellen direkt einen
.B USER_PROCESS
Eintrag und erzeugen die
.BR ut_id " entweder durch die letzten beiden Zeichen von"
.BI /dev/ttyp %c
oder durch
.BI p %d
bei
.BI /dev/pts/ %d.
Falls sie einen
.B 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
.BR DEAD_PROCESS " und es wird geraten, da sie "
.BR ut_line ", " ut_time ", " ut_user " und " ut_host " mit Nullen fllen."
.BR xdm (8)
sollte keinen utmp Eintrag erstellen, weil es kein
zugeordnetes Terminal gibt. Falls es trotzdem gemacht wird, werden
Fehlermledungen wie finger: can not stat /dev/machine.dom die Folge
sein. Es sollte jedoch ein wtmp Eintrag erzeugt werden, genau wie es
auch bei
.BR ftpd (8)
geschieht.
.BR telnetd (8)
erzeugt einen
.BR LOGIN_PROCESS " Eintrag und lt"
.BR login (8)
den Rest erledigen. Nachdem die telnet-Sitzung beendet ist, markiert
.BR telnetd (8)
den
.I utmp
Eintrag in der oben
beschriebenen Art und Weise.
Die
.I wtmp
Datei zeichnet alle An- und Abmeldungen im System auf. Das Format gleicht
.BR utmp ,
mit der Ausnahme, da ein leerer Benutzername eine Abmeldung vom angegebenen
Terminal anzeigt. Weiterhin bedeutet die Terminalleitung \fB"~"\fP mit dem
Benutzernamens \fB"shutdown"\fP oder \fB"reboot"\fP ein Herunterfahren bzw.
den Neustart des Systems und das Paar der Terminalleitungen
\fB"|"\fP/\fB"}"\fP zeichnet die alte/neue Systemzeit auf, wenn diese durch
.BR date (1)
gendert wird.
.I wtmp
wird durch
.BR login (1),
.BR init (8)
und
.BR getty (1)
verwaltet. Keins dieser Programme erstellt die Datei, so da, falls sie
gelscht wird, keine Aufzeichnungen mehr gemacht werden.
.SH DATEIEN
.I /var/run/utmp
.br
.I /var/log/wtmp
.SH "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
.BR 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
.BR ut_id " fehlt. In Linux (wie in SYSV), wird das "
.B ut_id
Feld eines Eintrags nach dem initialen Setzen nie wieder gendert,
wodurch diese Eintragnummer ohne jede Konfigurationsdatei reserviert wird.
.B ut_id
zu lschen fhrt zu race conditions und resultiert in beschdigten utmp
Eintrgen und potentiellen 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
fuer Leitungsnamen. SYSV benutzt nut das Typ-Feld um solche Eintrge zu
markieren und zeichnet Meldungen wie \fB"new time"\fP im Leitungs-Feld
auf. SYSV hat ein Feld mehr, um den Exit-Status von beendeten Prozessen
aufzuzeichnen.
.B UT_UNKNOWN
scheint eine Linux Erfindung zu sein. In Linux gibt es keinen
.B ACCOUNTING
Typ. SYSV hat kein
.BR ut_host " oder " ut_addr
Feld. Anders als bei verschiedenen anderen Systemen, wo utmp
Aufzeichnungen durch Lschen der Datei abgeschaltet werden knnen, mu
utmp bei Linux immer vorhanden sein. Falls
.BR who (1)
verboten werden soll, dann kann man utmp einfach
nicht allgemein lesbar machen.
.SH EINSCHRNKUNGEN
Das Dateiformat ist maschinengebunden. Es wird daher empfohlen, da
es nur auf der Architektur verarbeitet wird, auf der es erstellt wurde.
.SH "SIEHE AUCH"
.BR ac (1),
.BR date (1),
.BR last (1),
.BR login (1),
.BR who (1),
.BR getutent (3),
.BR init (8).
|