Разработка и применение модуля PAM для аутентификации в Astra Linux с использованием Рутокен ЭЦП и Рутокен S / Хабр

Проверяем, что Рутокен ЭЦП 2.0 работает в системе

В терминале выполняем

$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T

Если увидите строку

Rutoken ECP <no label>

– значит всё хорошо.

Немного вводных об astra linux directory (ald) и jacarta pki

Домен Astra Linux Directory (ALD) предназначен для организации единого пространства пользователей (домена локальной вычислительной сети) в автоматизированных системах.

ALD использует технологии LDAP, Kerberos5, Samba/CIFS и обеспечивает:

  • централизованное хранение и управление учётными записями пользователей и групп;
  • сквозную аутентификацию пользователей в домене с использованием протокола Kerberos5;
  • функционирование глобального хранилища домашних директорий, доступных по Samba/CIFS;
  • автоматическую настройку файлов конфигурации UNIX, LDAP, Kerberos, Samba, PAM;
  • поддержку соответствия БД LDAP и Kerberos;
  • создание резервных копий БД LDAP и Kerberos с возможностью восстановления;
  • интеграцию в домен входящих в дистрибутив СУБД, серверов электронной почты, Web-серверов, серверов печати и другие возможности.

JaCarta PKI — это линейка PKI-токенов для строгой аутентификации пользователей в корпоративных системах, безопасного хранения ключевых контейнеров программных СКЗИ и цифровых сертификатов российского производителя – компании “Аладдин Р.Д.”.

В среде Astra Linux Directory (ALD) электронные ключи JaCarta PKI могут использоваться для двухфакторной аутентификации пользователя в домене ALD и отказа от паролей. Кроме того, с этими же электронными ключами можно выполнять различные сценарии внутри ОС, после аутентификации, такие, как: электронная подпись, хранение ключевых контейнеров, доступ к Web-ресурсам, проброс ключа в сессии MS Windows. Доступ к VDI сервисам, таким, как VmWare или Citrix.

Устанавливаем необходимые пакеты

sudo apt-get install libccid pcscd opensc

Если хотите добавить блокировку рабочего стола скринсейвером – дополнительно установите пакет

libpam-pkcs11

Добавляем PAM-модуль с поддержкой ГОСТов

Загружаем библиотеку с

Устанавливаем пакет с librtpkcs11ecp.so


Загружаем и устанавливаем DEB- или RPM-пакет по ссылке:

Считываем сертификат

Проверяем, что на устройстве есть сертификат

$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O

Если после строчки:

Using slot 0 with a present token (0x0)

1) Создаём тестовый сертификат

Внимание! Описанные способы создания ключей и сертификатов подходят для тестирования и не предназначены для применения в боевом режиме. Для этого нужно использовать ключи и сертификаты, изданные доверенным центром сертификации вашей организации или аккредитованным удостоверяющим центром.
PAM-модуль создан защищать локальные компьютеры и подразумевает работу в небольших организациях. Поскольку пользователей немного, Администратор может сам следить за отзывом сертификатов и вручную блокировать учетные записи, как и за сроком действия сертификатов. PAM-модуль пока не умеет проверять сертификаты по CRL и строить цепочки доверия.

Регистрируем сертификат в системе

Убедитесь, что ваш сертификат выглядит как base64 файл:

Если ваш сертификат выглядит так:

