Операционные системы - статьи


Делаем собственный PAM-модуль


После теории посмотрим в глубь PAM. Попытаемся разобраться как же оно работает.

Пример1: Новый вход в систему.

Вы уже наверно во сне видите изрядно доставшие строки

login:***

Password:*******

Эта схема придуманная много лет назад продолжает служить и сейчас. Но не паролем единым жив человек. Давайте сделаем что-то новенькое, необычное. Будет и самому интересно и вредителей введет в заблуждение, ибо такого не будет не на одной другой машине.

До PAM'а нам пришлось бы переписывать весь login, а теперь мы просто сделаем новый модуль, соберем его как библиотеку и припишем в сценарий аутентификации /etc/pam.d/login. Модуль будет называться просто pam_test.

Но сначала о том, что же мы будем делать. Имеется следующая интересная схема аутентификации: система выдает пользователю несколько случайных чисел. Пользователь берет определенные из них, поставляет в ТОЛЬКО ЕМУ известный многочлен, например,

(дата)*x*x+3*x-(текущий час)*y+z

и вводит вместо пароля ответ. Компьютер тоже считает по этому алгоритму и если ответ правильный, пускает в систему.

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

Есть конечно очевилные недостатки: тяжело считать, можно подсмотреть как пользователь считает на бумажке, сложны вопросы хранения многочленов ... Но мы не будем столь огорчаться, ведь мы прежде всего учимся, не так ли.

Как вы прочитали ранее модули различаются по классам. Наш будет класса AUTH. То есть отвечать за аутентификацию.

Это его текст.

/*Это простейший модуль PAM*/

// Включаем необходимые заголовочные файлы.

#include <security/pam_modules.h> #include <stdarg.h> #include <time.h>

//Это определит тип нашего модуля

#define PAM_SM_AUTH #define MAX_V 30

// Самая интересная функция. // Именно она реализует наш неповторимый алгоритм аутентификации. // Подобные внешние функции должны существовать во всех модулях данного класса.




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



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