ザutmp ファイルは、誰が現在システムを使用しているかに関する情報を発見することを可能にする。すべてのプログラムがutmpロギングを使用しているわけではないので、現在システムを使用しているユーザーが増えている可能性があります。
警告: utmp 多くのシステムプログラム(愚かなことに)はその完全性に依存しているため、書き込み可能であってはなりません。退出すると、システムログファイルの改ざんやシステムファイルの改ざんを受ける危険性がありますutmp任意のユーザーに書き込み可能です。
このファイルは、インクルードファイルで宣言された次の構造体を持つ一連のエントリです(これはいくつかの定義の1つに過ぎません;詳細はlibcのバージョンによって異なります)。
#define UT_UNKNOWN 0 #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 32 #define UT_HOSTSIZE 256構造体exit_status {short int e_termination; / *プロセス終了ステータス。 * / short int e_exit; / *プロセス終了ステータス。 * /}; struct utmp {短いut_type; / *ログインのタイプ* / pid_t ut_pid; / *ログインプロセスのPID * / char ut_line UT_LINESIZE; / * ttyのデバイス名 - "/ dev /" * / char ut_id 4; / * init idまたは略語。 ttyname * / char ut_user UT_NAMESIZE; / *ユーザ名* / char ut_host UT_HOSTSIZE; / *リモートログインのためのホスト名* / struct exit_status ut_exit; / * DEAD_PROCESSとしてマークされたプロセスの終了ステータス。 * /長いut_session; / *ウィンドウイングに使用されるセッションID * / struct timeval ut_tv; / *タイムエントリーが行われました。 * / int32_t ut_addr_v6 4; / *リモートホストのIPアドレス。 * / char pad 20; / *将来のために予約されています。 * /}; / *下位互換性ハッキング。 * / #define ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6 0
この構造体は、ユーザーの端末に関連付けられた特殊ファイルの名前、ユーザーのログイン名、およびログインの時刻を時間(2)。文字列フィールドは' ' フィールドのサイズよりも短い場合
これまでに作成された最初のエントリは その中に (8)処理 inittab (5)。しかし、エントリが処理される前に、 その中に (8)設定することでutmpを消去するut_type にDEAD_PROCESS、クリアut_user, ut_host、およびut_time 各レコードに対してヌルバイトでut_type ないDEAD_PROCESS またはRUN_LVL PIDを持つプロセスがない場合ut_pid 存在する。必要な空のレコードがない場合ut_id initが新しいものを作成します。それはut_id inittabから、ut_pid そしてut_time 現在の値にut_type にINIT_PROCESS.
ゲッティ (8)がpidによるエントリの検索、変更ut_type にLOGIN_PROCESS、変更ut_time、セットut_line、接続が確立されるのを待ちます。 ログイン (8)において、ユーザが認証された後、ut_type にUSER_PROCESS、変更ut_time、そしてセットut_host そしてut_addr。応じて ゲッティ (8)および ログイン (8)、レコードはut_line 好ましいの代わりにut_pid.
いつ その中に (8)プロセスが終了したことを確認し、プロセスのutmpエントリをut_pid、セットut_type にDEAD_PROCESS、そしてクリアするut_user, ut_host そしてut_time nullバイトで
xterm (1)と他の端末エミュレータは、直接USER_PROCESS 記録し、生成するut_id の最後の2文字を使用して/ dev / ttyp %c またはp %d にとって/ dev / pts / %d 。彼らがDEAD_PROCESS このidのためにリサイクルし、そうでなければ新しいエントリを作成します。できる場合は、DEAD_PROCESS 終了時には、それは彼らがnullであることをお勧めします ut_line,ut_time, ut_user、およびut_host 同様に。
xdm (8)は、割り当てられた端末がないので、utmpレコードを作成すべきではありません。それを作成させると、 'finger:can not stat /dev/machine.dom'のようなエラーが発生します。ただし、wtmpエントリを作成する必要があります。 ftpd (8)が行います。
telnetd (8)は、LOGIN_PROCESS 残りの部分は ログイン (8)である。 telnetセッションが終了したら、 telnetd (8)utmpを上記の方法でクリーンアップします。
ザwtmp ファイルにはすべてのログインとログアウトが記録されます。その形式はまったく同じですutmp ヌルのユーザー名が関連する端末のログアウトを示している点が異なります。また、端末名'~'ユーザー名付き"シャットダウン" または"リブート" システムのシャットダウンまたはリブートを示し、端末名のペア'|'/'}' 古い/新しいシステム時刻を記録する 日付 (1)それを変更します。wtmp によって維持される ログイン (1), その中に (1)、およびいくつかのバージョンの ゲッティ (1)。これらのプログラムのいずれもファイルを作成しないので、ファイルを削除するとレコードの保存はオフになります。