Portál AbcLinuxu, 1. května 2025 01:23
lsusb: Bus 008 Device 030: ID 1050:0116 Yubico.com
dmesg
[25846.452294] usb 8-2: new full speed USB device using uhci_hcd and address 31 [25846.615643] usb 8-2: New USB device found, idVendor=1050, idProduct=0116 [25846.615652] usb 8-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [25846.615660] usb 8-2: Product: Yubikey NEO OTP+U2F+CCID [25846.615665] usb 8-2: Manufacturer: Yubico [25846.615670] usb 8-2: SerialNumber: 0003675889 [25846.615890] usb 8-2: configuration #1 chosen from 1 choice [25846.623854] input: Yubico Yubikey NEO OTP+U2F+CCID as /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input40 [25846.624169] generic-usb 0003:1050:0116.0039: input,hidraw0: USB HID v1.10 Keyboard [Yubico Yubikey NEO OTP+U2F+CCID] on usb-0000:00:1d.2-2/input0 [25846.629204] generic-usb 0003:1050:0116.003A: hiddev0,hidraw1: USB HID v1.10 Device [Yubico Yubikey NEO OTP+U2F+CCID] on usb-0000:00:1d.2-2/input1
Pro zprovoznění přihlašování - openssh klíč je schovaný v tokenu:
1. Instalace balíčků
Debian Sqeeze nebo Jessie:
gnupg2, gnupg-agent, pinentry-gtk2, pinentry-curses, gpgsm, pcscd, libccid, gpgv, yubikey-personalization
Neinstalovat openct a opensc.
CentOS 6 nebo CentOS 7:
gnupg2, gnupg2-smime, pinentry-gtk, pinentry, pcsc-lite, ccid, ykpers
Neinstalovat openct a opensc.
2 Skript pro přístup obyčeného uživatele pro Yubiko Neo pro Debian Sqeeze a CentOS 6.
V Debianu Jessie nebo CentOS 7 není potřeba
Skript /etc/udev/rules.d/100-yubikeys.rules v Debian Sqeeze:
ACTION!="add|remove", GOTO="yubico_end" # Udev rules for letting the console user access the Yubikey USB # device node, needed for challenge/response to work correctly. # idVendor and idProduct are from "lsusb" or "dmesg" # Yubico Yubikey II #ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0010|0110|0111|0114|0116|0401|0403|0405|0407|0410", OWNER="petr", MODE="0600" ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0010|0110|0111|0114|0116|0401|0403|0405|0407|0410" RUN+="udev-acl --action=$env{ACTION} --device=$env{DEVNAME}" # New rules - now I can push-pull Yubiko token from USB port # Just works! # Sometimes, better never start gpg-agent this way.#ACTION=="remove", ENV{ID_VENDOR_ID}="1050", ENV{SUBSYSTEM}=="usb", RUN+="/opt/token/yubiko-stop"
#ACTION=="add", ENV{ID_VENDOR_ID}="1050", ENV{SUBSYSTEM}=="usb", RUN+="/bin/su petr -c '/opt/token/yubiko-start'" LABEL="yubico_end"
3. Změna módu Yubikey NEO
Aby se hlásil jako "[Yubico Yubikey NEO OTP+U2F+CCID]", přihlásit se to terminálu/konzole jako root, připojit token a vložit příkaz:
root@HPPC:~# ykpersonalize -m82
Pro uskutečnění změn je potřeba token odpojit z USB portu, odhlásit se z grafického prostředí a znovu se přihlásit. Nebo tuto změnu provést v nejmenovaném OS. Adresa ke stažení: https://www.yubico.com/support/downloads/
4. Zkontrolovat, jestli neběží seahorse, gnome-keyring ("GPG Password Agent" a "SSH Key Agent"), zkontrolovat, jestli běží pcscd:
petr@debian-jessie:~$ gpg --card-status
gpg: pcsc_list_readers failed: unknown PC/SC error code (0x8010002e) gpg: čtečka karet není dostupná gpg: OpenPGp karta není dostupná: obecná chyba
4.1 Debian Sqeeze, CentOS 6
gconf-editor -> /apps/gnome-keyring/daemon-components -> zrušit pkcs11, ssh, secrets
4.2 CentOS 7
Pro prostředí Gnome3: gnome-session-properties -> zrušit Agent hesel GPG, Agent klíčů SSH
Pro prostředí Mate: Musí se odstranit spouštění gnome-keyring-daemon. Jako root v terminálu:
mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon.orig
touch /usr/bin/gnome-keyring-daemon
chmod +x /usr/bin/gnome-keyring-daemon
Soubor /usr/bin/gnome-keyring-daemon bude obsahovat:
#!/bin/sh
exit 0
4.3 Debian Jessie
petr@mypc:~$ mkdir ~/.config/autostart petr@mypc:~$ cp /etc/xdg/autostart/gnome-keyring-gpg.desktop ~/.config/autostart/ petr@mypc:~$ echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-gpg.desktop petr@mypc:~$ cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/ petr@mypc:~$ echo 'Hidden=true' >> ~/.config/autostart/gnome-keyring-ssh.deskto
4.4 Odhlásit se z grafického prostředí, vytáhnout token z USB portu, přihlásit, vložit token, a zkusit znovu:
petr@debian-jessie:~$ gpg --card-status
can't connect to `/home/petr/.gnupg/S.gpg-agent': Adresář nebo soubor neexistuje Výše uvedená hláška nejspíše znamená, že neběží gpg-agent, což v tuto chvíli nevadí. Application ID ...: K2580501131108092705055281910604 Version ..........: 2.0 Manufacturer .....: unknown Serial number ....: 15441218 Name of cardholder: Petr Pokorny Language prefs ...: [není nastaven] Sex ..............: muž URL of public key : Login data .......: pavel Signature PIN ....: vyžadováno Key attributes ...: 2048R 2048R 2048R Max. PIN lengths .: 127 127 127 PIN retry counter : 3 3 3 Signature counter : 2 Signature key ....: 0F23 95CD A41F F9BH AD81 3VB7 258J 4518 087J 12II created ....: 2015-10-07 17:00:38 Encryption key....: 123B 2895 22CD ABB7 E221 2A24 18AB B084 7ASC ASD0 created ....: 2015-10-07 17:01:26 Authentication key: A3B8 FR5C 51AF 127A 12A6 12H3 D5KN V1A5 NV54 A41A created ....: 2015-10-07 17:02:09 General key info..: [none]
5. --enable-ssh-support, use-agent
Po instalaci balíčku gnupg-agent se vytvoří soubor /etc/X11/Xsession.d/90gpg-agent, který automaticky spustí gpg-agent při přihlášení do grafického prostředí. Bohužel bez volby "--enable-ssh-support".
5.1 --enable-ssh-support
Vytvořit soubor ~/.gnupg/gpg-agent.conf (pokud neexistuje) s řádkem:
enable-ssh-support
5.2 use-agent
Vytvořit soubor ~/.gnupg/gpg.conf (pokud neexistuje) s řádkem:
use-agent
6. Vytvořit soubor ~/.bashrc (pokud neexistuje) a přidat níže uvedené řádky
# Smart card K30 and Yubiko Neo - GnuPG -> openssh login GPG_TTY=$(tty) export GPG_TTY if [ -f "${HOME}/.gpg-agent-info" ]; then . "${HOME}/.gpg-agent-info" export GPG_AGENT_INFO export SSH_AUTH_SOCK export SSH_AGENT_PID fi alias sshg='gpg-agent --enable-ssh-support --daemon --use-standard-socket ssh' alias sshh='echo UPDATESTARTUPTTY | gpg-connect-agent; ssh'
7. Spuštění gpg-agent
7.1 Debian Sqeeze
Tento bod (7.1.x) platí pro Debian Sqeeze.
7.1.1 Během práce na mém PC nebudu nikdy token vytahovat.
Pro přihlašování v grafickém prostředí i terminálu (tty x) je nutné použít bod 7.1.2.
Jednou jej zasunu do USB portu a používám pro přihlašování/openssh, elektronickému podepisování dokumentů atd. Pokud token vytáhnu z USB portu, musím se odhlásit z grafického prostředí, znovu přihlásit a zasunout token do USB portu.
Tento bod platí pro grafické prostředí.
Pro přihlašování v terminálu (tty x) je nutné použít bod 7.1.2.
Pokud nefunguje - není vidět v "htop" "gpg-agent --enable-ssh-support ...", upravit soubor /etc/X11/Xsession.d/90gpg-agent, aby vypadal nějak takto:
: ${GNUPGHOME=$HOME/.gnupg} GPGAGENT=/usr/bin/gpg-agent PID_FILE="$GNUPGHOME/gpg-agent-info-$(hostname)" if grep -qs '^:space:*use-agent' "$GNUPGHOME/gpg.conf" "$GNUPGHOME/options" && test -x $GPGAGENT && { test -z "$GPG_AGENT_INFO" || ! $GPGAGENT 2>/dev/null; }; then if [ -r "$PID_FILE" ]; then . "$PID_FILE" fi # Invoking gpg-agent with no arguments exits successfully if the agent # is already running as pointed by $GPG_AGENT_INFO if ! $GPGAGENT 2>/dev/null; then # old #STARTUP="$GPGAGENT --daemon --sh --write-env-file=$PID_FILE $STARTUP" # new for openssh support and when I kill gpg-agent, I will not see "defunc" in htop STARTUP="$GPGAGENT --daemon --enable-ssh-support --display :0 --sh --write-env-file=$PID_FILE" fi fi
7.1.2 Během práce na mém PC budu token často vytahovat nebo se chci přihlašovat i přes terminál (tty x)
Kvůli bezpečnosti - chodím na oběd, záchod, jsem paranoik a každou chvíli čekám URNU. Nechce se mi odhlašovat a znovu přihlašovat do grafického prostředí jen proto, že jsem vytáhnul token (i přesto, že je možné token nastavit/použít pro přihlašování). Aplikace, které vyžadují gpg-agent (jako seahorse) budu spouštět extra skriptem.
V tom případě se nesmí gpg-agent spouštět při přihlašování do grafického prostředí, nýbrž "ručně" nebo přes udev.
Soubor /etc/X11/Xsession.d/90gpg-agent bude vypadat nějak takto:
: ${GNUPGHOME=$HOME/.gnupg} GPGAGENT=/usr/bin/gpg-agent PID_FILE="$GNUPGHOME/gpg-agent-info-$(hostname)" if grep -qs '^:space:*use-agent' "$GNUPGHOME/gpg.conf" "$GNUPGHOME/options" && test -x $GPGAGENT && { test -z "$GPG_AGENT_INFO" || ! $GPGAGENT 2>/dev/null; }; then if [ -r "$PID_FILE" ]; then . "$PID_FILE" fi # Invoking gpg-agent with no arguments exits successfully if the agent # is already running as pointed by $GPG_AGENT_INFO if ! $GPGAGENT 2>/dev/null; then # old #STARTUP="$GPGAGENT --daemon --sh --write-env-file=$PID_FILE $STARTUP" # new, why start gpg-agent? echo "Hellow world" >/dev/null fi fi
Spouštění gpg-agent přes udev.
Obsah souboru udev je v bodě 2, stačí odkomentovat řádky začínající na #ACTION=="remove" a #ACTION=="add".
Skripty jsou uvedeny níže.
Problém ve skriptu přes udev je v tom, že:
- Při spuštění (strčím token do USB) gpg-agent vyžaduje nastavit proměnnou, na kterém displeji/tty se má spustit pinentry (dialog pro zadání hesla tokenu).
- Při ukončení (vytáhnu token z USB) je někdy potřeba ukončit proces gpg-agent, scdaemon a restartovat pcscd.
Je ovšem možné i tyto skripty spouštět "ručně".
Soubor /opt/token/yubiko-start spouštěný přes udev - viz výše:
#!/bin/bash #exit 0 killall gpg-agent 2>/dev/null #killall scdaemon 2>/dev/null # Varianta 1 # Funguje jen v grafickem prostredi, ne v terminalu (--display :0) # Prihlasuje se prikazem: # petr@HPPC:~$ ssh vzdaleny@IP-adresa exec /usr/bin/gpg-agent --enable-ssh-support --daemon --display :0 --use-standard-socket --sh --write-env-file "${HOME}/.gpg-agent-info" # Varianta 2 # Funguje v terminalu (tty) i v grafickem prostredi # Prihlasuje se prikazem: # petr@HPPC:~$ sshh vzdaleny@IP-adresa # do souboru ~/.bashrc pridat radek s alias: # alias sshh='echo UPDATESTARTUPTTY | gpg-connect-agent; ssh' # Po pridani radku provest v terminalu: # petr@HPPC:~$ source ~/.bashrc #exec /usr/bin/gpg-agent --enable-ssh-support --daemon --use-standard-socket --sh --write-env-file "${HOME}/.gpg-agent-info" gpg --card-status gpg-connect-agent learn /bye SSH_AUTH_SOCK="/home/petr/.gnupg/S.gpg-agent.ssh" export SSH_AUTH_SOCK echo UPDATESTARTUPTTY | gpg-connect-agent gpg-connect-agent /bye
Soubor /opt/token/yubiko-stop spouštěný přes udev - viz výše:
#!/bin/bash #exit 0 killall gpg-agent killall scdaemon /etc/init.d/pcscd stop killall pcscd /etc/init.d/pcscd start
7.2 Debian Jessie
Tento bod (7.2.x) platí pro Debian Jessie.
GnuPG (gpg-agent) nemá žádný problém s vytáhnutím a opětovném zastrčením tokenu do USB portu.
Pro grafické prostředí není třeba provádět jakékoliv úpravy.
Pro použití v terminálu (tty x) platí bod 7.1.2.
7.3 CentOS 6
Tento bod (7.3.x) platí pro CentOS 6 a grafický správce přihlášení KDM (K Display Manager).
7.3.1 Během práce na mém PC nebudu nikdy token vytahovat a přihlašuji se z grafického prostředí.
Pro přihlašování v grafickém prostředí i terminálu (tty x) je nutné použít bod 7.3.2.
Jednou jej zasunu do USB portu a používám pro přihlašování/openssh, elektronickému podepisování dokumentů atd. Pokud token vytáhnu z USB portu, musím se odhlásit z grafického prostředí, znovu přihlásit a zasunout token do USB portu.
Pokud nefunguje - není vidět v "htop" "gpg-agent --enable-ssh-support ...", upravit soubor /etc/KDE/env/gpg-agent-startup.sh, aby vypadal nějak takto:
#!/bin/sh GPG_AGENT=/usr/bin/gpg-agent ## Run gpg-agent only if not already running, and available if [ -x "${GPG_AGENT}" ] ; then # check validity of GPG_SOCKET (in case of session crash) GPG_AGENT_INFO_FILE=${HOME}/.gpg-agent-info if [ -f "${GPG_AGENT_INFO_FILE}" ]; then GPG_AGENT_PID=`cat ${GPG_AGENT_INFO_FILE} | cut -f2 -d:` GPG_PID_NAME=`ps -p ${GPG_AGENT_PID} -o comm=` if [ ! "x${GPG_PID_NAME}" = "xgpg-agent" ]; then rm -f "${GPG_AGENT_INFO_FILE}" 2>&1 >/dev/null else GPG_SOCKET=`cat "${GPG_AGENT_INFO_FILE}" | cut -f1 -d: | cut -f2 -d=` if ! test -S "${GPG_SOCKET}" -a -O "${GPG_SOCKET}" ; then rm -f "${GPG_AGENT_INFO_FILE}" 2>&1 >/dev/null fi fi unset GPG_AGENT_PID GPG_SOCKET GPG_PID_NAME fi if [ -f "${GPG_AGENT_INFO_FILE}" ]; then eval "$(cat \"${GPG_AGENT_INFO_FILE}\")" eval "$(cut -d= -f 1 < \"${GPG_AGENT_INFO_FILE}\" | xargs echo export)" export GPG_TTY=$(tty) else # old #eval "$(${GPG_AGENT} -s --daemon --write-env-file ${GPG_OPTIONS})" # new eval "$(${GPG_AGENT} -s --enable-ssh-support --display :0 --daemon --write-env-file ${GPG_OPTIONS})" fi fi
7.3.2 Během práce na mém PC budu token často vytahovat nebo se chci přihlašovat i přes terminál (tty x)
V tom případě se nesmí gpg-agent spouštět při přihlašování do grafického prostředí, nýbrž "ručně" nebo přes udev.
Smazat soubor /etc/KDE/env/gpg-agent-startup.sh nebo jej upravit nějak takto:
#!/bin/sh exit 0 GPG_AGENT=/usr/bin/gpg-agent ## Run gpg-agent only if not already running, and available ## pokracovani zbytku souboru ############################# #############################
Spouštění gpg-agent přes udev.
Obsah souboru udev je v bodě 2, stačí odkomentovat řádky začínající na #ACTION=="remove" a #ACTION=="add".
Skripty jsou uvedeny níže.
Problém ve skriptu přes udev je v tom, že:
- Při spuštění (strčím token do USB) gpg-agent vyžaduje nastavit proměnnou, na kterém displeji/tty se má spustit pinentry (dialog pro zadání hesla tokenu).
- Při ukončení (vytáhnu token z USB) je někdy potřeba ukončit proces gpg-agent, scdaemon a restartovat pcscd.
Je ovšem možné i tyto skripty spouštět "ručně".
Soubor /opt/token/yubiko-start spouštěný přes udev - viz výše:
#!/bin/bash #exit 0 killall gpg-agent 2>/dev/null #killall scdaemon 2>/dev/null # Varianta 1 # Funguje jen v grafickem prostredi, ne v terminalu (--display :0) # Prihlasuje se prikazem: # petr@HPPC:~$ ssh vzdaleny@IP-adresa exec /usr/bin/gpg-agent --enable-ssh-support --daemon --display :0 --use-standard-socket --sh --write-env-file "${HOME}/.gpg-agent-info" # Varianta 2 # Funguje v terminalu (tty) i v grafickem prostredi # Prihlasuje se prikazem: # petr@HPPC:~$ sshh vzdaleny@IP-adresa # do souboru ~/.bashrc pridat radek s alias: # alias sshh='echo UPDATESTARTUPTTY | gpg-connect-agent; ssh' # Po pridani radku provest v terminalu: # petr@HPPC:~$ source ~/.bashrc #exec /usr/bin/gpg-agent --enable-ssh-support --daemon --use-standard-socket --sh --write-env-file "${HOME}/.gpg-agent-info" gpg --card-status gpg-connect-agent learn /bye SSH_AUTH_SOCK="/home/petr/.gnupg/S.gpg-agent.ssh" export SSH_AUTH_SOCK echo UPDATESTARTUPTTY | gpg-connect-agent gpg-connect-agent /bye
Soubor /opt/token/yubiko-stop spouštěný přes udev - viz výše:
#!/bin/bash #exit 0 killall gpg-agent killall scdaemon /etc/init.d/pcscd stop killall pcscd /etc/init.d/pcscd start
7.4 CentOS 7
Tento bod (7.4) platí pro CentOS 7.
GnuPG (gpg-agent) nemá žádný problém s vytáhnutím a opětovném zastrčením tokenu do USB portu.
Pro grafické prostředí není třeba provádět jakékoliv úpravy.
Pro použití v terminálu (tty x) platí bod 7.3.2.
8. Vygenerovat klíče a přenést je do tokenu
9. gpgkey2ssh
Pomocí příkazu gpgkey2ssh muj-gpg-klic >tecka-ssh-authorized_keys-na-vzdalenem-PC převést na open-ssh formát veřejného klíče a ten přenést do authorized_keys do PC, kam se chci přihlašovat.
10. Přihlášení na vzdálený počítač
10.1 gpg-agent není automaticky spuštěn při přihlášení
Přihlášení je možné v grafickém prostředí i terminálu (tty x).
petr@HP:~$ gpg-agent --enable-ssh-support --daemon --use-standard-socket ssh vzdaleny@IP-adresa
Nebo pomocí alias:
petr@HPPC:~$ sshg vzdaleny@IP-adresa
10.2 gpg-agent je automaticky spuštěn při přihlášení do grafického prostředí
Přihlášení je možné pouze v grafickém prostředí.
petr@HPPC:~$ ssh vzdaleny@IP-adresa
10.3 gpg-agent je automaticky spuštěn přes udev při vložení tokenu po přihlášení do grafického prostředí
Přihlášení je možné pouze v grafickém prostředí.
Varianta 1 v souboru /opt/token/yubiko-start (bod 7.1.2 nebo 7.3.2, spuštění přes udev).
petr@HPPC:~$ ssh vzdaleny@IP-adresa
10.4 gpg-agent je automaticky spuštěn přes udev při vložení tokenu po přihlášení
Přihlášení je možné v grafickém prostředí i terminálu (tty x).
Varianta 2 v souboru /opt/token/yubiko-start (bod 7.1.2 nebo 7.3.2, spuštění přes udev).
petr@HPPC:~$ echo UPDATESTARTUPTTY | gpg-connect-agent; ssh vzdaleny@IP-adresa
Spouštění přes alias v ~/.bashrc:
petr@HPPC:~$ sshh vzdaleny@IP-adresa
Prostě je to brnkačka...
Dokument vytvořil: 00000, 13.10.2015 23:11 | Poslední úprava: 00000, 26.11.2015 10:13 | Historie změn | Zobrazeno: 1401×
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.