10.5. Аутентификация пользователей

10.5. Аутентификация пользователей

Программы, у которых установлен бит SUID, не должны запускаться кем попало. Например, программа su, прежде чем менять идентификатор пользователя, заставляет его ввести пароль. Это называется аутентификацией — программа проверяет, получил ли пользователь права суперпользователя.

Администраторам высоконадежных систем недостаточно, чтобы пользователи просто вводили пароли. У пользователей есть вредная привычка записывать свои пароли на бумажке, приклеенной к монитору, или выбирать пароли, в которых закодирован день рождения, имя любимой собаки, жены и т.п. Все это облегчает задачу злоумышленникам, пытающимся незаконно проникнуть в систему.

Во многих организациях требуется использовать "одноразовые" пароли, генерируемые специальными электронными карточками, которые пользователи хранят при себе. Одни и тот же пароль не может встретиться дважды, а прежде чем получить пароль, требуется ввести личный код. Следовательно, для взлома системы хакеру требуется раздобыть электронную карточку и узнать соответствующий личный код. В сверхсекретных учреждениях используются устройства сканирования сетчатки глаза или другие биометрические приборы.

При написании аутентификационной программы важно позволить системному администратору использовать тот механизм аутентификации, который он считает приемлемым. В Linux этой цели служат подключаемые модули аутентификации (РАМ, pluggable authentication modules). Рассмотрим простейшее приложение (листинг 10.4).

Листинг 10.4. (pam.c) Пример использования модулей РАМ

#include <security/pam_appl.h>

#include <security/pam_misc.h>

#include <stdio.h>

int main() {

 pam_handle_t* pamh;

 struct pam_conv pamc;

 /* Указание диалоговой функции. */

 pamc.conv = &misc_conv;

 pamc.eppdata_ptr = NULL;

 /* Начало сеанса аутентификации. */

 pam_start("su", getenv("USER"), &pamc, &pamh);

 /* Аутентификация пользователя. */

 if (pam_authenticate(pamh, 0) != PAM_SUCCESS)

  fprintf(stderr, "Authentication failed! ");

 else

  fprintf(stderr, "Authentication OK. ");

 /* Конец сеанса. */

 pam_end(pamh, 0);

 return 0;

}

Чтобы скомпилировать эту программу, необходимо подключить к ней две библиотеки: libpam и libpam_misс:

% gcc -о para pam.c -lpam -lpam_misc

Сначала программа создает объект диалога, который используется библиотекой РАМ, когда ей требуется запросить у пользователя данные. Функция misc_conv(), адрес которой записывается в объект, — это стандартная диалоговая функция, осуществляющая терминальный ввод-вывод. Можно написать собственную функцию, отображающую всплывающее окно, использующую голосовой ввод-вывод или реализующую другие способы общения с пользователем.

Затем вызывается функция pam_start(), которая инициализирует библиотеку РАМ. Первый аргумент функции — это имя сервиса. Оно должно уникальным образом идентифицировать приложение. Программа не будет работать, пока системный администратор не настроит систему на использование указанного сервиса. В данном случае задействуется сервис su, при котором программа аутентифицирует пользователей так же, как это делает команда su. В реальных программах так поступать не следует. Выберите реальное имя сервиса и создайте сценарий инсталляции, который позволит системному администратору правильно настраивать механизм аутентификации.

Второй аргумент функции — это имя пользователя, которого требуется аутентифицировать. В данном примере имя пользователя берется из переменной среды USER (обычно это имя соответствует эффективному идентификатору текущего процесса, но так бывает не всегда). В большинстве реальных программ в данном месте выдается запрос на ввод имени. Третьим аргументом является ссылка на объект диалога. В четвертом аргументе указывается переменная, в которую функция pam_start() запишет дескриптор сеанса. Этот дескриптор должен передаваться всем последующим функциям библиотеки РАМ.

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

Предположим, что пользователь должен ввести пароль "password". Если это будет сделано, получим следующее:

% ./pam

Password: password

Authentication OK.

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

Вот что произойдет, если в систему попробует вломиться хакер:

% ./pam

Password: badguess

Authentication failed!