то нужно сконвертировать сертификат из формата DER в PEM-формат(base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEMСнова проверяем, что теперь все в порядке.

Добавляем сертификат в список доверенных сертификатов$ mkdir ~/.eid$ chmod 0755 ~/.eid$ cat cert.pem >> ~/.eid/authorized_certificates$ chmod 0644 ~/.eid/authorized_certificatesПоследняя строка защищает список доверенных сертификатов от случайного или намеренного изменения другими пользователями. Это исключает ситуацию, когда кто-то добавит сюда свой сертификат и сможет входить в систему от вашего имени.

Проверяем настройку


Чтобы понять что всё настроено, но при этом не потерять возможность входа в систему введите команду

$ sudo login

Введите имя пользователя. Всё настроено правильно, если система потребует PIN-код устройства.

Настраиваем блокировку компьютера при извлечении токена

В состав пакета

libpam-pkcs11

входит утилита

pkcs11_eventmgr,

которая позволяет выполнять различные действия при возникновении событий PKCS#11.


Для настройки

pkcs11_eventmgr

служит файл конфигурации:

/etc/pam_pkcs11/pkcs11_eventmgr.confДля различных дистрибутивов Линукс, команда которая вызывает блокировку учетной записи при извлечении смарт-карт или токена будет отличаться. См. event card_remove.

Пример файла конфигурации представлен ниже:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

После этого добавьте приложение pkcs11_eventmgr в автозагрузку. Для этого отредактируйте файл .bash_profile:$ nano /home/<имя_пользователя>/.bash_profileДобавьте в конец файла строку pkcs11_eventmgr и перезагрузитесь.

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

Librtpam

Разработанный компанией «Актив» модуль добавляет двухфакторную аутентификацию пользователей по смарт-картам или USB-токенам с помощью асимметричных ключей по последним стандартам отечественной криптографии.

Рассмотрим принцип его работы:

Процесс аутентификации происходит следующим образом:

  1. На Рутокене выполняется поиск личного сертификата пользователя.
  2. Запрашивается PIN-код токена.
  3. Происходит подпись случайных данных на закрытом ключе непосредственно в чипе Рутокена.
  4. Полученная подпись проверяется с помощью открытого ключа из сертификата пользователя.
  5. Модуль возвращает вызвавшему приложению результат проверки подписи.

Можно аутентифицироваться по ключам ГОСТ Р 34.10-2021 (длины 256 или 512 бит) или устаревшему ГОСТ Р 34.10-2001.

За безопасность ключей можно не беспокоиться – они генерируются непосредственно в Рутокене и никогда не покидают его память во время криптографических операций.

Рутокен ЭЦП 2.0 сертифицирован ФСБ и ФСТЭК по НДВ 4, поэтому может применяться в информационных системах, обрабатывающих конфиденциальную информацию.

Вариант простейшей настройки “кеширующий сервер dns”

Если у вас уже есть настроенный и доступный DNS-сервер (собственный, или сервер провайдера), создание в локальной сети дополнительного кеширующего DNS-сервера позволит без особых затрат ускорить работу с Интернет за счет ускорения разрешения имен по запросам различных сетевых служб и/или пользовательскими программами.

Читайте также:  Как получить эцп zakupki gov ru

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

Для примера предположим, что у нас в сети уже есть настроенный сервер DNS с  IP-адресом 192.168.32.1, а новый сервер DNS установлен на сервере с IP-адресом 192.168.32.100. Для перенаправления запросов на ранее настроенный сервер (и, для примера, на серверы Google 8.8.8.8 и 4.4.4.4) следует раскомментировать в файле конфигурации  /etc/bind/named.conf.options внутри секции options строки

и указать адреса серверов, которым нужно передавать запросы:

Можно , но не обязательно, ещё добавить список интерфейсов компьютера, через сервис DNS должен принимать запросы, а также запретить работу по IPv6:

  • сохраняем файл конфигурации
  • проверяем правильность конфигурации командой (если команда не выдаёт никаких сообщений – значит ошибок нет)

sudo named-checkconf

sudo systemctl restart bind9

Проверить работоспособность и эффективность кеширующего DNS-сервера можно с помощью инструмента dig:

Посылаем первый запрос:

В ответе на запрос видно, что время ответа составило 15 msec. Посылаем второй запрос например через через 5 секунд:

Время ответа на запрос при работающем кешировании должно существенно сократиться.

Вариант простой настройки “локальный сервер dns”

Это вариант настройки собственного полноценного DNS-сервера, обслуживающего собственную локальную сеть (собственный DNS-домен). Создание DNS-сервера в локальной сети позволяет организовать единое пространство имён для всех сетевых служб и пользователей.

Для примера, предположим, что у нас есть

Настройка конфигурации bind:

  • на сервере DNS файл конфигурации /etc/bind/named.conf.options используем из предыдущего примера:
  • создаём каталог для хранения файлов данных, и копируем в созданный каталог образцы файлов данных:

Включение аутентификации по ключам.

В работе

Для рутокен эцп

При установке новой версии opensc потребовалось удовлетворить зависимости пакетов. Для этого были взяты следующие пакеты из репозитория Debian squeeze:

Добавляем резервный сервер.

Как и в примере ранее, предположим, что у нас есть

Для добавления резервного сервера

  • вносим изменения в файл конфигурации /etc/bind/named.conf.local.
  • проверяем корректность конфигурации и перезапускаем сервис

named-checkconfsystemctl restart bind9

Добавляем служебные записи (srv-записи).

Служебная запись (SRV-запись) — стандарт в DNS, определяющий имя хоста и номер порта серверов для определённых служб. Определяется в RFC 2782. Могут использоваться в различных протоколах, например, в Kerberos.

Занесение сертификата в список доверенных

На данном этапе нам осталось только прочитать с токена сертификат с нужным ID и записать его в файл доверенных сертификатов:

$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Запрет опроса ipv6-cерверов

Для того, чтобы сервер не тратил ресурсы на попытки опроса недоступных корневых серверов, работающих по протоколу IPv6 (например, когда протокол IPv6 не поддерживается сетью), в файл парамеров сервера можно добавить секцию:

Имена и доступность компьютеров

Сервис Kerberos следует устанавливать в сети, в которой уже настроена служба DNS. Каждому серверу, входящему в область Kerberos, должно быть присвоено Полное Квалифицированное Доменное Имя (Fully Qualified Domain Name, FQDN).Настроенный DNS-сервис должен обеспечивать прямое и обратное (реверсивное)

Проверить настройку прямого и обратного разрешения имён можно командами:

nslookup <FQDN_имя_сервера>nslookup <IP_адрес_сервера>

(для использования команды nslookup следует установить пакет dnsutils: apt install dnsutils)

Для проверки доступности компьютеров можно использовать команду ping:

Конфигурация pam

Если приложению требуется аутентификация, то оно должно создать файл со своим именем в каталоге /etc/pam.d, в котором должны быть указаны модули, с помощью которых производится аутентификация и прочие действия. Посмотрим, что лежит в каталоге /etc/pam.d в Ubuntu 11.10

Модуль pam и его зависимости

Для осуществления аутентификации по токену были установлены пакеты:

Настройка bind9 для работы с samba ad

Параметры настройки BIND9 и BIND9_DLZ для использования в качестве DNS-сервера домена см. BIND9 как DNS-сервер для Samba AD

Настройка dns для автоматизации подключения клиентов

Для автоматического получения клиентами адреса сервера Kerberos можно использовать специальные настройки сервера DNS: служебные записи (SRV-записи).Пример таких записей для службы Kerberos см. в статье про сервер DNS

Настройка pam_p11

К счастью, нам не почти не придется править конфиги руками. Достаточно только создать файл /usr/share/pam-configs/p11 со следующим содержанием:

Name: Pam_p11 
Default: yes 
Priority: 800 
Auth-Type: Primary 
Auth: sufficient pam_p11_opensc.so /usr/lib/opensc-pkcs11.so

Интерес предоставляет последняя строчка конфига, в которой мы указываем тип модуля, имя библиотеки и параметры, передаваемые модулю. Наш модуль принимает в качестве параметра путь к библиотеке PKCS#11.


Теперь нам осталось только выполнить команду

$ pam-auth-update

В появившемся диалоге необходимо выбрать pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication. Поскольку в конфигурационном файле профиля было указано, что модуль будет «sufficient», то при получении от нашего модуля ответа «PAM_SUCCESS» весь процесс аутентификации будет считаться успешным.

Разработка и применение модуля PAM для аутентификации в Astra Linux с использованием Рутокен ЭЦП и Рутокен S / Хабр

Настройка авторизации клиентов через kerberos

Для обеспечения возможности авторизации пользователей через Kerberos требуется дополнительно установить пакет libpam-krb5:

apt install libpam-krb5

После установки пакета необходимые модули авторизации будут автоматически добавлены в стек авторизации PAM.

Настройка клиента. проверка работоспособности

Создайте на клиенте каталог /etc/krb5/. Скопируйте в /etc/krb5/ сертификат CA (cacert.pem) c сервера.

Настройте kerberos в /etc/krb5.conf. Секцию [libdefaults] дополните следующими строками.

Настройка клиентов

Клиентским компьютерам после стандартной установки ОС настройка не требуется.

Настройка пакета (сервер kerberos)

При установке пакета будет создан файл конфигурации сервиса /etc/krb5kdc/kdc.conf со стандартным содержимым, в котором автоматически будет указано имя области Kerberos, полученное из FQDN сервера, на котором выполняется установка:

Kerberos использует для контроля доступа к администрированию сервиса Списки Управления Доступом (Access Control List, ACL) .По умолчанию, список располагается в файле /etc/krb5kdc/kadm5.acl.

Читайте также:  Как использовать ключ эцп

Настройка службы

Конфигурационные файлы находятся в каталоге /etc/bind.При установке BIND9 автоматически создаются следующие конфигурационные файлы:

Подробности о конфигурационных параметрах см. в руководстве man named.conf (5).

Немного истории

В старые добрые времена если приложению в Linux требовалось запросить аутентификацию пользователя, то ему приходилось обращаться к файлам /etc/passwd и /etc/shadow. Такой подход был прост как пробка, но при этом разработчикам приходилось думать не только о работе с файлами, но и о вопросах безопасности.

Решением тому стал проект Linux-PAM. К слову сказать, сама архитектура PAM была впервые предложена компанией Sun в октябре 1995 года, а в августе 1996 года инфраструктура Linux-PAM была включена в дистрибутив Red Hat Linux. В настоящее время существуют три основных реализации PAM:

  1. Linux-PAM – основная реализация архитектуры PAM, рассматривается нами в этой статье
  2. OpenPAM – альтернативная реализация PAM, используемая в BSD-системах и Mac OS X
  3. Java PAM – Java-обертка над Linux-PAM

Подготовка к установке

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

Далее в примере используются

Подготовка смарт-карты. выпуск ключей и сертификата пользователя

Убедитесь в том, что установлены пакеты libengine-pkcs11-openssl и opensc. Подключите устройство, которое следует подготовить.

Проинициализируйте устройство, установите PIN-код пользователя. Помните, что инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления.

Для инициализации необходимо воспользоваться утилитой pkcs11-tool.

pkcs11-tool –slot 0 –init-token –so-pin 00000000 –label ‘JaCarta PKI’ –module /lib64/libASEP11.so,

где:

–slot 0

— указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;

–init-token

– команда инициализации токена;

–so-pin 00000000

– PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;

–label ‘JaCarta PKI’

– метка устройства;

–module /lib64/libASEP11.so

— указывает путь до библиотеки libASEP11.so. Устанавливается в рамках пакета idprotectclient см. раздел “Установка драйверов на сервер и клиент”.

Для задания PIN-кода пользователя используйте команду:/

pkcs11-tool –slot 0 –init-pin –so-pin 00000000 –login –pin 11111111 –module /lib64/libASEP11.so,

где:

–slot 0

— указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;

–init-pin

– команда установки PIN-кода пользователя;

–so-pin 00000000

– PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;

–login

Практическое использование

В качестве подопытного дистрибутива можно было бы взять свежую Ubuntu, но учитывая то, что в 12.04 все слишком хорошо работает, мы решили с пользой для общего дела настроить аутентификацию в релизе «Смоленск» операционной системы Astra Linux Special Edition по USB-токенам Рутокен ЭЦП и Рутокен S.

Разработка и применение модуля PAM для аутентификации в Astra Linux с использованием Рутокен ЭЦП и Рутокен S / Хабр

Пример демо-зоны

  • Сервер — Astra Linux Smolensk SE 1.5 4.2.0-23-generic, x86_64, с установленными пакетами:
    • JaCarta IDProtect 6.37;
    • libccid;
    • pcscd;
    • libpcsclite1;
    • krb5-pkinit;
    • libengine-pkcs11-openssl;
    • opensc.
  • Клиент — Astra Linux Smolensk SE 1.5 4.2.0-23-generic, x86_64, с установленными пакетами:
    • JaCarta IDProtect 6.37;
    • libccid;
    • pcscd;
    • libpcsclite1;
    • krb5-pkinit.

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

Простой путь (через браузер)

Для получения тестового сертификата используйте

. Процесс займёт не более 5 минут.

Путь гика (через консоль и, возможно, компилятор)

Проверьте версию OpenSC $ opensc-tool --version


Если версия меньше чем 0.20, то обновитесь или соберите

из нашего GitHub-а (на момент выхода этой статьи релиз 0.20 ещё не выпущен) или из ветки master основного проекта OpenSC не позднее

Генерируем ключевую пару с параметрами:–key-type: GOSTR3410-2021-512:А (ГОСТ-2021 512 бит c парамсетом А), GOSTR3410-2021-256:A (ГОСТ-2021 256 бит с парамсетом A)

–id: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII. Используйте только ASCII-коды печатных символов, т.к. id нужно будет передать OpenSSL в виде строки. Например, ASCII-кодам “3132” соответствует строка «12». Для удобства, можно воспользоваться онлайн-сервисом конвертации строки в ASCII-коды.

$ ./pkcs11-tool –module /usr/lib/librtpkcs11ecp.so –keypairgen –key-type GOSTR3410-2021-512:A -l –id 3132

Далее будем создавать сертификат. Ниже будет описано два пути: первый через УЦ (мы будем использовать тестовые УЦ), второй – самоподписанный. Для этого сначала надо установить и настроить OpenSSL версии 1.1 или новее для работы с Рутокен через специальный модуль rtengine используя руководство Установка и настройка OpenSSL.Например: для ‘–id 3132’ в OpenSSL надо указывать “pkcs11:id=12”.

Можно воспользоваться услугами тестового УЦ, коих много, например, вот, вот и вот, для этого создадим запрос на сертификат

Другой вариант – можно поддаться лени и создать самоподписанный$ openssl req -utf8 -new -keyform engine -key “pkcs11:id=12” -engine rtengine -out req.csr

Загружаем сертификат на устройство$ openssl req -utf8 -x509 -keyform engine -key “pkcs11:id=12” -engine rtengine -out cert.cer

Разработка модуля аутентификации для pam

В этом разделе мы разберем исходный код модуля pam_p11 и рассмотрим основные моменты, которым стоит уделить внимание при написании своего собственного модуля.

Синхронизация времени

Протокол Kerberos требует соответствия показаний часов всех клиентов и серверов, и при рассинхронизации часов аутентификация становится невозможной.Простой и стандартный путь обеспечения синхронизации – использование сервиса Network Time Protocol (NTP).

Собственно разработка модуля


В зависимости от функционала модуля, PAM может требовать от него наличия следующих функций:

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

Для работы с PAM необходимо определить специальные константы, а только затем подключить заголовочные файлы:

#define PAM_SM_AUTH
#define PAM_SM_ACCOUNT
#define PAM_SM_SESSION
#define PAM_SM_PASSWORD
#include <security/pam_appl.h>
#include <security/pam_modules.h>

Эти константы необходимы, чтобы PAM знал, что наш модуль может выполнять все функции, описанные выше. Конечно, если мы реализуем только аутентификацию, то остальные функции можно отбросить, но разработчики pam_p11 решили, что надежнее будет поставить заглушки вместо неиспользуемых функций.

Читайте также:  Государственные закупки: актуальные государственные тендеры, госзаказы и госзакупки


Приступим к написанию функции pam_sm_authenticate. Она имеет следующую сигнатуру:

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv);

