1 (edytowany przez m80 2020-07-18 22:35:48)

Temat: OpenSSH i logowanie tokenem

Hej,

jak wiadomo OpenSSH w wersji 8.2 wprowadziło uwierzytelnianie U2F / FIDO za pomocą klucza sprzętowego (np: Yubico)...

Cezary czy jest szansa żeby w Twoim repozytorium pojawiła się wersja >= 8.2 openssh-server?


Michał

2

Odp: OpenSSH i logowanie tokenem

OpenWrt używa 8.3p1 w wersji rozwojowej. Po prostu zainstaluj sobie pakiet z wersji rozwojowej.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez m80 2020-07-18 22:45:17)

Odp: OpenSSH i logowanie tokenem

Można zamienić na chwilę repozytorium na snapshota i zainstalować czy muszę ręcznie pakiet openssh-server i zależności ściągać?

4

Odp: OpenSSH i logowanie tokenem

Możesz zmienić na chwilę i zainstalować to co potrzebujesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez m80 2020-07-19 09:40:48)

Odp: OpenSSH i logowanie tokenem

Cezary dziękuję za wskazówki smile


Instrukcja na której się wzorowałem znajduje się tutaj

a tak wyglądały moje kroki:


1. Na PC uruchomiłem dystrybucję linuxa, która zawierała ssh w wersji co najmniej 8.2,
wersję można sprawdzić za pomocą polecenia:

ssh -V

W moim przypadku była to wersja 8.3 a dystrybucja jakiej użyłem to Manjaro.
Niestety samo ssh nie wystarczyło i musiałem doinstalować pakiet libfido2.


2. W porcie usb PC umieściłem token (Yubico 5 NFC) i wygenerowałem parę kluczy:

mkdir -p ~/.ssh
ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519_sk

W trakcie generowania można (ale nie trzeba) podać hasło zabezpieczające dostęp do klucza prywatnego oraz ewentualnie potwierdzić akcję dotykając pole na tokenie. Może też się zdarzyć, że program zapyta o PIN do tokena (PIN ustawiany jest przeważnie w aplikacji producenta).
WAŻNE!!! W tym momencie koniecznie robimy backup nowych kluczy np: na pendrive.

3. Na routerze (u mnie OpenWrt 19.07-SNAPSHOT od Cezarego) ustawiamy logowanie przez ssh za pomocą hasła co ułatwi kopiowanie klucza publicznego na router. W tym celu w pliku /etc/config/dropbear zmieniamy dwie opcje:

config dropbear
        ...
        option PasswordAuth 'on'
        option RootPasswordAuth 'on'
        ...

i restartujemy dropbear:

/etc/init.d/dropbear restart

4. Teraz na PC wydajemy polecenie, które skopiuje nasz klucz publiczny na router (port taki jaki mamy ustawiony w dropbear):

ssh-copy-id -i ~/.ssh/id_ed25519_sk root@192.168.1.1 -p 22

Podajemy hasło do routera i ewentualnie hasło zabezpieczające jakie ustawiliśmy przy generowaniu kluczy w kroku 2.

Klucz powinien się dodać na końcu pliku /root/.ssh/authorized_keys na routerze (można spawdzić cat-em lub vi).


5. Aby autoryzacja U2F działała na routerze trzeba zainstalować openssh-server w wersji co najmniej 8.2
W bieżących pakietach jest tylko wersja 8.0 dlatego tak jak Cezary podpowiedział musimy zainstalować pakiety ze snapshota.
W tym celu logujemy się przez ssh na router (lub używamy istniejacej sesji z kroku 3)
i dodajemy do pliku /etc/opkg/customfeeds.conf linijkę:

src/gz snapshot_packages https://downloads.openwrt.org/snapshots/packages/arm_cortex-a15_neon-vfpv4/packages

W moim przypadku użyłem ścieżki dla architektury arm_cortex-a15_neon-vfpv4 ponieważ mój router to Netgear R7800, architekturę routera można sprawdzić wpisując w wyszukiwarkę np:
"openwrt.org wdr3600"
(na stronie projektu są dokładne opisy większości modeli)
i odpowiednio zmienić tą część ścieżki.
Następnie:

opkg update
opkg install openssh-server

i najnowsza wersja 8.3 serwera ssh powinna się zainstalować:)


6. Zmieniamy ustawienia nowego serwera w pliku /etc/ssh/sshd_config tak aby logowanie odbywało się za pomocą kluczy a nie za pomocą hasła oraz żeby port nie kolidował z portem dropbear (22):

...
Port 2222
...
ListenAddress 192.168.1.1
...
PermitRootLogin prohibit-password
...
PubkeyAuthentication yes
...
PasswordAuthentication no
...

7. Sprawdzamy logowanie U2F
WAŻNE!!! Jeżeli mamy otwartą sesję ssh z poprzednich kroków to warto ją zostawić na wypadek gdybyśmy jakimś cudem zatrzymali oba serwery ssh, pozwoli nam to na zmianę konfiguracji i ominie nas odpalanie routera w trybie awaryjnym.

Uruchamiamy sshd:

/etc/init.d/sshd start

Na PC, na którym generowaliśmy klucze podpinamy token i sprawdzamy czy logowanie na router się powiedzie:

ssh root@192.168.1.1 -p 2222

jeśli ustawialiśmy hasło zabezpieczające klucz prywatny, wpisujemy je - chwilę potem dioda na tokenie zacznie mrugać co oznacza oczekiwanie na akcję użytkownika czyli przyciśnięcie pola na tokenie.

Po udanym logowaniu można wyłączyć dropbear i włączyć sshd na stałe:

/etc/init.d/dropbear stop
/etc/init.d/dropbear disable
/etc/init.d/sshd enable

oraz

zakomentować  / usunąć linijkę repozytorium snapshot z pliku /etc/opkg/customfeeds.conf

# src/gz snapshot_packages https://downloads.openwrt.org/snapshots/packages/arm_cortex-a15_neon-vfpv4/packages

PS. Mam nadzieję, że niczego nie pomieszałem - uwagi i sugestie mile widziane:)

m80