YubiKey головного мозга. Как подружить Ubuntu 22.04.1 LTS c аппаратным ключем безопасности?
Итак вы решили переехать на новенькую свежую ибунту и у вас на столе лежит Юбик 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 < ~/.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
На этом все:-)