Linux on smart card reader


This page explains how to setup your system in order to use a smart card reader.



If the card reader does not have a PIN pad, append the line(s) and set enable_pinpad = false in the opensc configuration file /etc/opensc.conf .

Start and/or enable the pcscd.service .

Scan for card reader

Install pcsc-tools and start the pcsc_scan utility, then connect the Smart card reader and finally insert a card. If you see output like this, the smart card reader and also the card have been successfully recognized.


This article or section is out of date.

Mozilla Firefox

The browser needs to set the new security-related device. Open the Security Devices page (reach it via Preferences > Privacy & Security > Certificates), then click Load and set the Module Name to CAC Module and module filename to /usr/lib/ .


Chromium uses NSS. Open a shell in your home directory and verify that the CAC Module is not already present:

If not, close any browser and add the module (an user interaction for confirmation is required):

Check for the correct execution of the command:

Tips and tricks

Smargo/TV Card reader

When interfacing with a TV-card for live TV and recording (PVR/DVR), you may need to assign the smartcard reader to the video user group allowing decryption. When using a Smargo Smartreader consider the following udev rule:

Set /dev/smargo as the reader device when using softcam applications like OSCam.


If using packages from the GnuTLS suite which utilize p11-kit, such as p11tool, the the OpenSC driver might not properly load. This can be determined if you run p11tool —list-tokens and you do not see your hardware token in the list.

Install the opensc-p11-kit-module AUR package in order to enable loading of the OpenSC module.

Alternatively, it is possible to manually create a file that allows the OpenSC driver to be properly loaded:


Firefox can’t access data

If the browser is not able to use the smart card data, probably it is not aware of the service which provides access to the device. This happens if you plug in the smart card reader after you open Firefox. To solve this issue, simply restart Firefox.


PC/SC can conflict with GnuPG for access to smartcards. See Ludovic Rousseau’s blog and GnuPG#GnuPG with pcscd (PCSC Lite).


Linux Mint Forums

Welcome to the Linux Mint forums!

Smartcard reader

Smartcard reader

Post by GS3 » Fri Nov 20, 2020 6:17 am

My LM19 Cinnamon box has a USB card reader which reads different types of memory cards including a contact smartcard reader.

If I insert an SD memory card a green LED lights and the system reads the card correctly. So far so good.

If I insert a smartcard the LED turns red but by experimenting I see it is only detecting a physical card in the slot. I can insert any type of card in any direction and the same thing happens so I guess it is only indicating it can detect a card but cannot read it.

This is what lsusb says: ID 0bda:0161 Realtek Semiconductor Corp. Mass Storage Device

I guess it could be that the smartcard reader is a different logical device from the other memory card readers and needs a different driver?

How can I know what I need to do so I can use a smartcard and the certificate it holds?

Читайте также:  Как удалить windows после установки linux

Re: Smartcard reader

Post by gittiest personITW » Fri Nov 20, 2020 8:04 am

Depends on the model of your smartcard or you could go all Wildwest and Timeshift create, install driver, restore, install t’other driver.

If you would like to be a bit more square, try the following and see if that gives you any info.

Re: Smartcard reader

Post by GS3 » Fri Nov 20, 2020 10:04 am

Depends on the model of your smartcard or you could go all Wildwest and Timeshift create, install driver, restore, install t’other driver.

If you would like to be a bit more square, try the following and see if that gives you any info.

The Realtek site shows two different Linux drivers and I do not know if any of the two would work and I would rather not just start swinging a stick in the dark hoping to hit the jackpot because it is more likely that I would do more damage than good. In fact, I do not even know if a missing driver is the cause of the problem.

I am hoping to narrow down the diagnosis first.

This card reader is a strange device. Some years ago I needed an SD card reader and the guy at the little computer corner store sold me this «internal» card reader which just hooks up to a USB port. I did read the SD card but I found a number of weird things about it.

First, it has an infrared receiver. When I told the guy at the store he said no way, impossible. It does have an IR receiver but it is not a standard IrDA but rather an esoteric «Microsoft eHome Infrared Transceiver» with very narrow and specific uses. «eHome» seems to be some obscure Microsoft thing. I have no use for it so it just goes unused.

0bda:0161 Realtek Semiconductor Corp. Mass Storage Device
(realtek smartcard reader with MCE remote, usb in front and sd/cf/sim reader)

