Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #78, ИЮНЬ 2005 г.

В борьбе с журнальными бестиями

Иван Скляров (www.sklyaroff.ru)

Хакер, номер #078, стр. 078-100-2


# cp /dev/null /var/run/utmp

# cp /dev/null /var/log/wtmp

# cp /dev/null /var/log/lastlog

[формат файлов wtmp, utmp и lastlog]

В man можно узнать, что wtmp и utmp состоят из последовательности структур. Причем эти структуры одинаковы для файлов wtmp и utmp и объявлены в заголовочном файле utmp.h. В Linux этот файл расположен в каталоге /usr/include/bits.

Заголовочный файл utmp.h в Linux

struct utmp

{

short int ut_type; /* Тип записи */

pid_t ut_pid; /* Идентификатор процесса */

char ut_line[UT_LINESIZE]; /* Имя устройства (console, ttyxx) */

char ut_id[4]; /* Идентификатор из файла /etc/inittab (обычно номер линии) */

char ut_user[UT_NAMESIZE]; /* Входное имя пользователя */

char ut_host[UT_HOSTSIZE]; /* Имя удаленного хоста */

struct exit_status ut_exit; /* Код завершения процесса, помеченного как DEAD_PROCESS */

long int ut_session; /* ID сессии */

struct timeval ut_tv; /* Время создания записи */

int32_t ut_addr_v6[4]; /* IP-адрес удаленного хоста */

char __unused[20]; /* Зарезервировано для будущего использования */

};

struct exit_status {

short int e_termination; /* Системный код завершения процесса */

short int e_exit; /* Пользовательский код завершения */

};

/* Для совместимости */

#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]

Во FreeBSD файл utmp.h расположен в каталоге /usr/include и структура utmp выглядит немного иначе:

[структура utmp.h в FreeBSD]

struct utmp {

char ut_line[UT_LINESIZE]; /* Имя устройства (console, ttyxx) */

char ut_name[UT_NAMESIZE]; /* Входное имя пользователя */

char ut_host[UT_HOSTSIZE]; /* Имя удаленного хоста */

time_t ut_time; /* Временная метка */

};

Стоит отметить, что на страницах man эти структуры описаны, но всегда надо смотреть в заголовочные файлы — истина только там. Структура lastlog также определена в файле utmp.h и имеет следующий вид:

В Linux:

struct lastlog

{

__time_t ll_time;

char ll_line[UT_LINESIZE];

char ll_host[UT_HOSTSIZE];

};

В FreeBSD:

struct lastlog

{

time_t ll_time;

char ll_line[UT_LINESIZE];

char ll_host[UT_HOSTSIZE];

};

Как видишь, отличие только в названии типа ll_time. В Linux существует отдельный заголовочный файл lastlog.h. Обычно он содержит только одну строчку «#include <utmp.h>», то есть вся информация находится в файле utmp.h.

Назад на стр. 078-100-1  Содержание  Вперед на стр. 078-100-3