Pelajari Perintah Linux - wtmp

Nama

utmp, wtmp - catatan login

Ringkasan

#include

Deskripsi

File utmp memungkinkan seseorang untuk menemukan informasi tentang siapa yang saat ini menggunakan sistem. Mungkin ada lebih banyak pengguna saat ini menggunakan sistem, karena tidak semua program menggunakan utmp logging.

Peringatan: utmp tidak boleh dapat ditulis, karena banyak program sistem (secara bodoh) bergantung pada integritasnya. Anda berisiko memalsukan logfile sistem dan modifikasi file sistem jika Anda membiarkan utmp dapat ditulis ke semua pengguna.

File adalah urutan entri dengan struktur berikut yang dinyatakan dalam file include (perhatikan bahwa ini hanya salah satu dari beberapa definisi di sekitar; detail bergantung pada versi libc):

#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 ACCOUNTING 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {short int e_termination; / * status pengakhiran proses. * / short int e_exit; / * memproses status keluar. * /}; struct utmp {short ut_type; / * Jenis login * / pid_t ut_pid; / * pid proses login * / char ut_line [UT_LINESIZE]; / * nama perangkat tty - "/ dev /" * / char ut_id [4]; / * id atau singkatan init. ttyname * / char ut_user [UT_NAMESIZE]; / * nama pengguna * / char ut_host [UT_HOSTSIZE]; / * nama host untuk login jarak jauh * / struct exit_status ut_exit; / * Status keluar dari proses ditandai sebagai DEAD_PROCESS. * / panjang ut_session; / * ID sesi, digunakan untuk windowing * / struct timeval ut_tv; / * Entri waktu dibuat. * / int32_t ut_addr_v6 [4]; / * Alamat IP host jarak jauh. * / char pad [20]; / * Dicadangkan untuk penggunaan di masa mendatang. * /}; / * Pencocokan kompatibilitas mundur. * / #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]

Struktur ini memberikan nama file khusus yang terkait dengan terminal pengguna, nama login pengguna, dan waktu login dalam bentuk waktu (2). Bidang string diakhiri oleh '\ 0' jika lebih pendek dari ukuran bidang.

Entri pertama yang dibuat hasil dari init (8) memproses inittab (5). Sebelum entri diproses, meskipun, init (8) membersihkan utmp dengan menyetel ut_type ke DEAD_PROCESS , menghapus ut_user , ut_host , dan ut_time dengan null byte untuk setiap record yang ut_type bukan DEAD_PROCESS atau RUN_LVL dan di mana tidak ada proses dengan PID ut_pid . Jika tidak ada catatan kosong dengan ut_id yang diperlukan dapat ditemukan, init membuat yang baru. Ini menetapkan ut_id dari inittab, ut_pid dan ut_time ke nilai saat ini, dan ut_type menjadi INIT_PROCESS .

getty (8) menempatkan entri oleh pid, mengubah ut_type menjadi LOGIN_PROCESS , mengubah ut_time , menetapkan ut_line , dan menunggu koneksi yang akan dibuat. login (8), setelah pengguna diautentikasi, ubah ut_type menjadi USER_PROCESS , ubah ut_time , dan tetapkan ut_host dan ut_addr . Tergantung pada getty (8) dan login (8), catatan dapat ditemukan oleh ut_line, bukan ut_pid yang lebih disukai.

Ketika init (8) menemukan bahwa suatu proses telah keluar, ia menempatkan entri utmpnya dengan ut_pid , menetapkan ut_type ke DEAD_PROCESS , dan membersihkan ut_user , ut_host dan ut_time dengan null byte.

xterm (1) dan emulator terminal lainnya langsung membuat record USER_PROCESS dan menghasilkan ut_id dengan menggunakan dua huruf terakhir dari / dev / ttyp % c atau dengan menggunakan p % d untuk / dev / pts / % d . Jika mereka menemukan DEAD_PROCESS untuk id ini, mereka mendaur ulangnya, jika tidak mereka membuat entri baru. Jika mereka bisa, mereka akan menandainya sebagai DEAD_PROCESS saat keluar dan disarankan bahwa mereka membatalkan ut_line , ut_time , ut_user , dan ut_host juga.

xdm (8) seharusnya tidak membuat rekaman utmp, karena tidak ada terminal yang ditetapkan. Membiarkan itu membuat satu akan menghasilkan kesalahan, seperti 'jari: tidak dapat stat / dev / machine.dom'. Ini seharusnya membuat entri wtmp, seperti ftpd (8).

telnetd (8) membuat entri LOGIN_PROCESS dan meninggalkan sisanya untuk login (8) seperti biasa. Setelah sesi telnet berakhir, telnetd (8) membersihkan utmp dengan cara yang dijelaskan.

File wtmp mencatat semua login dan logout. Formatnya persis seperti utmp kecuali bahwa nama pengguna null menunjukkan logout pada terminal terkait. Selanjutnya, nama terminal "~" dengan nama pengguna "shutdown" atau "reboot" menunjukkan sistem shutdown atau reboot dan sepasang nama terminal "|" / "}" mencatat waktu sistem lama / baru ketika tanggal (1) mengubahnya. wtmp dikelola oleh login (1), init (1), dan beberapa versi getty (1). Tidak satu pun dari program ini yang membuat file , jadi jika dihapus, pencatatan dinonaktifkan.