Then I have no idea how to even begin to diagnose the problem with the Smartcard reader. How can I know what chip it has? I cannot know if the computer needs some driver or if the reader is just not recognizing the Smartcard reader or what.

I have a notion that the device has three separate interfaces, one for the Smartcard reader, one for the memory card(s) reader(s) and one for the eHome interface. I seem to remember that’s how they showed up in Windows Device Manager.

The memory card reader is working and the eHome interface I do not need. The question is how can I know why the Smartcard reader is not working. Rather than swinging a stick in the dark I would like to be able to do some focused tests that would allow me to determine objectively if I need a driver and what driver or if it is a problem with the card or something else.


Смарт-карты для входа на Ubuntu

Смарт-карты сегодня повсюду — платежные карты, паспорта, водительские удостоверения, школьные и рабочие пропуска. Эти небольшие карточки с защитой от несанкционированного доступа и чипами обычно содержат информацию, которая идентифицирует нас и предоставляет доступ к защищенным ресурсам.

Одно из самых популярных применений смарт-карт — контроль доступа в здания и к компьютерным системам. Таким образом они используются, например, в правительстве США. Государственные учреждения обязаны соблюдать строгие правила безопасности, которые требуют надежную аутентификацию для доступа к конфиденциальным или ценным данным, хранящимся в ИТ-системах. Компании, которые работают с такими учреждениями, тоже должны соблюдать эти требования. Смарт-карты могут содержать сертификаты, пары открытого и закрытого ключей, PIN-коды и биометрические данные, например отпечатки пальцев и фотографию. Они действуют как уникальные идентификаторы при входе в здания или на компьютеры. Чипы на некоторых смарт-картах даже обеспечивают шифрование по стандарту FIPS 140-2.

Смарт-карты предлагают следующие преимущества:

Подтверждение личности с помощью секретных или уникальных данных, известных только уполномоченным сторонам

Проверка отсутствия изменений в данных.

Запрет несанкционированного доступа к данным. Обычно осуществляется с помощью шифрования

Гарантия авторства. Обычно реализуется с помощью цифровой подписи.

Владелец должен предъявить смарт-карту и ввести PIN-код. Вместе смарт-карта и PIN-код обеспечивают многофакторную аутентификацию, которая гарантирует более высокую степень защиты по сравнению с однофакторной аутентификацией (где используется, например, только пароль).

Читайте также:  Как создать скрипт на ярлык linux

В этой статье содержится информация о конфигурировании Ubuntu 18.04 LTS для настройки многофакторной аутентификации на смарт-картах для локального и удаленного входа в систему. В качестве примера мы возьмем смарт-карту PIVKey, поскольку она легко доступна и содержит несколько базовых учетных данных.

Предварительные требования

Программное обеспечение на клиенте смарт-карты

Установите следующие пакеты, чтобы получить доступ к конфигурации смарт-карты на Ubuntu:

libccid обеспечивает взаимодействие с ридерами смарт-карт CCID через менеджер ресурсов PC/SC Lite (pcscd);

csc-tools содержит полезные инструменты для смарт-карт;

opensc содержит утилиты для доступа к смарт-картам;

opensc-pkcs11 содержит библиотеки для доступа к смарт-картам;

libpam-pkcs11 предоставляет поддержку модуля PAM для входа с сертификатами X.509 с помощью PKCS 11.

Оборудование для клиента

Смарт-карта персональной идентификации PIV поддерживает FIPS 201 — стандарт для смарт-карт PIV в США. На сайте службы GSA опубликован список одобренных смарт-карт, которые можно использовать как PIV-карты. Карты приобретаются пустыми, а поставщики услуг по PIV добавляют на них учетные данные.

В этой статье мы рассматриваем в качестве примера смарт-карту PIVKey C910. PIVKey совместима со стандартом FIPS 201 и реализует спецификацию командного интерфейса NIST SP 800-73 Part 3.

Смарт-карта PIVKey содержит сертификат, пару открытого и закрытого ключей и PIN-коды для пользователя и администратора. В системах Linux карта доступна только для чтения. Вам потребуется инструмент администрирования PIVKey в Windows, чтобы загрузить на карту дополнительные сертификаты или изменить PIN-коды пользователя и администратора.

