YubiKey головного мозга. Как подружить Ubuntu 22.04.1 LTS c аппаратным ключом безопасности? +7


Итак вы решили переехать на новенькую свежую убунту и у вас на столе лежит Юбик 5ой серии без которого вы не можете жить в современном мире.

И как у любого нормального технаря перед Вами сразу встают ровным строем несколько вопросов:

  1. Возникнут ли проблемы установкой софта и нужных либ для поддержки необходимого функционала любимого ключика? (спойлер, естественно ^_^)

  2. Исходя из первого вопроса, с точки зрения временных затрат стоит ли вообще переезжать ради новых обоев и крутой плавной анимации..?

  3. На все это мероприятие сколько нужно будет купить ништяков и запастись ли кофе?)

На второй вопрос отвечу сразу, конечно! Ведь я за вас уже постарался и проинвестировал свое время в это дело и теперь вы с этим справитесь за считанные минуты.

На третий вопрос уж как нибудь сами, а вот в первый немного углубимся.

На старт, внимание, let's deep dive

Итак, определим задачи:

1. Двухфакторная авторизация по паролю и вставленному в usb-порт ключу.

2. Привилегированные права (root в простонародье) только при наличии ключика в usb-порте.

3. Доступ по ssh на сервера только при наличии все того-же ключика.

p.s. понятно что это далеко не все что может дать нам Yubikey, но мы тут не возможности обозреваем, а проблему решаем!)

По заветам Кодекса Авторов Хабра декомпозируем наши задачи:
  • Подключаем репозитории устанавливаем софт и нужные библиотеки.

  • Подключаем модуль PKCS для нашего юбика.

  • Инициализируем устройство (пункт опциональный, если уже настроили все pin,puk,managment-key... - ничего менять не нужно).

  • Настраиваем двухфакторку в системе через 2FA.

  • Правим конфиги sudo,gdm,login (тут максимум внимательности, советую приготовить root терминал на всякий пожарный или если вы рисковый парень (как я),то можете сразу сделать себе загрузочную флешку с лайв режимом чтобы когда у вас все слетит, загрузиться с нее, примонтировать диск и исправить то что вы там наворотили ^_^).

  • Настраиваем конфигурацию ssh-клиента, генерируем PUB-ключ (доступ на удаленные сервера только с юбиком).

  • Наслаждаемся результатом)

Установка утилит и библиотек

Проверяем репозитории, должны быть дефолтные, если меняли, верните.

Репозитории оставлю на всякий случай
sudo nano /etc/apt/sources.list
deb http://ru.archive.ubuntu.com/ubuntu/ jammy universe
deb http://ru.archive.ubuntu.com/ubuntu/ jammy multiverse
deb http://security.ubuntu.com/ubuntu jammy-security universe
deb http://ru.archive.ubuntu.com/ubuntu/ jammy main restricted
deb http://security.ubuntu.com/ubuntu jammy-security multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates universe
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-updates main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
sudo apt update

 #Устанавливаем библиотеки и софт для работы
 sudo apt install -y ykcs11 yubico-piv-tool yubikey-manager scdaemon yubikey-personalization opensc libnss3-tools

Отдельная утилита заслуживает особого внимания pamu2fcfg. Входит в состав libpam-u2f. Нужна версия 1.0.8-1.

#Проверяем версию
sudo apt-cache policy pamu2fcfg

Если таковой не наблюдается, скачиваем архивом или подключаем репозиторий ubuntu 20.04 и скачиваем ее от туда.

Репозитории так-же оставлю тут..
sudo nano /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu focal partner
deb-src http://archive.canonical.com/ubuntu focal partner
sudo apt update

sudo apt install -y pamu2fcfg=1.0.8-1
#Не забываем вернуть репозитории!)

Подключаем модуль PKCS для нашего юбика.

Для начала, вставляем ключик в usb-разьем.

#Включаем демон pcscd который координирует связь приложений со смарт картами и криптографическими токенами 
sudo systemctl start  pcscd.service
sudo systemctl enable  pcscd.service

#затем подключаем модуль
cd .pki/nssdb/

#проверяем что модуля нет
modutil -list -dbdir . 
modutil -dbdir . -add "Yubikey" -libfile /usr/lib/x86_64-linux-gnu/libykcs11.so

#проверяем что модуль есть)
modutil -list -dbdir . 

Инициализация ключика.

На официальном сайте есть мануал подробный, но для уважаемых хабровчан оставлю это тут
# default PIN - 123456
ykman piv change-pin

# default PUK - 12345678
ykman piv change-puk

# generate MGM key stored on device and protected by PIN
ykman piv change-management-key 

# Generate Slot 9a PIV Authentication (authenticate the card and the cardholder)
yubico-piv-tool -s 9a -a generate --touch-policy=always --pin-policy=never -o public.pem -k
yubico-piv-tool -s 9a -a request-certificate --touch-policy=always --pin-policy=never -i public.pem -o cert.csr -k -S "/CN=InsertNewName/"
# подписать на CA ноуте
yubico-piv-tool -a import-certificate --touch-policy=always --pin-policy=never -s 9a -i ~/Documents/NewName.crt -k
yubico-piv-tool -a status

