Table of Contents | ||||
---|---|---|---|---|
|
Info |
---|
Подключите устройств семейства Рутокен ЭЦП к компьютеру. |
Перед началом работы, установите следующие пакеты:
Code Block |
---|
sudo yumdnf update sudo yumdnf install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit |
Загрузите модуль librtpkcs11ecp.so и установите:
Code Block |
---|
sudo rpm -i librtpkcs11ecp-2X.0X.4X.0X-1X.x86_64.rpm |
Создание ключей и сертификатов
Для Проверьте наличие libpkcs11.so по пути: /usr/lib64/engines-1.1/
. Если ее нет, то для начала установите libpkcs11.so для того, чтобы OpenSSLL OpenSSL смог общаться к РутокенамРутокеном.
Способ 1
Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.
...
Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда по для их созданию:
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45 |
Параметр id задает идентификатор ключевой пары.
Теперь нужно получить сертификат:
- создайте самоподписанный сертификат:
Code Block |
---|
openssl
OpenSSL> openssl engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.crt -outform DER
|
- или создайте запрос на сертификат для передачи его в УЦ:
Code Block |
---|
openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -out request.req
|
Сохраните сертификат на токенеПоместите его на токен:
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45 |
Проверьте, что токен подключен и сертификаты с ключами на нем имеютсясохранены сертификаты и ключи.
Добавление сертификата в список доверенных
Создайте базу данных доверенных сертификатов
Code Block |
---|
sudo mkdir /etc/pam_pkcs11/nssdb sudo chmod 0644777 /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):
Code Block |
---|
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt |
...
Добавьте сертификат в доверенные:
Code Block |
---|
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 со следующим содержимым:
Code Block |
---|
pam_pkcs11 { nullok nullok = false; debug debug = truefalse; use use_first_pass = false; use use_authtok = false; card card_only = false; wait wait_for_card = false; use use_pkcs11_module = rutokenecp; # # Aktiv Rutoken ECP pkcs11 pkcs11_module rutokenecp { module module = /usr/lib64/librtpkcs11ecp.so; slot slot_num = 0; support support_thread = true; ca ca_dir = /etc/pam_pkcs11/cacerts; crl crl_dir = /etc/pam_pkcs11/crls; cert cert_policy = signature; } use use_mappers = subjectdigest; mapper mapper_search_path = /usr/lib64/pam_pkcs11; mapper subject mapper digest { debug debug = truefalse; module module = internal; ignorecase algorithm = false"sha1"; mapfile mapfile = file:///etc/pam_pkcs11/subjectdigest_mapping; } } |
Поместите файл в каталог /etc/pam_pkcs11/:
...
Code Block |
---|
cd /etc/pam_pkcs11/ sudo mv pam_pkcs11.conf pam_pkcs11.conf.default #резервное копирование sudo mkdir cacerts crls sudo cp /path/to/your/pam_pkcs11.conf /etc/pam_pkcs11/ |
...
Регистрация модуля PAM PKCS11 для аутентификации в системе
Подключите модуль к системе авторизации PAM:
Code Block |
---|
sudo vim /etc/pam.d/system-auth # Для входа по Рутокена на экране приветствия sudo vim /etc/pam.d/password-auth |
Добавьте Перед первым использованием модуля pam_unix добавьте туда строку со следующим содержимым, перед первым ипользованием модуля pam_unix:
Code Block |
---|
auth sufficient pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so |
Сохраните файл и узнайте описание поля вашего сертификата с помощью следующей команды:
Code Block |
---|
sudo pkcs11_inspect |
На выходе вы увидите сообщение:
...
В результате отобразится сообщение:
|
Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/subjectdigest_mapping в формате:Вывод
Code Block |
---|
<вывод команды pkcs11_ |
...
inspect> -> <имя_пользователя> |
...
|
Пример заполнения файла:
...
|
Попробуйте аутентифицироваться:
Code Block |
---|
su lo1ol
|
В экране приветствия аналогично:
...
<username>
|
Терминал должен запросить PIN код рутокена:
|
В окне экрана приветствия аналогично:
Настройка автоблокировки
В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.
Для настройки pkcs11_eventmgr служит файл конфигурации - /etc/pam_pkcs11/pkcs11_eventmgr.conf
Пример файла конфигурации представлен ниже:
Code Block | ||
---|---|---|
| ||
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 = "cinnamon-screensaver-command --lock";
}
# Карта долгое время извлечена
event expire_time {
# Оставляем значения по умолчанию (ничего не происходит)
on_error = ignore;
action = "/bin/false";
}
} |
После этого добавьте приложение pkcs11_eventmgr в автозагрузку и перезагрузите компьютер.
Для этого создайте файл /etc/xdg/autostart/smartcard-screensaver.desktop
Code Block | ||
---|---|---|
| ||
[Desktop Entry]
Type=Application
Name=Smart Card Screensaver
Comment=Application to lock screen on smart card removal.
Exec=/usr/bin/pkcs11_eventmgr daemon
|