Tìm hiểu lệnh Linux - wtmp

Tên

utmp, wtmp - hồ sơ đăng nhập

Tóm tắc

#include

Sự miêu tả

Tệp utmp cho phép người dùng khám phá thông tin về người hiện đang sử dụng hệ thống. Có thể có nhiều người dùng hiện đang sử dụng hệ thống hơn, vì không phải tất cả các chương trình đều sử dụng ghi nhật ký utmp.

Cảnh báo: utmp không được ghi, bởi vì nhiều chương trình hệ thống (ngu xuẩn) phụ thuộc vào tính toàn vẹn của nó. Bạn có nguy cơ đăng nhập hệ thống giả mạo và sửa đổi các tập tin hệ thống nếu bạn để lại utmp có thể ghi được cho bất kỳ người dùng nào.

Tệp là một chuỗi các mục có cấu trúc sau được khai báo trong tệp bao gồm (lưu ý rằng đây chỉ là một trong một số định nghĩa xung quanh; chi tiết phụ thuộc vào phiên bản 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; / * trạng thái chấm dứt quá trình. * / ngắn int e_exit; / * trạng thái thoát khỏi quy trình. * /}; struct utmp {short ut_type; / * loại đăng nhập * / pid_t ut_pid; / * pid của quá trình đăng nhập * / char ut_line [UT_LINESIZE]; / * tên thiết bị của tty - "/ dev /" * / char ut_id [4]; / * init id hoặc abbrev. ttyname * / char ut_user [UT_NAMESIZE]; / * tên người dùng * / char ut_host [UT_HOSTSIZE]; / * tên máy chủ cho đăng nhập từ xa * / struct exit_status ut_exit; / * Trạng thái thoát của quá trình được đánh dấu là DEAD_PROCESS. * / ut_session dài; / * ID phiên, được sử dụng cho cửa sổ * / struct timeval ut_tv; / * thời gian nhập cảnh đã được thực hiện. * / int32_t ut_addr_v6 [4]; / * Địa chỉ IP của máy chủ từ xa. * / char pad [20]; /* Để dành mai sau dùng. * /}; / * Hacks tương thích ngược. * / #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]

Cấu trúc này cung cấp tên của tệp đặc biệt được liên kết với thiết bị đầu cuối của người dùng, tên đăng nhập của người dùng và thời gian đăng nhập dưới dạng thời gian (2). Các trường chuỗi được chấm dứt bằng '\ 0' nếu chúng ngắn hơn kích thước của trường.

Các mục đầu tiên bao giờ tạo ra kết quả từ init (8) xử lý inittab (5). Trước khi một mục nhập được xử lý, mặc dù, init (8) dọn dẹp utmp bằng cách đặt ut_type thành DEAD_PROCESS , xóa ut_user , ut_hostut_time bằng byte rỗng cho mỗi bản ghi mà ut_type không phải là DEAD_PROCESS hoặc RUN_LVL và không có quá trình với PID ut_pid tồn tại. Nếu không có bản ghi trống với ut_id cần thiết, bạn có thể tìm thấy bản ghi mới. Nó đặt ut_id từ inittab, ut_pidut_time thành giá trị hiện tại và ut_type thành INIT_PROCESS .

getty (8) xác định mục nhập của pid, thay đổi ut_type thành LOGIN_PROCESS , thay đổi ut_time , đặt ut_line và chờ kết nối được thiết lập. đăng nhập (8), sau khi người dùng đã được xác thực, thay đổi ut_type thành USER_PROCESS , thay đổi ut_time và đặt ut_hostut_addr . Tùy thuộc vào getty (8) và đăng nhập (8), các bản ghi có thể được đặt bởi ut_line thay vì ut_pid thích hợp hơn.

Khi init (8) tìm thấy rằng một tiến trình đã thoát, nó sẽ tìm mục nhập utmp của nó bằng ut_pid , đặt ut_type thành DEAD_PROCESS và xóa ut_user , ut_hostut_time bằng các byte rỗng.

xterm (1) và các trình giả lập thiết bị đầu cuối khác trực tiếp tạo bản ghi USER_PROCESS và tạo ut_id bằng cách sử dụng hai chữ cái cuối cùng của / dev / ttyp % c hoặc bằng cách sử dụng p % d cho / dev / pts / % d . Nếu họ tìm thấy một DEAD_PROCESS cho id này, họ sẽ tái chế nó, nếu không họ sẽ tạo một mục mới. Nếu có thể, họ sẽ đánh dấu nó là DEAD_PROCESS khi thoát và được khuyên rằng họ cũng không được sử dụng ut_line , ut_time , ut_userut_host .

xdm (8) không nên tạo bản ghi utmp, vì không có thiết bị đầu cuối được chỉ định. Để tạo ra nó sẽ dẫn đến lỗi, chẳng hạn như 'ngón tay: không thể stat /dev/machine.dom'. Nó sẽ tạo các mục wtmp, tuy nhiên, giống như ftpd (8).

telnetd (8) thiết lập mục nhập LOGIN_PROCESS và để phần còn lại đăng nhập (8) như bình thường. Sau khi phiên telnet kết thúc, telnetd (8) dọn dẹp utmp theo cách được mô tả.

Tệp wtmp ghi lại tất cả thông tin đăng nhập và đăng xuất. Định dạng của nó là chính xác như utmp ngoại trừ một tên người dùng null chỉ ra một đăng xuất trên thiết bị đầu cuối liên quan. Hơn nữa, tên thiết bị đầu cuối "~" với tên người dùng "tắt" hoặc "khởi động lại" cho biết hệ thống tắt hoặc khởi động lại và cặp tên thiết bị đầu cuối "|" / "}" ghi nhật ký hệ thống cũ / mới khi ngày (1) thay đổi nó. wtmp được duy trì bằng cách đăng nhập (1), init (1) và một số phiên bản của getty (1). Không có chương trình nào trong số này tạo tệp , vì vậy nếu nó bị xóa, tính năng lưu giữ hồ sơ bị tắt.