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

1851f3b8640f7d64453af4fe17f3addb

Итак вы решили переехать на новенькую свежую ибунту и у вас на столе лежит Юбик 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 < ~/.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

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

© Habrahabr.ru