Из важных параметров тут стоит отметить:

Функция должна вернуть одно из следующих значений:


Внутри нашего модуля мы будем пользоваться библиотекой libp11 для работы с API PKCS#11 и OpenSSL для работы с сертификатами.

Первым делом определим переменные, которые нам потребуются:

Создание ключа и сертификата

Для начала создаем ключевую пару RSA длины 2048 бит c ID «45» (id стоит запомнить, он понадобится при создании сертификата).

$ pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45
 <вводим PIN пользователя>


Проверим сгенерированный ключ:

$ pkcs15-tool --list-keys
Using reader with a card: Aktiv Rutoken ECP 00 00 
Private RSA Key [Private Key] 
Object Flags : [0x3], private, modifiable 
Usage : [0x4], sign Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
ModLength : 2048 
Key ref : 1 (0x1) 
Native : yes 
Path : 3f001000100060020001 
Auth ID : 02 
ID : 45

Теперь с помощью OpenSSL создадим самоподписанный сертификат. Запускаем openssl и подгружаем модуль поддержки pkcs11:

$ openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
Loaded: (pkcs11) pkcs11 engine

Создаем сертификат в PEM-формате:

OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem –text


В последней команде 1:45 — это пара :. Таким образом, мы создали сертификат на базе ключевой пары, хранящейся на токене. При этом в текущем каталоге должен создаться файл сертификата с именем cert.pem.

