Как использовать команду Unix Utmp в Linux

 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 {
короткий 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. * /
длинная ут_сессия; / * идентификатор сеанса, используемый для управления окнами * /
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]

Эта структура дает имя специального файла, связанного с терминалом пользователя, имя пользователя для входа и время входа в систему в виде время. Строковые поля заканчиваются ‘\ 0’ если они короче, чем размер поля.

Первые записи, когда-либо созданные в результате обработки init init. Однако перед обработкой записи init очищает utmp, устанавливая ut_type в DEAD_PROCESS, клирингut_userut_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.

getty находит запись по pid, изменения ut_type в LOGIN_PROCESS, изменения ut_time, наборы ut_line, и ожидает установления соединения. логин, после аутентификации пользователя, изменения ut_type в USER_PROCESS, изменения ut_time, и устанавливает ut_host а такжеut_addr. В зависимости от getty и логина, записи могут быть найдены ut_line вместо предпочтительного ut_pid.

Когда init (8) находит, что процесс завершился, он находит свою запись utmp по ut_pid, наборы ut_type в DEAD_PROCESS, и очищает ut_userut_host а также ut_time с нулевыми байтами.

xterm и другие эмуляторы терминала напрямую создают USER_PROCESS записывать и генерировать ut_id используя последние две буквы / DEV / ttyp% c или используя п% D для / Dev / очки /% D. Если они найдут DEAD_PROCESS для этого идентификатора они перерабатывают его, в противном случае они создают новую запись. Если они могут, они отметят это как DEAD_PROCESS при выходе и рекомендуется, чтобы они были нулевыми ut_line,ut_timeut_user, а также ut_host также.

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

Телнетд устанавливает LOGIN_PROCESS запись и оставляет остальное для входа в систему как обычно. После окончания сеанса telnet telnetd очищает utmp описанным способом.

 wtmp В файл записываются все логины и выходы из системы. Его формат в точности как utmp за исключением того, что нулевое имя пользователя указывает на выход из системы на соответствующем терминале. Кроме того, имя терминала «~»с именем пользователя «неисправность» или же «перезагрузка» указывает на выключение или перезагрузку системы и пару имен терминалов «|»/«}» регистрирует старое / новое системное время, когда дата меняет его. wtmp поддерживается логином, init и некоторыми версиями getty. Ни одна из этих программ не создает файл, поэтому при его удалении ведение учета отключается.  

Ссылка на основную публикацию