Приемы профессиональной работы в UNIX


ЗАЩИТА ЛИЧНОЙ ИНФОРМАЦИИ - часть 7


1 char id[] = "@(#) inuse v1.0 Disable terminal Author: Russ Sage";   3 #include 4 #include 5 #include   7 #define SSIZ 7 8 #define BSIZ 512 9 #define BELL "\07" 10 #define LF "\n"   12 main() 13 { 14 register int fd, sig, n; 15 char secret[SSIZ]; 16 char buf1[BSIZ], buf2[BSIZ]; 17 struct sgttyb sav_tty, chg_tty;   19 secret[0] = 's'; 20 secret[1] = 'e'; 21 secret[2] = 'c'; 22 secret[3] = 'r'; 23 secret[4] = 'e'; 24 secret[5] = 't'; 25 secret[6] = '\n';   27 buf1[0] = buf2[0] = '\0'; 28 if ((fd = open("/dev/tty",O_RDONLY)) == -1) 29 exit(1);   31 for (sig = 2; sig <= 15; sig++) 32 signal(sig, SIG_IGN);   34 if (gtty(0, &sav_tty)) 35 exit(2); 36 chg_tty = sav_tty; 37 chg_tty.sg_flags &= ~ECHO; 38 if (stty(0, &chg_tty)) 39 exit(3);   41 write(1,"Lock string: ",13); 42 read(fd, buf1, BSIZ); 43 write(1, LF, 1);   45 for (;;) { 46 n = read(fd, buf2, BSIZ); 47 buf2[n] = '\0';   49 if (strcmp(buf2, buf1) == 0) 50 break; 51 if (strcmp(buf2, secret) == 0) 52 break; 53 write(1, BELL, 1); 54 } 55 stty(0, &sav_tty); 56 close(fd); 57 }

ОПИСАНИЕ

Зачем нам нужна программа inuse (си)?

Версия inuse на языке Си работает почти так же, как и версия на языке shell. Основное отличие заключается в том, что командные файлы на языке shell пользуются командами раздела (1), в то время как программы на Си используют команды разделов (2) и (3).

Что делает программа inuse (си)?

Теоретические основы функционирования такие же, как и в shell-версии. Инициализируется секретный пароль (в данном случае применяется такой синтаксис, чтобы команда strings(1) не смогла посмотреть его в исполняемом модуле), перехватываются сигналы, читается пароль пользователя и начинается бесконечный цикл, который читает символы с клавиатуры. Как только на клавиатуре что-то набрано и нажата клавиша возврата каретки, входные данные сравниваются с двумя известными паролями. Если они соответствуют одному из паролей, программа переустанавливает терминал и завершается. Если совпадения не произошло, терминал выдает звуковой сигнал и снова читает клавиатуру.

Поскольку здесь ловушки не работают, попытка прервать запущенную программу не срабатывает. Единственный способ прекратить ее выполнение - использовать команду "kill -9". Сигнал 9 является единственным, который нельзя перехватить. Если бы это можно было сделать, то не было бы никакого способа прекратить выполнение процесса, кроме как вытащить вилку из розетки.

ПОЯСНЕНИЯ




Начало  Назад  Вперед



Книжный магазин