Теперь сохраним сертификат на токен:

$ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem 
<Вводим PIN пользователя>

Структура pam

Для начала разберемся, что же такое «Модуль PAM». Модули представляют собой библиотеки, в которых прописаны обработчики операций, которые может направлять к ним сам PAM. Для примера, стандартный модуль pam_unix умеет следующее:

Ниже представлена общая схема работы PAM

Разработка и применение модуля PAM для аутентификации в Astra Linux с использованием Рутокен ЭЦП и Рутокен S / Хабр


Сильно упрощенная схема аутентификации в приложении, использующем PAM, выглядит следующим образом:

  1. Приложение инициализирует библиотеку PAM (libpam.so)
  2. PAM в соответствии с конфигурационным файлом для приложения обращается к требуемым модулям
  3. Модули выполняют возложенные на них действия
  4. Приложению возвращается результат операции

Конечно, PAM позволяет проводить не только аутентификацию. Функции PAM классифицируются по типу модулей. В скобках указаны обозначения модулей в конфигурационных файлах:

Сейчас нам интересна только аутентификация, поэтому рассмотрение остальных функций оставим любопытству читателя.

Установка дополнительных пакетов


Для начала пришлось установить некоторые пакеты. Для работы Рутокен S необходима старая версия OpenSC: 0.11.13, а для работы Рутокен ЭЦП – более новая: 0.12.2. В качестве middleware для обоих токенов используется OpenCT версии 0.6.20.

