OSDN Git Service

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