Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

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

sudo dnf update
sudo dnf install ccid opensc pcsc-tools p11-kit nss-tools python3-tkinter rpmdevtools libsss_sudo krb5-pkinit dialog openssl fedora-packager rpmdevtools gcc vim-common openssl-pkcs11 docbook-style-xsl openldap-devel openssl-devel pam-devel pcsc-lite-devel pkgconf

Загрузите модуль librtpkcs11ecp.so и установите:

sudo rpm -i librtpkcs11ecp-2.6.1.0-1.x86_64.rpm


Установка pam_pkcs11

Скачайте pam_pkcs11-X.Y.Z.tar.gz.

Далее, распакуйте архив и перейдите в распакованную папку.

tar xvzf pam_pkcs11-X.Y.Z.tar.gz

cd pam_pkcs11-X.Y.Z


Установите pam_pkcs11

./configure && make && sudo make install


Для конфигурации pam_pkcs11 перенесите из разархивированной папки и папки etc файл pam_pkcs11.conf.example в папку /etc/pam_pkcs11/pam_pkcs11.conf

Создайте папки /etc/pam_pkcs11/crls/ и /etc/pam_pkcs11/cacerts/ 


Убедиться, в наличии файла pam_pkcs11.so в папке  /usr/lib64/security/pam_pkcs11.so

Если pam_pkcs11.so находится в /usr/lib/local/security/pam_pkcs11.so, необходимо его перенести.

sudo mv /usr/local/lib/security/pam_pkcs11.so /usr/lib64/security/


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

Проверьте наличие  libpkcs11.so по пути: /usr/lib64/engines-3/. Если ее нет, то для начала установите libpkcs11.so для того, чтобы OpenSSL смог общаться к Рутокеном.

Для этого скачайте архив библиотеки libp11-X.Y.Z.tar.gz.

Разархивируйте пакет и перейдите в новую папку.

tar xvzf libp11-X.Y.Z.tar.gz

cd libp11-X.Y.Z

Для установки, введите следующую команду:

./configure && make && sudo make install


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

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

Параметр id задает идентификатор ключевой пары.


Создание сертификата и импорт его на токен через OpenSSL 3.x:

Для работы с pkcs11 engine необходимо сделать следующее:

Создать файл конфигурации engine.conf со следующим содержимым:

openssl_conf = openssl_init
 
[openssl_init]
engines = engine_section
 
[engine_section]
pkcs11 = pkcs11_section
 
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib64/engines-3/pkcs11.so
MODULE_PATH = /usr/lib64/librtpkcs11ecp.so
default_algorithms = ALL

  

При необходимости использовать pkcs11 engine указывать путь к файлу конфигурации engine.conf, например:

OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out cert.crt -subj "/CN=test/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/emailAddress=testuser@mail.com"


Сохраните сертификат на токене:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45

Проверьте, что токен подключен и на нем сохранены сертификаты и ключи.


Добавление сертификата в список доверенных 

Создайте базу данных доверенных сертификатов

sudo mkdir /etc/pam_pkcs11/nssdb
 
sudo chmod 0644 /etc/pam_pkcs11/nssdb
 
sudo certutil -d /etc/pam_pkcs11/nssdb -N # создание базы данных
 
sudo modutil -dbdir /etc/pam_pkcs11/nssdb/ -add p11-kit-trust -libfile /usr/lib64/pkcs11/p11-kit-trust.so


Выгрузите ваш сертификат с токена (если вы пользовались для получения сертификата вышеописанной инструкцией , то ID = 45):

pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt


Добавьте сертификат в доверенные:

sudo cp cert.crt /etc/pki/ca-trust/source/anchors/ # команда вводится из директории, в которую был помещён сертификат
 
sudo update-ca-trust force-enable
 
sudo update-ca-trust extract # может занять некоторое время


Настройка pam_pkcs11

Создайте (например, на рабочем столе) текстовый файл pam_pkcs11.conf со следующим содержимым:

pam_pkcs11 {
  nullok = false;
  debug = false;
  use_first_pass = false;
  use_authtok = false;
  card_only = false;
  wait_for_card = false;
  use_pkcs11_module = rutokenecp;
 
  # Aktiv Rutoken ECP
  pkcs11_module rutokenecp {
    module = /usr/lib64/librtpkcs11ecp.so;
    slot_num = 0;
    support_thread = true;
    ca_dir = /etc/pam_pkcs11/cacerts;
    crl_dir = /etc/pam_pkcs11/crls;
    cert_policy = signature;
  }
 
  use_mappers = digest;
 
  mapper_search_path = /usr/lib64/pam_pkcs11;
 
  mapper digest {
   debug = false;
   module = internal;
   algorithm = "sha1";
   mapfile = file:///etc/pam_pkcs11/digest_mapping;
  }
 
}

Поместите файл в каталог /etc/pam_pkcs11/:


cd /etc/pam_pkcs11/
 
sudo mv pam_pkcs11.conf pam_pkcs11.conf.default #резервное копирование
 
sudo cp /path/to/your/pam_pkcs11.conf /etc/pam_pkcs11/


Регистрация модуля для аутентификации в системе 

Подключите модуль к системе авторизации PAM:

sudo vim /etc/pam.d/system-auth
# Для входа по Рутокена на экране приветствия
sudo vim /etc/pam.d/password-auth


Перед первым использованием модуля pam_unix добавьте туда строку со следующим содержимым:

auth   sufficient             pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so


Сохраните файл и узнайте поля вашего сертификата с помощью следующей команды:

sudo pkcs11_inspect

В результате отобразится сообщение:

Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/digest_mapping в формате:

<вывод команды pkcs11_inspect> -> <имя_пользователя>

Попробуйте аутентифицироваться:

su <username>

В окне экрана приветствия аналогично:


Настройка автоблокировки

В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.

Убедиться, в наличии файла pkcs11_eventmgr в папке /usr/bin/pkcs11_eventmgr

Если pkcs11_eventmgr находится в  /usr/local/bin/pkcs11_eventmgr, необходимо его перенести.

sudo mv /usr/local/bin/pkcs11_eventmgr /usr/bin/

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

Название графической оболочки

echo $XDG_CURRENT_DESKTOP

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

MATE → mate-screensaver
X-Cinnamon → cinnamon-screensaver
fly → <Отсутствует>
KDE → kde
GNOME → xdg-screensaver


Для настройки pkcs11_eventmgr служит файл конфигурации - /etc/pam_pkcs11/pkcs11_eventmgr.conf

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

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
      
    # Настройка сообщений отладки
    debug = false;
  
    # Время опроса в секундах
    polling_time = 1;
  
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
  
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = /usr/lib64/librtpkcs11ecp.so;
  
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
  
        action = "/bin/false";
    }
  
    # Карта извлечена
    event card_remove {
        on_error = ignore;
          
        # Вызываем функцию блокировки экрана
        action = "xdg-screensaver lock";
    }
  
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
  
        action = "/bin/false";
    }
}


После этого добавьте приложение pkcs11_eventmgr в автозагрузку и перезагрузите компьютер.

Для этого создайте файл ~/.config/autostart/smartcard-screensaver.desktop

[Desktop Entry]
Type=Application
Name=Smart Card Screensaver
Comment=Application to lock screen on smart card removal.
Exec=/usr/bin/pkcs11_eventmgr daemon



  • No labels