Локальная аутентификация при помощи Рутокен ЭЦП в операционной системе ROSA Enterprise Linux Server
Начальные требования
- Установленная система ROSA Enterprise Linux Server версии не ниже 6.8 в конфигурации «Стандартный сервер РОСА»
- Доступ к репозиториям
- Устройство Рутокен ЭЦП/Рутокен ЭЦП Flash/Рутокен ЭЦП SC вместе с ридером. На устройство должен быть записан сертификат
Для получения доступа к репозиториям получите у службы поддержки ключ и выполните следующую команду с правами администратора:
echo <ключ> > /etc/rosa-support-id-server
Применимость
В инструкции описаны установка и настройка утилит ROSA Enterprise Linux Server, необходимых для аутентификации с использованием Рутокен ЭЦП. В примере используется архитектура AMD64; для 32-разрядной системы все действия будут аналогичны с точностью до названий папок.
После выполнения нижеприведённой процедуры аутентификация по Рутокен ЭЦП станет возможной, но не будет являться обязательной.
Установка компонентов
Установите требуемые и удалите конфликтующие утилиты (требуются права администратора):
su yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard yum remove coolkey
Установите библиотеку PKCS#11 для Рутокен ЭЦП (важно устанавливать библиотеку после установки утилит):
- Перейдите на сайт Рутокен: https://www.rutoken.ru/support/download/pkcs/.
- Откройте вкладку «Пользователям GNU/Linux» и нажмите на ссылку «Библиотека rtPKCS11ecp для GNU/Linux RPM 64-bit (x64)».
- Скачайте и установите пакет (требуется пароль администратора).
Настройка
Проверка отображения устройства в системе и наличия на нём нужной информации
- Запустите pcscd (требуются права администратора):
su
- Завершите существующий процесс pcscd, если таковой имелся:
killall pcscd
С этого момента токен должен быть вставлен в соответствующий разъём.
- Выполните:
pcscd -adfffff
- Откройте отдельную вкладку или окно терминала и выполните в ней следующую команду:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -T
В выводе должны быть видны параметры и название устройства. Пример вывода приведён ниже.
- Проверьте наличие на токене нужной информации при помощи следующей команды (требуется пароль от токена):
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -O -l
В выводе обязан присутствовать Certificate Object
. Такие параметры, как ID
и label
, могут отличаться от приведённых ниже.
Добавление сертификата в доверенные
- Создайте базу данных доверенных сертификатов (требуются права администратора):
su mkdir /etc/pam_pkcs11/nssdb chmod 0644 /etc/pam_pkcs11/nssdb certutil -d /etc/pam_pkcs11/nssdb -N (создание базы данных) modutil -dbdir /etc/pam_pkcs11/nssdb/ -add p11-kit-trust -libfile /usr/lib64/pkcs11/p11-kit-trust.so (утилита потребует отключить браузер)
- Скопируйте сертификат с токена (требуется пароль токена. Параметр ID можно взять из вывода команды
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -O -l)
:
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt (команда запишет сертификат в текущую директорию как cert.crt)
- Добавьте сертификат в доверенные (требуются права администратора):
su cp cert.crt /etc/pki/ca-trust/source/anchors/ (команда вводится из директории, в которую был помещён сертификат) update-ca-trust force-enable update-ca-trust extract (может занять некоторое время)
Изменение конфигурационных файлов
Для изменения конфигурационных файлов потребуются права администратора.
pam_pkcs11.conf
- Создайте (например, на рабочем столе) текстовый файл pam_pkcs11.conf со следующим содержимым:
pam_pkcs11 { nullok = false; debug = true; 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 = subject; mapper_search_path = /usr/lib64/pam_pkcs11; mapper subject { debug = true; module = internal; ignorecase = false; mapfile = file:///etc/pam_pkcs11/subject_mapping; } }
- Поместите файл в каталог /etc/pam_pkcs11/:
cd /etc/pam_pkcs11/ su (получение прав администратора) mv pam_pkcs11.conf pam_pkcs11.conf.default (резервное копирование) mkdir cacerts crls cp /home/<имя_пользователя>/Desktop/pam_pkcs11.conf /etc/pam_pkcs11/
system-auth
- Подключите модуль к системе авторизации PAM:
su (получение прав администратора)
- Откройте файл system-auth в редакторе nano или mcedit:
nano /etc/pam.d/system-auth
- Добавьте вверху следующую строку:
auth sufficient pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so debug
- Сохраните файл (<Ctrl+O>) и закройте редактор (<Ctrl+X>).
subject_mapping
- Выполните команды:
su pkcs11_inspect
- Скопируйте вывод предыдущей команды в файл /etc/pam_pkcs11/subject_mapping и укажите, какому пользователю принадлежит сертификат.
Строка конфигурации имеет вид:
Вывод команды pkcs11_inspect -> <имя_пользователя>
Проверка аутентификации через консоль
- Откройте новое окно или вкладку консоли.
- Выполните команду
su <имя_пользователя>
(имя пользователя указано в subject_mapping).
Пример вывода:
После проверки работы аутентификации через консоль можно убрать режим отладки. Для этого в файле /etc/pam.d/sysauth в добавленной строке уберите слово debug
, а в файле /etc/pam_pkcs11/pam_pkcs11.conf поставьте напротив debug
false
вместо true
.
Настройка блокировки экрана
- Откройте для редактирования файл pkcs11_eventmgr (требуются права администратора):
su cd /etc/pam_pkcs11/ mv pkcs11_eventmgr.conf pkcs11_eventmgr.conf.default (резервное копирование) nano pkcs11_eventmgr.conf
После редактирования конфигурационный файл должен выглядеть следующим образом:
pkcs11_eventmgr { # Run in background? Implies debug=false if true daemon = true; # show debug messages? debug = false; # polling time in seconds polling_time = 1; # expire time in seconds # default = 0 ( no expire ) expire_time = 0; # pkcs11 module to use pkcs11_module = /usr/lib64/librtpkcs11ecp.so; # # list of events and actions # Card inserted event card_insert { # what to do if an action fail? # ignore : continue to next action # return : end action sequence # quit : end program on_error = ignore ; } # Card has been removed event card_remove { on_error = ignore; action = "gdmflexiserver"; } # Too much time card removed event expire_time { on_error = ignore; action = "/bin/false"; } }
- Добавьте утилиту pkcs11_eventmgr в автозагрузку. Для этого отредактируйте файл .bash_profile пользователя, проходящего аутентификацию:
nano /home/<имя_пользователя>/.bash_profile
- Добавьте в конец файла строку, запускающую pkcs11_eventmgr.
Пример файла .bash_profile после редактирования:
При выборе аутентификации при помощи токена экран будет выглядеть примерно так: