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

Система безопасности PAM изнутри

Иван Скляров

Хакер, номер #086, стр. 086-112-5


Приложение должно обеспечить «функцию диалога». Она используется для прямой связи между подгружаемым модулем и приложением и обеспечивает модулю средство, которое будет запрашивать у пользователя пароль и т.д.

В pam_test() используется стандартная функция диалога misc_conv(), выполняющая терминальный ввод-вывод, адрес которой вначале программы мы указали в структуре pam_conv. Можно написать свою функцию, использующую другие способы общения с пользователем, например, всплывающее окно, голосовой ввод-вывод и т.д.

В программе вызывается функция pam_authenticate(). Во втором ее аргументе указываются различные флаги. Значение 0 означает стандартные установки.

Замечу, что имена основных PAM-функций в приложениях немного отличаются от PAM-функций, использующихся в модулях (отсутствует вставка _sm_). Например, в модулях используется функция pam_sm_chauthtok(), а в приложениях - pam_chauthtok().

[программирование PAM-модулей]

Программировать свои модули в целом несложно. Все зависит от того, какой алгоритм ты будешь в нем реализовывать, а именно: будет ли твой модуль обращаться к оборудованию, например, к USB-ключу, или использовать криптографический протокол. На диске к журналу ты можешь найти исходник аутентификационного модуля pam_test. Он хорошо прокомментирован, поэтому здесь я только дам общие сведения. Модуль получает от пользователя пароль, сравнивает его со статическим паролем и выдает результат. Так как модуль является типа AUTH, то он обязательно должен реализовывать две функции: pam_sm_authenticate() и pam_sm_setcred(). Дескриптор pamh позволяет связываться модулю с приложением и получать от него данные с помощью специальных PAM-функций. Имя пользователя определяется с помощью PAM-функции pam_get_user(), а пароль принимается с помощью функции pam_get_item().

Модуль и приложение, которое его вызывает, могут обмениваться сообщениями. Структура сообщения, передаваемого от модуля к приложению, определена в security/pam_appl.h как:

struct pam_message {

int msg_style;

const char *msg;

};

Допустимые опции для msg_style:

PAM_PROMPT_ECHO_OFF - получить строку без повторения любого текста;

PAM_PROMPT_ECHO_ON - получить строку пока текст отображается эхом;

PAM_ERROR_MSG - отображать ошибку;

PAM_TEXT_INFO - отображать текст.

Структура ответа от приложения к модулю имеет следующий вид:

struct pam_response {

char *resp;

Назад на стр. 086-112-4  Содержание  Вперед на стр. 086-112-6