Вопрос или проблема
Я пытаюсь настроить поддержку смарт-карт в браузере для всех пользователей системы на LTS 20.04. Я прочитал довольно много руководств, включая это:
https://help.ubuntu.com/community/CommonAccessCard
но большинство из них в итоге используют команду, подобную этой:
modutil -dbdir sql:.pki/nssdb/ -add “OpenSC” -libfile /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
Которая работает, но каждый пользователь должен выполнять её (на каждом используемом им компьютере). Если я пытаюсь создать /etc/pki/nssdb и использовать аналогичную команду, это, похоже, не работает.
Я натолкнулся на следующее:
dpkg-divert --rename --add /usr/lib/firefox/libnssckbi.so
dpkg-divert --rename --add /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so
ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so
которое, по-видимому, работало у других, но даже после этого, если я не изменю ~/.pki/nssdb, Chrome не работает, и если я не добавлю устройство безопасности в Firefox (что я, по крайней мере, могу сделать на системном уровне с помощью .json файла), он тоже не “видит” мою смарт-карту.
(Я даже установил Edge и попробовал его, но он ведет себя идентично Chrome. Не могу заставить приложение Teams увидеть мою смарт-карту ни при каких условиях, но это уже другая история.)
Для Firefox вы можете использовать глобальную политику
{
"policies": {
"SecurityDevices": {
"scInterface": "/usr/local/lib/libcvP11.so"
}
}
}
которую необходимо разместить в /usr/lib/firefox/distribution/policies.json
(По крайней мере для Ubuntu 20.04)
Дополнительную информацию можно найти по ссылке https://support.mozilla.org/en-US/kb/managing-policies-linux-desktops а для списка всех возможных политик можно обратиться к https://github.com/mozilla/policy-templates
На данный момент я не нашел способа сделать это для Chromium. Кажется, возможно иметь глобальную базу данных nss, но она, похоже, игнорируется Chromium. Буду рад услышать работающее решение, и извините, что не могу предоставить его здесь.
Ответ или решение
Настройка поддержки смарт-карт в браузерах Chrome и Chromium в глобальном масштабе на системе, работающей под управлением Ubuntu LTS 20.04, представляет собой интересную, но достаточно сложную задачу. Это требует понимания того, как браузеры хранят и обращаются к сертификатам и модулям безопасности, а также какая роль в этом процессе отводится смарт-картам. В данной ситуации пользователь сталкивается с тем, что браузеры требуют воздействия на уровне каждого отдельного пользователя, что неудобно в корпоративной или многопользовательской среде.
Теоретическая основа
На теоретическом уровне Mozilla Firefox и браузеры на основе Chromium (включая Google Chrome и Microsoft Edge) используют Network Security Services (NSS) как часть своей инфраструктуры безопасности. NSS предоставляет интеграцию с PKCS#11, что дает возможность использовать смарт-карты через соответствующие модули, такие как OpenSC. Однако существуют особенности в использовании NSS между различными браузерами.
-
Firefox: Возможность централизованного настроения через систему политики (policies.json), которая позволяет задать глобальные параметры безопасности, включая подключение смарт-карт через PKCS#11.
-
Chromium и Chrome: Хотя они также используют NSS, глобальная конфигурация, аналогичная Firefox, отсутствует, и настройка обычно требует персональной настройки для каждого пользователя.
Конкретные примеры
Пример настройки для Firefox был кратко упомянут в вашем вопросе. Использование policies.json позволяет задать файл JSON в папке /usr/lib/firefox/distribution. Это решение позволяет добавить устройство безопасности на системном уровне, обеспечивая удобство и простоту управления для пользователей.
Что касается Chrome и Chromium, предложенное вами решение с modutil работает, но требует настройки для каждого пользователя. Однако существует несколько методов, которые могут помочь:
-
Использование p11-kit: Поскольку плагин p11-kit-trust.so автоматически обрабатывает сертификаты системы как доверенные, его правильно заданный путь может помочь в решении задачи.
-
Global nssdb: Теоретически возможно создать NSS-базу данных на системном уровне, которая может использоваться всеми пользователями, но для этого необходимо убедиться, что браузеры Chromium не игнорируют такие конфигурации.
Применение на практике
На практике цель заключается в системной интеграции смарт-карт, минимизируя усилия пользователей. Для этого можно предложить следующие шаги:
-
Централизованная настройка OpenSC: Вероятно, самым простым способом убеждения Chrome/Chromium использовать pkcs11-modul будет создание скрипта, который автоматически выполняется при входе пользователя и настраивает NSS. Скрипт может копировать или привязывать уже настроенную NSS-базу (например, в /etc/pki/nssdb).
-
Использование политики групп (Group Policy): Если система интегрирована с Active Directory, то есть возможность использования групповой политики для распределения конфигурации среди пользователей. Браузеры на основе Chromium поддерживают административные шаблоны, что также может помочь в управлении.
-
Настройка p11-kit: Убедитесь, что система и браузеры корректно используют p11-kit. Это может потребовать тестирования и валидации конфигурации через команду p11-kit list-modules.
Заключение
Несмотря на наличие сложностей, системная настройка смарт-карт на Ubuntu LTS 20.04 возможна, хотя и требует индивидуального подхода для браузеров Chrome и Chromium. Совместная настройка через p11-kit и скриптовое управление модификацией NSS-базы данных может стать наиболее элегантным решением. Важно также поддержать интеграцию на системном уровне, чтобы решить потенциальные проблемы безопасности и обеспечить использование смарт-карт всеми приложениями, которые их поддерживают.