#define _PATH_UTMP "/var/run/utmp" #define _PATH_WTMP "/var/log/wtmp" #define _PATH_LASTLOG "/var/log/lastlog" #define UT_NAMESIZE 16 #define UT_LINESIZE 8 #define UT_HOSTSIZE 16 struct lastlog { int32_t ll_time; /* ユーザが何時ログインしたか */ char ll_line[UT_LINESIZE]; /* 端末線名 */ char ll_host[UT_HOSTSIZE]; /* ユーザの出身ホスト */ }; struct utmp { char ut_line[UT_LINESIZE]; /* 端末線名 */ char ut_name[UT_NAMESIZE]; /* ユーザのログイン名 */ char ut_host[UT_HOSTSIZE]; /* ユーザの出身ホスト */ int32_t ut_time; /* ユーザが何時ログインしたか */ };
lastlog ファイルは、 Vt lastlog 構造体の線型配列であり、ユーザの UID でインデックスされています。 ファイルは、 Vt utmp 構造体の線型配列であり、端末線番号 ( ttyslot(3) 参照) でインデックスされています。 wtmp ファイルは、 Vt utmp 構造体から成るバイナリログファイルであり、 ファイルの終端に追記されていきます。
デフォルトでは、ユーザがログインするたびに、 pam_lastlog8 プログラムは lastlog ファイル中のユーザの UID を検索します。 もし見つかった場合、ユーザが最後にログインした時刻のタイムスタンプ、 端末線、ホスト名が標準出力に書き出されます。 pam_lastlog8 プログラムは、その後 lastlog ファイルに新しいログイン時刻を記録します。
新しい Vt lastlog への記録が書き出された後で、 ファイルがオープンされ、ユーザに対する Vt utmp 記録が挿入されます。 この記録は、ユーザがログアウトして削除される時まで保持されます。 ファイルは、 rwho(1), users(1), w(1), who(1) プログラムで使われます。
次に、 pam_lastlog8 プログラムは wtmp ファイルをオープンし、ユーザの Vt utmp 記録を追加します。 その後ユーザが端末線からログアウトすると、特別な Vt utmp レコードが記録されます。 すなわち ut_line が適切に設定され、 ut_time が更新されますが、 ut_name と ut_host は空であるものが記録されます ( init(8) 参照)。 wtmp ファイルは、 last(1) と ac(8) プログラムで使われます。
時刻変更やシャットダウン・リブートの際には、 以下の項目が wtmp ファイルに記録されます。
これらのファイルが存在しない場合、 pam_lastlog8 はこれらを作成しません。 これらのファイルは、手動で作成する必要があります。
および wtmp のファイルに対する通常の操作は、提供された login(3), logout(3), logwtmp(3) ユーティリティ関数で行い、 これらのファイルの書式が異なるシステム間での互換性を維持すべきです。