В итоге были поставлены пакеты, переданные разработчиками дистрибутива:

Установка драйверов на сервер и клиент

Для обеспечения работы со смарт-картой JaCarta PKI на клиенте и сервере установите следующие пакеты: libccid, pcscd, libpcsclite1. После установки этих обязательных пакетов установите пакет драйверов IDProtectClient, который можно загрузить с официального сайта “Аладдин Р.Д.”.

Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit на клиенте и сервере.


Для обеспечения возможности выпуска ключей и сертификатов на JaCarta PKI на сервере также установите пакеты libengine-pkcs11-openssl и opensc.

Установка и настройка центра сертификации на сервере

В качестве центра сертификации (CA) будет использован OpenSSL.

OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT.

Установка пакета

Пакет bind9 входит в стандартные дистрибутивы ОС Astra Linux. Установку службы DNS bind9 можно выполнить из графического менеджера пакетов, или из командной строки:

sudo apt install bind9

При установке пакета bind9 будет автоматически уставновлен пакет инструментов командной строки bind9utils. Из этих инструментов следует отметить:

  • named-checkconf  — инструмент проверки синтаксиса файлов конфигурации;
  • named-checkzone — инструмент проверки файлов зон DNS;
  • rndc                             — инструмент управления службой DNS.

sudo apt install dnsutils

В составе пакета dnsutils будут установлены следующие инструменты:

  • dig              – инструмент для опроса DNS-серверов и проверки их реакции
  • nslookup – инструмент для проверки преобразования имен в IP-адреса
    (далее в тексте используется термин “разрешение имён”)
  • nsupdate – инструмент для динамического обновления записей DNS

Установка пакета (сервер)

Пакеты сервиса Kerberos входят в стандартные дистрибутивы Astra Linux, и могут быть установлены с помощью графического менеджера пакетов, или из командной строки командой

Заключение

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector