ПРИМЕНЕНИЕ PAM ДЛЯ ОБЕСПЕЧЕНИЯ ДВУХФАКТОРНОЙ АУТЕНТИФИКАЦИИ ЧЕРЕЗ СЕРВИС ЯНДЕКС.КЛЮЧ НА ОС АЛЬТ
Яковец П.А. студент
Аннотация
Статья посвящена исследованию и реализации механизма двухфакторной аутентификации с использование библиотеки PAM с использованием сервиса Яндекс.ключ.
Ключевые слова: двухфакторная аутентификация, PAM, Linux, Яндекс.ключ, информационная безопасность, контроль доступа, автоматизированные системы, сетевые уязвимости.
Abstract
The article is devoted to the research and implementation of a two- factor authentication mechanism using the PAM library using the Yandex.key service
Keywords: two-factor authentication, PAM, Linux, Yandex.key, information security, access control, automated systems, network vulnerabilities.
Введение
В настоящее время важность обеспечения безопасности информационных систем особенно актуальна для отраслей, работающих с критически важными данными, такими как нефтегазовая промышленность [1]. В данном контексте двухфакторная аутентификация становится неотъемлемым элементом обеспечения надежности и защиты конфиденциальной информации в таких отраслях. Угрозы кибербезопасности, включая внутренние и внешние атаки, требуют применения высокотехнологичных методов защиты. Одним из таких эффективных средств является двухфакторная аутентификация, которая требует от пользователей системы предоставления двух различных форм идентификации для успешного входа в систему [2]. В данном контексте библиотека PAM (Pluggable Authentication Modules) предоставляет важный инструмент для управления процессом аутентификации, позволяя системным администраторам гибко настраивать политику безопасности.
PAM обобщает все API для служб аутентификации, предоставляя механизм настройки различных модулей аутентификации в системе. Это дает системному администратору возможность эффективно управлять способами аутентификации, включая добавление новых или изменение существующих конфигурационных файлов [3]. В данной статье фокус будет направлен на исследование и настройку двухфакторной аутентификации через конфигурационные файлы PAM с использованием сервиса Яндекс.ключ на операционной системе ОС Альт.
Основные функциональные возможности PAM
На рабочей станции ОС Альт, Pluggable Authentication Modules (PAM) предоставляет собой инструмент с гибкой модульной архитектурой для управления аутентификацией. Это позволяет сервисам не реализовывать свою систему аутентификации, а полагаться на общие модули PAM, доступные в системе [4].
Модульная структура PAM позволяет настраивать аутентификацию в зависимости от конкретных требований каждого сервиса. Он поддерживает различные функции, такие как проверка существования пользователя, проверка статуса учетной записи, управление сеансами и паролями.
Основным сценарием применения PAM является ситуация, когда пользователь пытается аутентифицироваться, например, в веб-приложении, которое в свою очередь вызывает PAM, передавая ему идентификатор пользователя и, возможно, пароль или другие данные. Затем PAM определяет, где и как нужно провести аутентификацию пользователя.
После аутентификации PAM возвращает данные приложению, а также принимает решение о доступе пользователя к ресурсам приложения на основе вводных. Важно отметить, что приложению не требуется реализовывать специфичные для каждой службы методы аутентификации, так как PAM берет эту задачу на себя [5].
В данной статье будет описана реализация механизма двухфакторной аутентификации через следующие конфигурационные файлы:
• login (/etc/pam.d/login). Этот файл используют для настройки правил входа в систему.
• system-auth-local-only (/etc/pam.d/system-auth). Еще один общий файл для определения локальных правил аутентификации, который представляет централизованный подход к настройке локальной аутентификации.
• chpasswd (/etc/pam.d/chpasswd). Файл passwd отвечает за аутентификацию при смене пароля пользователя командой chpasswd. Все изменения в этом файле будут влиять на процедуру смены пароля в конкретной ситуации.
• sshd (/etc/pam.d/sshd). Файл sshd определяет правила аутентификации для службы SSH. Изменения, осуществляемые в этом файле, влияют на процесс входа в систему по SSH.
Компоненты конфигурационных файлов PAM:
1. TYPE. Данный блок определяет тип службы. Все модули PAM обрабатываются как стеки, так как каждый из них используется для разных целей [6].
• auth Данный модуль отвечает за выбор метода, с помощью которого пользователь может провести аутентификацию. Этим методом может быть, например, пароль, как постоянный, так и одноразовый или биометрия, получаемая с помощью подходящего оборудования.
• account Данный модуль определяет формальную проверку того, действительна ли учетная запись пользователя в данный момент.
• password Данный модуль отвечает за соблюдение установленной парольной политики. Если требуется введение нового пароля по истечению определенного срока или пароль должен соответствовать некоторым ограничениям данные условия необходимо прописывать в данном модуле.
• session В данном модуле указываются действия, которые выполняются при успешной регистрации или должны быть выполнены успешно для корректной регистрации в системе. Здесь можно реализовать настройку домашнего каталога для пользователя, настройку переменных среды, значения umask и т.д.
2. CONTROL. В данном блоке выполняется управление поведением PAM модуля [6].
• required Модуль с этим флагом должен успешно обработан для успешной аутентификации. Если модуль сс данным флагом не проходит проверку, обрабатываются остальные модули с флагом required, и только после этого пользователь получает уведомление о неудачной попытке аутентификации
• requisite Данный флаг схож с предыдущим за одним существенным отличием, при неудачной попытке обработки модуля с данным флагом процесс аутентификации прерывается с выводом ошибки пользователю. В случае успеха обработки модули также обрабатываются последовательно.
• sufficient После успешной обработки модуля с флагом sufficient приложение или сервис, запросивший авторизацию, немедленно получает сообщение об успехе. Дальнейшая обработка модулей прекращается, при условии, что все предыдущие модули с флагом required выполнены успешно. Отказ модуля с флагом sufficient не влияет на последующие модули - они выполняются в обычном порядке.
• optional Успешная или неудачная обработка модуля с данным флагом не имеет прямого влияния на процесс аутентификации. Данный флаг полезен для модулей, в которых требуется лишь получение уведомления о результате.
• include При установке флага include файл, указанный в качестве аргумента, вставляется в последовательность обработки. Данный флаг полезен для интеграции настроек из общих конфигурационных файлов.
• substack Модуль с этим флагом подключает строки из другого конфигурационного файла, но только того же типа что и строка (например, строки с модулем auth)
3. MODULE_PATH. В данном блоке содержится полное имя файла из модуля PAM. Имя файла не требуется указывать явно, если он находится в директории по умолчанию /etc/pam.d [6].
4. MODULE_ARGS. Данный блок является опциональным и содержит разделенный пробелами список опций для управления модулем PAM, например, debug (для отладки) или nullok (позволяет использовать пустые пароли) [6].
Двухфакторная аутентификация через сервис Яндекс.ключ
Сервис Яндекс.ключ предоставляет возможность входить в сервисы Яндекса по qr-коду, одноразовому паролю или сразу с комбинацией одноразового и постоянного пароля. Для сторонних сервисов, которые могут запрашивать 6-значные и 8-значные коды компания Яндекс разработала возможность использования двухфакторной аутентификации через данный сервис [7].
Сервис Яндекс.ключ работает с использованием методов TOTP (Time- based One-Time Password Algorithm) и HOTP (HMAC-Based One-Time Password Algorithm). Основное преимущество метода TOTP над уже устаревшим способом получения кода из SMS является то, что для первого одноразовый пароль генерируется на стороне пользователя, а для второго на стороне сервера, который позже передает код пользователю. Именно поэтому при использовании TOTP необходимо обращать внимание на синхронизацию времени на устройстве, проходящем аутентификацию, и на устройстве, которое генерирует одноразовые пароли.
Оба алгоритма TOTP и HOTP реализуют одну задачу - генерацию одноразовых паролей, на основании входящего набора данных, их отличие заключается лишь в том, что при использовании алгоритма TOTP, вторым аргументом для генерации хеша будет служить время, а не счетчик как в алгоритме HOTP. Так как время доступно для отслеживания и серверу и устройству, создающему одноразовые пароли, в отличии от счетчика, становится возможным реализация двухфакторной аутентификации непосредственно на устройстве [8].
Для того, чтобы настроить двухфакторную аутентификацию на устройстве необходимо первоначально сгенерировать OTP-ключ, который часто представляет собой сканируемый qr-код для удобства пользователей. Для реализации данной задачи используется пакет libpam-google-authenticator исключительно для создания связки устройство-генератор паролей. Команда google-authenticator генерирует код локально на устройстве без обращения в сеть, соответственно конфиденциальные данные не передаются на сервера google, что означает полную защищенность пакета от доступа извне.
Настройка двухфакторной аутентификации с использованием конфигурационных файлов PAM для локальных сервисов
Перейдем к рассмотрению конфигурационного файла /etc/pam.d/login. В данном конфигурационном файле 10 модулей:
* Модуль pam_securetty отвечает за разрешение на вход в систему с правами root только тогда, когда пользователь входит в систему через терминал, который определен как «защищенный» (в /etc/securetty). Данный модуль также проверяет, что /etc/securetty является простым файлом и не доступен для записи всем пользователям системы. Этот модуль не влияет на пользователей без полномочий root [9].
• Модуль pam_lastlog отображает информацию о последнем входе в систему. Вместе с параметром nowtmp не обновляет файл /var/log/wtmp.
• Модуль pam_motd буквально расшифровывается как «message of the day» и позволяет произвести вывод на экран информационного сообщения.
• Модуль pam_mail обычно опционально сообщает о наличии у пользователя почты.
• Модуль pam_console предназначен для предоставления пользователям физической консоли. Он предоставляет два основных вида возможностей: права доступа к файлам и аутентификацию.
• Модуль pam_ck_connector регистрирует сеанс входа в систему с помощью общесистемного демона ConsoleKit. Демон ConsoleKit может принимать как tty, так и графические дисплеи, обычные параметры, установленные РАМ здесь^не всегда полезны [10].
Рис. 1 Конфигурационный файл /etc/pam.d/login
Цепочка взаимодействия модулей в файле login:
1. Сначала выполняется проверка консоли, с которой выполняется вход в систему. Пользователь может войти только с указанных в файле /etc/securetty консолей.
2. Далее следует интеграция общих правил аутентификации, управления учетной записью и паролем: Используются стандартные правила, определенные в файле /etc/pam.d/common-login, который в свою очередь использует правила для аутентификации из файла /etc/pam.d/system-auth.
3. После следуют настройки по управлению сеансом. Определяются действия при входе, такие как установка переменных среды.
4. Далее следуют опциональные действия, такие как регистрация событий и вывод информационных сообщений. Опциональная запись информации о последнем входе пользователя, отображение сообщения дня (MOTD), проверка почты, а также регистрация сеансов на консоли.
Конфигурационный файл /etc/pam.d/common-login представляет собой набор общих модулей настройки входа в систему.
• Модуль pam_nologin.so позволяет настроить запрет на вход любых пользователей не являющихся root, если файл /var/run/nologin существует.
• Модуль pam_time.so используется для настройки ограничения времени доступа у пользователей системы к сервисам. Все основные настройки данного модуля можно производить в файле /etc/security/time.conf.
* Модуль pam_loginuid.so устанавливает атрибут процесса loginuid для процесса, который успешно прошел аутентификацию. Данное действие необходимо для корректной проверки сервиса. Этот модуль обычно используют для сервисов, с помощью которых осуществляется вход в систему [11].
* Модуль pam_systemd.so регистрирует сеансы пользователей с помощью менеджера входа в систему systemd-logind.service [12].
Рис. 2 Конфигурационный файл common-login
Конфигурационный файл system-auth производит интеграцию настроек из двух файлов system-auth-local-only и system-auth-common.
Конфигурационный файл /etc/pam.d/system-auth-common представляет собой набор следующих модулей:
• Модуль pam_access.so обеспечивает управление входом в систему. Этот модуль часто используют для ограничения входа в систему конкретных пользователей через создание правил фильтрации. Ввиду того, что PAM имеет средства аутентификации по сети, то можно настроить не только кого можно пускать, но и откуда. По умолчанию все правила находятся в /etc/security/access.conf [13].
• Модуль pam_mktemp.so предоставляет пользователям индивидуальные временные каталоги /tmp/.private/$USER в рамках сессии [14].
* Модуль pam_limits.so позволяет индивидуально или для группы ограничить такие параметры, как размер core-файла, максимальный допустимый размер создаваемых файлов, максимальное количество открытых файлов, запущенных процессов и тому подобное [3].
Рис. 3 Конфигурационный файл system-auth-common
Настройка механизма двухфакторной аутентификации реализована в основном файле, отвечающим за настройку правил локального входа в систему - system-auth-local-only.