Для чтения содержимого и учетных данных смарт-карты PIVKey использовался ридер смарт-карт Identiv SCR3310v2.0 USB.

Настройка ридера смарт-карт

Указание ридера смарт-карт

После подключения ридера убедитесь, что операционная система распознает его, указав его с помощью opensc-tool.

Вставьте смарт-карту в ридер и убедитесь, что она распознана.

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

Модуль pam_pkcs11 позволяет системам, поддерживаемым PAM, использовать сертификаты X.509 для проверки подлинности. Модуль использует библиотеку PKCS 11, например openscpkcs11, чтобы получать доступ к смарт-картам для извлечения нужных учетных данных.

Процесс настройки pam_pkcs11:

Сопоставьте сертификат с пользователем.

Проверьте соответствие логина и пользователя.

Настройка в PAM:

Настройка модуля pam_pkcs11.

Добавление центров сертификации (ЦС) и списков отзыва сертификатов (CRL).

Настройка PAM для использования модуля pam_pkcs11.

Добавление общего имени (CN) для логина.

Настройка модуля pam_pkcs11

Создайте файл конфигурации pam_pkcs11.

Проверьте параметры модуля, cert_policy и use_pkcs11_module, определенные в записи pkcs11_module opensc <> в файле pam_pkcs11.conf. Параметр модуля должен содержать абсолютный путь к в системе. Параметр cert_policy должен включать oscp в качестве одной из политик проверки сертификата.

Сопоставители в модуле pam_pkcs11

Модуль PAM позволяет использовать сертификаты для входа. В большинстве систем на базе Linux определены пользователи, и для входа используется имя пользователя. Поэтому нужен способ сопоставить сертификат с определенным пользователем в системе. Модуль pam_pkcs11 предоставляет различные сопоставители сертификатов для выполнения этой задачи. Каждый сопоставитель использует определенную информацию из сертификата для сопоставления с пользователем в системе. Можно даже использовать сразу несколько сопоставителей. В таком случае, если первый определенный сопоставитель не находит пользователя в системе, вступает следующий и так далее, пока пользователь не будет найден.

В нашем примере мы используем сопоставитель pwent. Этот сопоставитель использует системный вызов getpwent(), чтобы изучить поля pw_name и pw_gecos каждого пользователя и найти соответствие имени CN. Если соответствие найдено, в качестве имени для входа возвращается pw_name. Затем этот результат сопоставляется с именем для входа PAM, чтобы определить, найдено ли соответствие.

Задайте pwent в качестве сопоставителя в файле pam_pkcs11.conf, изменив существующую запись.

Списки отзыва сертификатов и сертификаты ЦС

Модуль pam_pkcs11 должен знать центры сертификации (ЦС) для валидации сертификатов. Списки отзыва сертификатов (CRL) необязательны, но их тоже можно использовать для валидации сертификатов. Для этого выполните следующие действия:

Добавьте необходимые ЦС и списки CRL в каталоги, указанные в параметрах ca_dir и crl_dir в файле pam_pkcs11.conf.

Создайте хеш-ссылки на ЦС и списки CRL.

Примечание: В этой статье ЦС и списки CRL для PIVKey были экспортированы с сайта

Добавьте ЦС и списки CRL в соответствующие каталоги.

Создайте хеш-ссылки с помощью утилиты pkcs11_make_hash_link.

Настройка PAM

Следующий шаг — интеграция модуля pam_pkcs11 в стек PAM. Это можно сделать несколькими способами. Желаемая конфигурация зависит от политики безопасности. Следующие примеры интеграции демонстрируют нестрогие и строгие политики.

Ubuntu Desktop с gdm3

Модуль pam_pkcs11 можно интегрировать в стек PAM, чтобы использовать аутентификацию с помощью смарт-карт для входа через gdm3. Измените файл /etc/pam.d/gdm-password и включите модуль.

Читайте также:  Manjaro linux vs garuda linux

Ubuntu Server только для входа

Если указать sufficient в поле управления, будет использоваться следующий модуль PAM в стеке, если у пользователя нет смарт-карты для входа или вход с помощью смарт-карты не удался.

Ubuntu Server для универсальной аутентификации

