Skip to main content

Как использовать Unix Command Utmp в Linux

How to Monitor User Login and System Restart Activities (Июнь 2026)

How to Monitor User Login and System Restart Activities (Июнь 2026)
Anonim

utmp файл позволяет обнаружить информацию о том, кто в данный момент использует систему. В настоящее время в системе может быть больше пользователей, поскольку не все программы используют ведение журнала utmp.

Предупреждение: utmp не должны быть доступны для записи, потому что многие системные программы (по глупости) зависят от его целостности. Вы рискуете подделать системные лог-файлы и модификации системных файлов, если вы уйдетеutmpдоступный для записи любому пользователю.

Файл представляет собой последовательность записей со следующей структурой, объявленной в включенном файле (обратите внимание, что это только одно из нескольких определений, детали зависят от версии 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 БУХГАЛТЕР 9 #define UT_LINESIZE 12 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status {short int e_termination; / * статус завершения процесса. * / short int e_exit; / * статус выхода процесса. * /}; struct utmp {short ut_type; / * тип входа * / pid_t ut_pid; / * pid процесса входа * / char ut_line UT_LINESIZE; / * имя устройства tty - "/ dev /" * / char ut_id 4; / * init id или abbrev. ttyname * / char ut_user UT_NAMESIZE; / * имя пользователя * / char ut_host UT_HOSTSIZE; / * имя хоста для удаленного входа * / struct exit_status ut_exit; / * Статус выхода процесса, отмеченного как DEAD_PROCESS. * / long ut_session; / * идентификатор сеанса, используемый для окнирования * / struct timeval ut_tv; / * была сделана запись времени. * / int32_t ut_addr_v6 4; / * IP-адрес удаленного хоста. * / pad 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 и где нет процесса с PIDut_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 с нулевыми байтами.

Xterm (1) и другие терминальные эмуляторы создаютUSER_PROCESS записывать и генерироватьut_id используя последние две буквы/ DEV / ttyp % с или используяп % d за/ Dev / очки / % d , Если они найдутDEAD_PROCESS для этого id они перерабатывают его, иначе они создают новую запись. Если они могут, они будут отмечать это какDEAD_PROCESS при выходе, и рекомендуется, чтобы они ut_line,ut_time, ut_user, а такжеut_host также.

XDM (8) не должен создавать запись utmp, потому что нет назначенного терминала. Если создать его, это приведет к ошибкам, например «finger: can not stat /dev/machine.dom». Он должен создавать записи wtmp, хотя, как и даемон (8).

Telnetd (8) устанавливаетLOGIN_PROCESS вход и остальное авторизоваться (8), как обычно. После окончания сеанса telnet, Telnetd (8) очищает utmp описанным способом.

wtmp файл записывает все логины и выходы. Его формат точно так жеutmp за исключением того, что нулевое имя пользователя указывает на выход из соответствующего терминала. Кроме того, название терминала'~'с именем пользователя"неисправность" или же"перезагружать" указывает на выключение или перезагрузку системы и пару имен терминалов'|'/'}' регистрирует старое / новое системное время, когда Дата (1) меняет его.wtmp поддерживается авторизоваться (1), в этом (1) и некоторые версии Гетти (1). Ни одна из этих программ не создает файл, поэтому при его удалении запись выполняется.