Wymuszać hasła kluczy SSH?

9

Patrzę na usunięcie loginów opartych na hasłach dla SSH. Nie chcę jednak zezwalać na klucze SSH bez hasła, ponieważ byłoby to jeszcze gorsze.

Jak mogę się upewnić, że łączą się tylko klucze SSH z hasłem?

Jeśli nie można tego zrobić, czy istnieją alternatywy, takie jak centralne zarządzanie generowaniem kluczy SSH i zapobieganie generowaniu i / lub używaniu własnych kluczy przez użytkowników? Coś jak PKI, jak sądzę.

Lee B.
źródło

Odpowiedzi:

20

Hasło, które można ustawić na kluczu prywatnym, nie jest powiązane z serwerem SSH ani z połączeniem z nim. Ustawienie hasła do klucza prywatnego jest jedynie środkiem bezpieczeństwa, który właściciel klucza może podjąć, aby uniemożliwić dostęp do jego zdalnej powłoki przez osobę trzecią w przypadku kradzieży klucza prywatnego.

Niestety nie można zmusić użytkowników do zabezpieczenia swoich kluczy prywatnych za pomocą haseł. Czasami niezabezpieczone klucze prywatne są wymagane w celu zautomatyzowania dostępu do zdalnego serwera SSH. Jeden dobry zwyczaj ja bardzo polecam dla takich przypadków jest doradzanie użytkownikom hash z known_hosts pliku (przechowywany w ~ / .ssh / known_hosts ), który przechowuje informacje o zdalnych hostach że użytkownik łączy się za pomocą następującego polecenia:

ssh-keygen -H -f ~/.ssh/known_hosts

W ten sposób, nawet jeśli strona trzecia uzyska dostęp do niechronionego klucza prywatnego, niezwykle trudno będzie ustalić, dla których zdalnych hostów ten klucz jest ważny. Oczywiście, wyczyszczenie historii powłok jest obowiązkowe, aby ta technika miała jakąkolwiek wartość.

Inną rzeczą, o której zawsze powinieneś pamiętać, jest to, że root nie może logować się zdalnie, dodając następujące elementy w konfiguracji serwera SSH (sshd_config):

PermitRootLogin no

Z drugiej strony, jeśli chcesz uniemożliwić użytkownikom używanie kluczy do uwierzytelniania, ale zamiast tego używać haseł, powinieneś dodać następujące elementy do swojego sshd_config :

PasswordAuthentication yes
PubkeyAuthentication no
Urodzony by jeździć
źródło
8

To nie jest możliwe.

Użytkownicy mogą robić wszystko za pomocą swoich plików kluczy, konwertować je na hasła, nawet jeśli je wygenerowałeś.

siposa
źródło
3

Nie możesz Gdy użytkownik ma już w posiadaniu kluczowe dane, nie można go powstrzymać przed usunięciem hasła. Musisz poszukać innych sposobów uwierzytelnienia.

womble
źródło
2

Aby przejąć kontrolę nad kluczami użytkownika, wszystkie klucze należy przenieść do katalogu głównego, w którym klucze są czytelne, ale nie mogą być modyfikowane przez użytkownika końcowego. Można to zrobić poprzez aktualizację sshd_config.

Gdy pliki kluczy znajdą się w kontrolowanej lokalizacji, potrzebujesz interfejsu zarządzania do aktualizacji (i egzekwowania polityki haseł), a następnie dystrybucji kluczy do wymaganych hostów. Rzuć jednym samemu lub zobacz produkty takie jak FoxT / Tectia itp.

PT
źródło
... co łamie zalety klucza publicznego
Patwie
0

Jednym ograniczeniem byłoby użycie wtyczki modułu PAM modułu uwierzytelniającego Google. Zwykle dostępny w oficjalnych pakietach.

Dzięki temu 2FA będzie dostępne za pośrednictwem 6-cyfrowego kodu w smartfonie.

Instrukcje tutaj: Jak skonfigurować uwierzytelnianie wieloskładnikowe dla SSH na Ubuntu 16.04

Basil A
źródło
1
Należy zauważyć, że nie odpowiada to bezpośrednio na pytanie, ale jest (dobrą) alternatywą.
ceejayoz
1
@ceejayoz Masz rację. Dodałem „Jednym łagodzeniem byłoby użycie ...” na początku odpowiedzi, aby wyjaśnić, że jest to alternatywa.
Basil A
-1

PROSTE, po prostu rozszerzasz protokół SSH, tak aby klient SSH lub agent SSH raportował / ustawiał flagę informującą, czy oryginalny klucz prywatny został zaszyfrowany, czy nie (być może strona serwera może nawet zadać zapytanie) - ponieważ strona klienta ma widoczność klucza prywatnego, a nawet monituje o hasło, gdy klucz jest zaszyfrowany.

wallabyted
źródło