Итак вы решили переехать на новенькую свежую убунту и у вас на столе лежит Юбик 5ой серии без которого вы не можете жить в современном мире.
И как у любого нормального технаря перед Вами сразу встают ровным строем несколько вопросов:
Возникнут ли проблемы установкой софта и нужных либ для поддержки необходимого функционала любимого ключика? (спойлер, естественно ^_^)
Исходя из первого вопроса, с точки зрения временных затрат стоит ли вообще переезжать ради новых обоев и крутой плавной анимации..?
На все это мероприятие сколько нужно будет купить ништяков и запастись ли кофе?)
На второй вопрос отвечу сразу, конечно! Ведь я за вас уже постарался и проинвестировал свое время в это дело и теперь вы с этим справитесь за считанные минуты.
На третий вопрос уж как нибудь сами, а вот в первый немного углубимся.
На старт, внимание, 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)
Sap_ru
24.09.2022 02:28+1А после установки пина на ключ генерация ssh ecdsa-sk ключа работает? А то там лютая бага в openssl.
siestacloud Автор
24.09.2022 13:11Проверял, после настройки пина ключ для ssh генерится спокойно)
Sap_ru
24.09.2022 16:27Странно... У меня ошибку выдаёт и судя по патчам openssl до убунты это обновление может только в следующей версии дойти.
murkin-kot
24.09.2022 16:24+1Как работает данное устройство? Был бы благодарен за ссылку на пошаговый текст на каком-нибудь сайте, где показывались бы шаги, выполняемые устройством в примерно таком ключе - вставили, устройство запросило драйвер ввести что-то, протокол такой-то. Затем нажали login в браузере, он по такому-то протоколу обратился к устройству, получил такие-то данные, которые внутри устройства получены по такому-то алгоритму, защищены от чтения так-то.
Быстрое гугление на даёт похожих результатов, один маркетинговый трэш. Даже в википедии нет подробностей, хотя статья про устройство есть. Соответственно, непонятна суть взаимодействия с устройством.
emaxx
24.09.2022 18:23+1murkin-kot
24.09.2022 20:08Спасибо. Правда официальный сайт даже в разделе для разработчиков не даёт общей схемы. Ближе всего здесь - https://fidoalliance.org/specifications/ в разделе FIDO U2F, но там нет подробностей.
Придётся собирать информацию по частям.
13werwolf13
26.09.2022 06:58+1Проверяем репозитории, должны быть дефолтные, если меняли, верните.
афигенный совет, если вы меняли репы так как вам надо верните всё в дефолт, плевать зачем вы это делали..
Если таковой не наблюдается, скачиваем архивом или подключаем репозиторий ubuntu 20.04 и скачиваем ее от туда.
ещё один офигенный совет, воткнуть в 22.04 репы (даже не одну репу, а зачем-то все) от 20.04.. нет слов.. и что значит ЕСЛИ?! тоесть автор статьи при написании поленился проверить? если в убунте 22.04 нет нужного пакета то стоит поискать репозиторий для ВНЕЗАПНО убунты 22.04 где \тот пакет есть и/или попросить мейнтейнеров добавить этот пакет в репы, а не пытаться сломать систему
#Не забываем вернуть репозитории!)
если вы удаляете только что добавленные репозитории значит вы изначально делаете что-то не так (а что именно я уже выше написал).
Настраиваем конфигурацию ssh-клиента, генерируем PUB-ключ.
почему в скрипте присутствуют закоменченные строки как и то почему они закоменчены видимо тайна недоступная смертным..
автор. не надо так..
siestacloud Автор
26.09.2022 20:25Если вы используете другие репозитории в работе, я не вижу никаких проблем просто вернуть их после загрузки софта нужной версии из реп 20.04. 'Если' означает что в момент написания статьи таковой не наблюдалось. Можете попросить мейнтейнеров, действительно могут добавить спустя какое-то неопределенное время...) update синхронизирует список пакетов а не ломает систему в этом действии вообще нет ничего критичного. И тайны никакой нет) Просто решил оставить полезный трюк с ssh (если часто подключаетесь).. На счет репозиториев, согласен действительно нет смысла все подлючать ради одного пакета. За совет спасибо.
zartdinov
Тоже раньше настраивал по докам на маке, но потом все стало проще:
https://github.com/FiloSottile/yubikey-agent
Ну для остальных задач Yubikey Manager, не знаю, могли бы его более полноценным и сделать.