Полное описание работы модулей аутентификации приведено в каталоге /usr/doc/pam.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Глава 28 Идентификация и аутентификация пользователей

Из книги автора

Глава 28 Идентификация и аутентификация пользователей В модели безопасности Linux для идентификации пользователей и групп используются числа, однако люди отдают предпочтение именам. Имена, наряду с другой важной информацией, сохраняются в двух системных базах


9.4.3. Аутентификация

Из книги автора

9.4.3. Аутентификация Защита по IP-адресу не гарантирует от его подделки злоумышленником. К тому же, остается вероятность, что кто-то получит физический доступ к компьютеру, имеющему выход во всемирную сеть, и сделает нечто недозволенное.Мне довелось работать в фирме, где


Аутентификация при SSH-взаимодействии

Из книги автора

Аутентификация при SSH-взаимодействии В процессе обмена сервер и клиент SSH используют различные способы кодирования передаваемых данных. Упрощенно это выглядит так. Участники взаимодействия договариваются о временном использовании метода кодирования с помощью


7.3.2. PAP- и СНАР-аутентификация

Из книги автора

7.3.2. PAP- и СНАР-аутентификация Большинство провайдеров и корпоративных РРР-серверов используют протокол РАР. Если используется протокол РАР, то вместо того, чтобы регистрироваться на таком сервере, используя имя пользователя и пароль, когда их ввод запрошен сервером,


3.8.1 Аутентификация

Из книги автора

3.8.1 Аутентификация Важным аспектом компьютерной безопасности является выяснение "кто есть кто". Ранее это определяли идентификатор и пароль пользователя. Аналогичным образом в поле "From:" сообщения электронной почты идентифицируется отправитель. Однако пароль может быть


4.8.1 Аутентификация

Из книги автора

4.8.1 Аутентификация Протокол PPP часто используется для удаленных коммуникаций и связи мобильного пользователя по коммутируемым соединениям. Коммутируемые соединения (dialup connection) иногда применяются для связи локальных сетей подразделений компании с сетью главного


13.11.1 Аутентификация в telnet

Из книги автора

13.11.1 Аутентификация в telnet В telnet реализована аутентификация, позволяющая партнерам согласовать один из вариантов этого механизма. Последовательность действий следующая:? Сервер посылает DO AUTHENTICATION? Клиент отвечает WILL AUTHENTICATIONС этого момента вся информация будет


15.9 Аутентификация в RPC

Из книги автора

15.9 Аутентификация в RPC Некоторые службы не нуждаются в защите. Для вывода времени дня на сервере служба RPC может быть оставлена открытой для общего доступа. Однако клиент, обращающийся к личным данным, должен обеспечить некоторую опознавательную информацию (проходить


15.9.1 Нулевая аутентификация

Из книги автора

15.9.1 Нулевая аутентификация Нулевая аутентификация полностью соответствует своему названию. Не используется никакой аутентификационной информации — в полях мандата и verifier сообщений запросов и ответов содержатся одни


15.9.3 Аутентификация DCS

Из книги автора

15.9.3 Аутентификация DCS Стандарт шифрования данных (Data Encryption Standard — DES) использует симметричный алгоритм шифрования. DES — это федеральный стандарт обработки информации (Federal Information Processing Standard — FIPS), который был определен Национальным бюро стандартов США, в настоящее время


16.4. Аутентификация

Из книги автора

16.4. Аутентификация По умолчанию в запросе RPC не содержится информации о клиенте. Сервер отвечает на запрос клиента, не беспокоясь о том, что это за клиент. Это называется нулевой аутентификацией, или AUTH_NONE.Следующий уровень проверки подлинности называется аутентификацией


Нотариальная аутентификация

Из книги автора

Нотариальная аутентификация Нотариальная аутентификация включает аутентификацию отправителя сообщения, подтверждение целостности и юридической силы электронных документов.К сервисам, базирующимся на PKI, также относятся защищенное датирование, поддержка


Идентификация и аутентификация

Из книги автора

Идентификация и аутентификация Идентификацией субъекта называется процесс сопоставления введенной им своей характеристики с некоторым идентификатором, хранимым системой. В дальнейшем идентификатор субъекта используется для предоставления субъекту определенного