OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man5 / utmp.5
1 .\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
2 .\" Fri Apr  2 11:32:09 MET DST 1993
3 .\"
4 .\" This is free documentation; you can redistribute it and/or
5 .\" modify it under the terms of the GNU General Public License as
6 .\" published by the Free Software Foundation; either version 2 of
7 .\" the License, or (at your option) any later version.
8 .\"
9 .\" The GNU General Public License's references to "object code"
10 .\" and "executables" are to be interpreted as the output of any
11 .\" document formatting or typesetting system, including
12 .\" intermediate and printed output.
13 .\"
14 .\" This manual is distributed in the hope that it will be useful,
15 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
16 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 .\" GNU General Public License for more details.
18 .\"
19 .\" You should have received a copy of the GNU General Public
20 .\" License along with this manual; if not, write to the Free
21 .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
22 .\" USA.
23 .\"
24 .\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
25 .\" Modified 1995-02-26 by Michael Haardt
26 .\" Modified 1996-07-20 by Michael Haardt
27 .\" Modified 1997-07-02 by Nicolás Lichtmaier <nick@debian.org>
28 .\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne
29 .\"*******************************************************************
30 .\"
31 .\" This file was generated with po4a. Translate the source file.
32 .\"
33 .\"*******************************************************************
34 .TH UTMP 5 2011\-09\-28 Linux "Linux Programmer's Manual"
35 .SH 名前
36 utmp, wtmp \- ログイン記録
37 .SH 書式
38 \fB#include <utmp.h>\fP
39 .SH 説明
40 \fIutmp\fP ファイルを見ることで、現在誰がシステムを使っているかという情報 が得られる。ただすべてのプログラムが utmp ファイルを
41 更新しているわけではないので、実際にはそれ以上のユーザーが システムを使っている可能性がある。
42 .PP
43 \fB警告:\fP (愚かにも) 多くのシステムプログラムがその整合性に依存しているので、 \fIutmp\fP ファイルは "other"
44 に分類されるユーザに対して 書き込み可能にしてはならない。 ファイルの所有者とグループオーナー以外のユーザに対して \fIutmp\fP
45 ファイルを書き込み可能な状態にしておくと、 システムのログファイルを偽造されたり、システムファイルの 改ざんを受けるといったリスクを犯すことになる。
46 .PP
47 このファイルは \fIutmp\fP 構造体の繰り返しで構成される。 この構造体は \fI<utmp.h>\fP で以下のように定義されている
48 (ここに記述してあるのは幾つかの大まかな定義のみで、 詳細は libc のバージョンにより変わることに注意が必要である)。
49 .in +4n
50 .nf
51 .sp
52 /* Values for ut_type field, below */
53
54 #define EMPTY         0 /* Record does not contain valid info
55                            (formerly known as UT_UNKNOWN on Linux) */
56 #define RUN_LVL       1 /* Change in system run\-level (see
57                            \fBinit\fP(8)) */
58 #define BOOT_TIME     2 /* Time of system boot (in \fIut_tv\fP) */
59 #define NEW_TIME      3 /* Time after system clock change
60                            (in \fIut_tv\fP) */
61 #define OLD_TIME      4 /* Time before system clock change
62                            (in \fIut_tv\fP) */
63 #define INIT_PROCESS  5 /* Process spawned by \fBinit\fP(8) */
64 #define LOGIN_PROCESS 6 /* Session leader process for user login */
65 #define USER_PROCESS  7 /* Normal process */
66 #define DEAD_PROCESS  8 /* Terminated process */
67 #define ACCOUNTING    9 /* Not implemented */
68
69 #define UT_LINESIZE      32
70 #define UT_NAMESIZE      32
71 #define UT_HOSTSIZE     256
72
73 struct exit_status {              /* Type for ut_exit, below */
74     short int e_termination;      /* Process termination status */
75     short int e_exit;             /* Process exit status */
76 };
77
78 struct utmp {
79     short   ut_type;              /* Type of record */
80     pid_t   ut_pid;               /* PID of login process */
81     char    ut_line[UT_LINESIZE]; /* Device name of tty \- "/dev/" */
82     char    ut_id[4];             /* Terminal name suffix,
83                                      or inittab(5) ID */
84     char    ut_user[UT_NAMESIZE]; /* Username */
85     char    ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
86                                      kernel version for run\-level
87                                      messages */
88     struct  exit_status ut_exit;  /* Exit status of a process
89                                      marked as DEAD_PROCESS; not
90                                      used by Linux init(8) */
91     /* ut_session と ut_tv フィールドは、32ビットでコンパイルされた場合と
92        64ビットでコンパイルされた場合で同じサイズでなければならない。
93        こうすることで、32ビットと64ビットのアプリケーションで、
94        データファイルと共有メモリを共有することができるようになる。 */
95 #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
96     int32_t ut_session;           /* Session ID (\fBgetsid\fP(2)),
97                                      used for windowing */
98     struct {
99         int32_t tv_sec;           /* Seconds */
100         int32_t tv_usec;          /* Microseconds */
101     } ut_tv;                      /* Time entry was made */
102 #else
103      long   ut_session;           /* Session ID */
104      struct timeval ut_tv;        /* Time entry was made */
105 #endif
106
107     int32_t ut_addr_v6[4];        /* Internet address of remote
108                                      host; IPv4 address uses
109                                      just ut_addr_v6[0] */
110     char __unused[20];            /* Reserved for future use */
111 };
112
113 /* Backward compatibility hacks */
114 #define ut_name ut_user
115 #ifndef _NO_UT_TIME
116 #define ut_time ut_tv.tv_sec
117 #endif
118 #define ut_xtime ut_tv.tv_sec
119 #define ut_addr ut_addr_v6[0]
120 .sp
121 .fi
122 .in
123 この構造体からユーザーの使っている端末のスペシャルファイル名、 ユーザーのログイン名、 (\fBtime\fP(2)
124 形式での)ログイン時刻がわかる。文字列フィールドは、 フィールドの長さより文字列が短い場合には、 NULL バイト (\(aq\e0\(aq)
125 によって終端される。
126 .PP
127 最初のエントリは \fBinit\fP(8)  コマンドが \fBinittab\fP(5)  を処理することで作られる。 あるエントリを処理する前に、
128 \fBinit\fP(8)  は \fIut_type\fP を \fBDEAD_PROCESS\fP に初期化する。 レコードの \fIut_type\fP が
129 \fBDEAD_PROCESS\fP と \fBRUN_LVL\fP のいずれでもなく、 かつ PID が \fIut_pid\fP
130 であるプロセスがいない場合は、\fIut_user\fP, \fIut_host\fP, \fIut_time\fP をヌルバイトでクリアして初期化を行う。 必要な
131 \fIut_id\fP を持つ空のレコードを見つけられなかった場合、 \fBinit\fP(8)  は新しいレコードを作る。inittab から \fIut_id\fP
132 を設定し、 \fIut_pid\fP および \fIut_time\fP を現在値に、 \fIut_type\fP を \fBINIT_PROCESS\fP に設定する。
133 .PP
134 \fBmingetty\fP(8)  (または \fBagetty\fP(8))  は pid でエントリを特定し、 \fIut_type\fP を
135 \fBLOGIN_PROCESS\fP に変更し、 \fIut_time\fP を更新し、\fIut_line\fPを設定した後、接続が確立されるのを待つ。
136 \fBlogin\fP(1)  はユーザー認証が終了すると、 \fIut_type\fP を \fBUSER_PROCESS\fP に変更し、 \fIut_time\fP
137 を更新し、\fIut_host\fP と \fIut_addr\fPを設定する。 \fBmingetty\fP(8)  (または \fBagetty\fP(8))  と
138 \fBlogin\fP(1)  により異なるが、 \fIut_pid\fP の代わりに \fIut_line\fP を使ってレコードの特定が行われることもある
139 (\fIut_pid\fP を使う方が望ましい) 。
140 .PP
141 \fBinit\fP(8)  はプロセスの終了を検出した場合、 \fIut_pid\fP をキーとして utmp のエントリを特定し、 \fIut_type\fP を
142 \fBDEAD_PROCESS\fP に設定し、 \fIut_user\fP, \fIut_host\fP, \fIut_time\fP をヌルバイトでクリアする。
143 .PP
144 \fBxterm\fP(1)  コマンドや他の端末エミュレータは 直接 \fBUSER_PROCESS\fP のレコードを作り、 端末名のサフィックス文字列
145 (\fI/dev/[pt]ty\fP に続く文字列)  を使って \fIut_id\fP の値を生成する。 この id を持つエントリが
146 \fBDEAD_PROCESS\fP であった場合には再利用し、 それ以外の場合には新しいエントリが作られる。 可能な場合にはプロセス終了時に
147 \fBDEAD_PROCESS\fP と設定し、 さらに \fIut_line\fP, \fIut_time\fP, \fIut_user\fP, \fIut_host\fP
148 をヌルバイトでクリアすることが奨励されている。
149 .PP
150 \fBtelnetd\fP(8)  は \fBLOGIN_PROCESS\fP を設定するだけでよく、 残りの処理は通常通り \fBlogin\fP(1)
151 に任せればよい。 telnet のセッションが終了した後、前述のように \fBtelnetd\fP(8)  が utmp のエントリを初期化する。
152 .PP
153 \fIwtmp\fP ファイルには、すべてのログインとログアウトが記録される。 そのフォーマットは、ログアウト済の端末でユーザー名がヌルとなること以外は
154 \fIutmp\fP とまったく同じである。 ユーザー名が \fBshutdown\fP もしくは \fBreboot\fP である 端末名 \fB~\fP はシステムの停止
155 (shutdown) または再起動 (reboot)  を意味する。またその端末名が \fB|\fP と \fB}\fP の対は \fBdate\fP(1)
156 コマンドで変更した新/旧のシステム時刻を記録している。 \fIwtmp\fP ファイルは \fBlogin\fP(1), \fBinit\fP(8)
157 やいくつかのバージョンの \fBgetty\fP(8)  (\fBmingetty\fP(8)  または \fBagetty\fP(8))  により管理されている。
158 これらのプログラムはどれもファイルを新たに作成しないので、 ファイルを削除することで情報の記録 (record\-keeping) を止めることができる。
159 .SH ファイル
160 /var/run/utmp
161 .br
162 /var/log/wtmp
163 .SH 準拠
164 .PP
165 POSIX.1 では、 \fIutmp\fP 構造体ではなく、 \fIutmpx\fP 構造体を規定している。 \fIutmpx\fP
166 構造体で規定されているのは、フィールド \fIut_type\fP, \fIut_pid\fP, \fIut_line\fP, \fIut_id\fP, \fIut_user\fP,
167 \fIut_tv\fP である。 POSIX.1 では、フィールド \fIut_line\fP と \fIut_user\fP の長さは規定されていない。
168
169 Linux では、 \fIutmpx\fP 構造体の定義は \fIutmp\fP 構造体と同じである。
170 .SS 過去のシステムとの比較
171 Linux での utmp のエントリは v7/BSD や System V のいずれにも準拠しておらず、 その両方が混在したものである。
172
173 v7/BSD ではより少しの項目しかない; もっとも重要なことは、\fIut_type\fP が無いことである。 そのため v7/BSD 系のプログラムでは
174 (たとえば) 死んだ状態のエントリや ログイン状態のエントリまで表示されてしまうことになった。
175 さらにセッション用のスロットを割り当てるための設定ファイルがない。 BSD に設定ファイルがあるのは \fIut_id\fP がないからである。
176
177 Linux (System V 系)では、設定ファイルを必要とせず セッション用のスロットを割り当てるので、一旦設定 されてしまうとレコードの
178 \fIut_id\fP は決して変更されない。 \fIut_id\fP をクリアすると競合状態におちいり、 utmp
179 のエントリを壊したり、潜在的なセキュリティホールになる可能性がある。 上述のフィールドを NULL バイトで埋めてクリアしておくのは、 System V
180 での取り決めでは必要とはされていないが、 BSD での取り決めを前提としていて、かつ utmp を更新しない多くのプログラムが
181 動作するようにするためである。 Linux ではここまで記述してきたように、行内容の表示は BSD の慣例に従っている。
182 .PP
183 .\" mtk: What is the referrent of "them" in the following sentence?
184 .\" System V only uses the type field to mark them and logs
185 .\" informative messages such as \fB"new time"\fP in the line field.
186 \fBUT_UNKNOWN\fP は Linux で作られたもののようである。 System V には \fIut_host\fP も \fIut_addr_v6\fP
187 も存在しない。
188 .SH 注意
189 .PP
190 ファイルを削除することで utmp への記録を止められる 他の様々なシステムとは違い、Linux では utmp ファイルを必ずおいて おく必要がある。
191 \fBwho\fP(1)  コマンドが機能しないようにしたい場合には、 utmp ファイルの全ユーザーに対する読み取り許可を設定しないようにする。
192 .PP
193 ファイルのフォーマットはマシンに依存するので、ファイルが作られた マシンもしくは同一アーキテクチャのマシン上でのみ処理することを推奨する。
194 .PP
195 注意すべき点としては、 \fIbiarch\fP なプラットフォーム、つまり 32ビットと 64ビットの両方の アプリケーションを実行できるシステム
196 (x86\-64, ppc64, s390x など) では、 \fIut_tv\fP のサイズは 32ビットモードと 64ビットモードで同じである。
197 \fIut_session\fP と \fIut_time\fP も、存在する場合には同様に同じサイズ である。これにより、32ビットアプリケーションと
198 64ビットアプリケーション の間でデータファイルと共有メモリを共有することが可能になる。 そのためには、 \fIut_session\fP を
199 \fIint32_t\fP 型に、 \fIut_tv\fP を 2つの \fIint32_t\fP 型のフィールド \fItv_sec\fP, \fItv_usec\fP
200 を持つ構造体に変更すればよい \fIut_tv\fP は \fIstruct timeval\fP と同じサイズとは限らないので、
201 .in +4n
202 .nf
203 .sp
204 gettimeofday((struct timeval *) &ut.ut_tv, NULL);
205 .fi
206 .in
207
208 のような呼び出しをするのではなく、 以下のように各フィールドを設定する方法が推奨される:
209 .in +4n
210 .nf
211 .sp
212 struct utmp ut;
213 struct timeval tv;
214
215 gettimeofday(&tv, NULL);
216 ut.ut_tv.tv_sec = tv.tv_sec;
217 ut.ut_tv.tv_usec = tv.tv_usec;
218 .fi
219 .in
220 .PP
221 utmp 構造体は libc5 から libc6 で変更された。そのため昔の libc5 の構造体 を使ったプログラムは
222 \fI/var/run/utmp\fP や \fI/var/log/wtmp\fP ファイルを壊してしまう。
223 .SH バグ
224 この man ページは libc5 に基づいて作られていて、 最新のものでは違っているかもしれない。
225 .SH 関連項目
226 \fBac\fP(1), \fBdate\fP(1), \fBlast\fP(1), \fBlogin\fP(1), \fBwho\fP(1), \fBgetutent\fP(3),
227 \fBgetutmp\fP(3), \fBlogin\fP(3), \fBlogout\fP(3), \fBlogwtmp\fP(3), \fBupdwtmp\fP(3),
228 \fBinit\fP(8)