Настраиваем двухфакторку в системе через 2FA.

Выполняется всё от непривилегированного пользователя.Yubikey должен быть подключен.

mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
sudo mv ~/.config/Yubico /etc/Yubico
sudo chown root:root /etc/Yubico/u2f_keys

Правим конфиги sudo,gdm,login.

sudo sed -i -e '/^@include common-auth.*/a auth       required   pam_u2f.so authfile=/etc/Yubico/u2f_keys ' /etc/pam.d/sudo
sudo sed -i -e '/^@include common-auth.*/a auth       required   pam_u2f.so authfile=/etc/Yubico/u2f_keys ' /etc/pam.d/gdm-password
sudo sed -i -e '/^@include common-auth.*/a auth       required   pam_u2f.so authfile=/etc/Yubico/u2f_keys ' /etc/pam.d/login

Настраиваем конфигурацию ssh-клиента, генерируем PUB-ключ.

cat <<EOF > ~/.ssh/config
Host *
 PKCS11Provider /usr/lib/x86_64-linux-gnu/libykcs11.so
 GSSAPIAuthentication no
 HashKnownHosts yes
# ControlMaster auto
# ControlPath ~/.ssh/cm_socket/%r@%h:%p
EOF

ssh-keygen -D /usr/lib/x86_64-linux-gnu/libykcs11.so -e

На этом все :-)




Комментарии (9):

  1. zartdinov
    /#24762844 / +1

    Тоже раньше настраивал по докам на маке, но потом все стало проще:
    https://github.com/FiloSottile/yubikey-agent

    Ну для остальных задач Yubikey Manager, не знаю, могли бы его более полноценным и сделать.

  2. Sap_ru
    /#24762860 / +1

    А после установки пина на ключ генерация ssh ecdsa-sk ключа работает? А то там лютая бага в openssl.

    • siestacloud
      /#24763494

      Проверял, после настройки пина ключ для ssh генерится спокойно)

      • Sap_ru
        /#24763812

        Странно... У меня ошибку выдаёт и судя по патчам openssl до убунты это обновление может только в следующей версии дойти.

  3. murkin-kot
    /#24763808 / +1

    Как работает данное устройство? Был бы благодарен за ссылку на пошаговый текст на каком-нибудь сайте, где показывались бы шаги, выполняемые устройством в примерно таком ключе - вставили, устройство запросило драйвер ввести что-то, протокол такой-то. Затем нажали login в браузере, он по такому-то протоколу обратился к устройству, получил такие-то данные, которые внутри устройства получены по такому-то алгоритму, защищены от чтения так-то.

    Быстрое гугление на даёт похожих результатов, один маркетинговый трэш. Даже в википедии нет подробностей, хотя статья про устройство есть. Соответственно, непонятна суть взаимодействия с устройством.

  4. 13werwolf13
    /#24766568 / +1

    Проверяем репозитории, должны быть дефолтные, если меняли, верните.

    афигенный совет, если вы меняли репы так как вам надо верните всё в дефолт, плевать зачем вы это делали..

    Если таковой не наблюдается, скачиваем архивом или подключаем репозиторий ubuntu 20.04 и скачиваем ее от туда.

    ещё один офигенный совет, воткнуть в 22.04 репы (даже не одну репу, а зачем-то все) от 20.04.. нет слов.. и что значит ЕСЛИ?! тоесть автор статьи при написании поленился проверить? если в убунте 22.04 нет нужного пакета то стоит поискать репозиторий для ВНЕЗАПНО убунты 22.04 где \тот пакет есть и/или попросить мейнтейнеров добавить этот пакет в репы, а не пытаться сломать систему

    #Не забываем вернуть репозитории!)

    если вы удаляете только что добавленные репозитории значит вы изначально делаете что-то не так (а что именно я уже выше написал).

    Настраиваем конфигурацию ssh-клиента, генерируем PUB-ключ.

    почему в скрипте присутствуют закоменченные строки как и то почему они закоменчены видимо тайна недоступная смертным..

    автор. не надо так..

    • siestacloud
      /#24769180

      Если вы используете другие репозитории в работе, я не вижу никаких проблем просто вернуть их после загрузки софта нужной версии из реп 20.04. 'Если' означает что в момент написания статьи таковой не наблюдалось. Можете попросить мейнтейнеров, действительно могут добавить спустя какое-то неопределенное время...) update синхронизирует список пакетов а не ломает систему в этом действии вообще нет ничего критичного. И тайны никакой нет) Просто решил оставить полезный трюк с ssh (если часто подключаетесь).. На счет репозиториев, согласен действительно нет смысла все подлючать ради одного пакета. За совет спасибо.