При более строгом подходе может потребоваться аутентификация с помощью смарт-карты для всех сервисов входа или сервисов с поддержкой PAM. Многие сервисы PAM в каталоге /etc/ pam.d включают файл common-auth. Модуль pam_pkcs11 тоже можно разместить в этом файле, чтобы включить аутентификацию с помощью смарт-карты для всех сервисов, которые его содержат.

Измените файл /etc/pam.d/common-auth, чтобы включить в него модуль pam_pkcs11:

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

Для выполнения sudo в командной строке требуется вход со смарт-картой с указанной выше конфигурацией PAM.

Добавление имени CN

После настройки pam_pkcs11 и PAM для входов с сертификатами остается выполнить еще одно действие. Сопоставитель pwent требует, чтобы имя CN в сертификате находилось в поле /etc/passwd gecos пользователя. Имя CN должно извлекаться из сертификата на смарт-карте.

Извлеките сертификат с карты, выполнив следующие действия:

Получите ID сертификата на смарт-карте:

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

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

CN это ‘PIVKey BA366DFE3722C7449EC906B9274C8BAC’.

Измените файл /etc/passwd и добавьте это имя CN в поле gecos пользователя, которому принадлежит сертификат.

Этот сертификат принадлежит имени пользователя foo в файле /etc/passwd. Измените запись /etc/ passwd для имени пользователя foo.

Теперь операционная система может принимать смарт-карту для входа пользователя foo.

Войдите со смарт-картой на Ubuntu Server.

Войдите со смарт-картой на Ubuntu Desktop.

Вход по SSH с помощью смарт-карты

Один из методов аутентификации, которые поддерживает протокол SSH, — аутентификация с открытым ключом. Открытый ключ копируется на сервер SSH и хранится там с пометкой authorized. Владелец соответствующего закрытого ключа может войти на сервер по SSH.

Учетные данные PIV включают сертификат и пару ключей, которые можно использовать для входа по SSH. Нужно извлечь открытый ключ со смарт-карты и скопировать его на SSH-сервер. Ридер смарт-карт подключается к SSH-клиенту. SSH-клиент использует библиотеку opensc-pkcs11 для доступа к смарт-карте и выполнения необходимых операций. Закрытый ключ не раскрывается.

Настройка входа по SSH с помощью смарт-карты

Необходимо настроить SSH-сервер и клиент, чтобы разрешить аутентификацию с помощью смарт-карты.

Настройка SSH-сервера

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

Разрешение аутентификации с открытым ключом

Убедитесь, что для параметра PubkeyAuthentication задано значение ‘yes’ в файле /etc/ ssh/sshd_config сервера. По умолчанию в файле /etc/ssh/sshd_config в Ubuntu 18.04 параметр PubkeyAuthentication раскомментирован. Но его значение по умолчанию — ‘yes’. Чтобы убедиться, что значение задано верно, отредактируйте файл sshd_config file.

Установка открытого ключа на сервере

Извлеките открытый ключ пользователя со смарт-карты на SSH-клиенте. Используйте sshkeygen, чтобы прочитать открытый ключ со смарт-карты в формате, пригодном для SSH.

Скопируйте этот ключ на SSH-сервер.

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

SSH-клиент должен идентифицировать своего провайдера PKCS 11. Это можно сделать несколькими способами:

Командная строка

При каждом запуске SSH-сеанса из командной строки указывайте параметр -I.

Этот метод позволяет использовать вход со смарт-картой только при необходимости.

По всей системе

Настройте параметр PKCS11Provider в файле /etc/ssh/ssh_config.

Используйте этот метод, чтобы требовать вход по SSH со смарт-картой для всех пользователей в системе.

По пользователям

Настройте параметр PKCS11Provider в файле

/.ssh/config каждого пользователя, который хочет использовать смарт-карту для входа по SSH.

Используйте этот метод, чтобы требовать вход по SSH со смарт-картой для отдельных пользователей.

Войдите по SSH на сервер с помощью смарт-карты.


Смарт-карты представляют собой защищенное хранилище идентификационной информации. Их можно использовать для проверки подлинности при входе в компьютерные системы или сети или для доступа к защищенной информации и привилегиям. Поддержку входа со смарт-картами на Ubuntu можно настроить с помощью доступных модулей PAM и утилит PKCS11.


Присоединяйтесь к Telegram каналу UBUNTU Community, чтобы быть в курсе последних новостей!


Поделиться с друзьями