Używam Ubuntu 14.04.1 (z OpenSSH 6.6 i libpam-google -hentator 20130529-2).
Próbuję skonfigurować logowanie SSH, w którym klucz publiczny uwierzytelnia się (bez hasła), a użytkownik jest monitowany o kod z Google Authenticator.
Po wykonaniu / dostosowaniu tych instrukcji otrzymałem monit o podanie hasła oraz monit o autoryzację Google:
- https://scottlinux.com/2013/06/02/use-google-authenticator-for-two-factor-ssh-authentication-in-linux/
- http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
- https://wiki.archlinux.org/index.php/Google_Authenticator i https://wiki.archlinux.org/index.php/SSH_keys#Two-factor_authentication_and_public_keys
- https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-two-factor-authentication
Zainstalowałem pakiet, edytowałem moje /etc/ssh/sshd_config
i /etc/pam.d/ssh
pliki
W /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
i na dole /etc/pam.d/ssh
:
auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")
Wiem, że PAM zależy od zamówienia, ale czy jest sshd_config
również?
Co ja robię źle? Każda pomoc będzie mile widziana.
PasswordAuthentication no
, ale to nie było to. Problem polega na tym, że miałem / miałemControlMaster auto
iControlPath
dyrektyw w moim pliku ~ / .ssh / config. Chciałem się upewnić, że się nie zamykam, więc zawsze zostawiam otwartą sesję SSH. Ponieważ mój komputer po prostu ich używałby ponownie, zawsze wchodziłem bez systemu proszącego o token. Oznacziłem twoją odpowiedź jako poprawną, ponieważ ktoś podążający za nią rzeczywiście otrzymałby działającą konfigurację. Dzięki!PasswordAuthentication no
,ChallengeResponseAuthentication yes
,AuthenticationMethods publickey,keyboard-interactive
, iUsePAM yes
wsshd_config
. Sprawdza mój klucz, a następnie prosi mnie o token Google Authenticator, a następnie prosi mnie o hasło. Sprawia, że robię wszystkie trzy - nie mogę pominąć żadnego z nich. Próbowałem też,AuthenticationMethods publickey,keyboard-interactive:pam
jak sugeruje strona podręcznika, ale to nic nie zmieniło. Jakieś pomysły?@include common-auth
wiersz, który pokazują odpowiedzi. Na początku myślałem, że to komentarz dopam_google_authenticator
linii w /etc/pam.d/sshd.auth substack password-auth
), ale twój komentarz rozwiązał mój problem!W końcu udało mi się to uruchomić, umieszczając
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
na górze/etc/pam.d/sshd
.Według strony man pam.d :
success=done
oznacza, że jeśli Google Authenticator się wyloguje, nie będzie przeprowadzane żadne uwierzytelnianie, co oznacza brak dodatkowego hasła.default=die
oznacza, że jeśli Google Authenticator odrzuci próbę logowania, uwierzytelnianie natychmiast się nie powiedzie, pomijając monit o podanie hasła.Więc
[success=done new_authtok_reqd=done default=die]
to rodzaj mieszanki pomiędzysufficient
irequisite
kontrolnych wartości, ponieważ chcemy zachowanie zarówno: jeśli sukcesem zakończyć natychmiast (wystarczy), a jeśli awarii, również rozwiązać natychmiast (wymagane).Zauważ, że
nullok
argument pam_google_authenticator.so oznacza, że jeśli~/.google_authenticator
plik nie zostanie znaleziony dla użytkownika, uwierzytelnianie za pomocą klucza publicznego przebiega normalnie. Jest to przydatne, jeśli chcę zablokować tylko część moich kont za pomocą 2FA.źródło
Odpowiedź Linusa Kendalla powinna działać na starszych systemach, ale na nowszych komputerach z Linuksem jest problematyczna; na moim serwerze opartym na arch. linuksie konfiguracja ta powoduje, że po otrzymaniu mojego klucza ssh pytam o kod uwierzytelniający i hasło (tzn. potrzebuję wszystkich 3).
Prostszym rozwiązaniem, które zapobiega temu problemowi i które powinno działać w każdym systemie, jest zmiana wpisu
/etc/pam.d/sshd
na:Następnie dokonaj tych samych zmian w `` / etc / ssh / sshd`, o których wspomniał Linus:
To powinno poprosić cię o token uwierzytelniający po tym, jak serwer zaakceptuje twój klucz publiczny. Nie powinien prosić o hasło.
Na marginesie, jeśli chcesz mieć konto użytkownika sftp, prawdopodobnie będziesz musiał ominąć uwierzytelniacz google, aby go uruchomić. Oto sugestia, jak to zrobić bezpiecznie za pomocą więzienia sftp. W
etc/ssh/sshd_config
:Trzeba będzie zrobić uprawnienia na / ścieżka / do / ftp / dir zapisu korzeń tylko (np
chown root:root /path/to/ftp/dir
,chmod 755 /path/to/ftp/dir
. Każdy z rodziców powyżej tego katalogu również potrzebują bezpiecznych uprawnień. The way I zazwyczaj to zrobić to poprzez katalog chroot/home/shared/user
, tworząc katalog tam (np. „dane”), a następnie podłączenie dowolnego katalogu, który chcę udostępnić w ten sposób:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
Jeśli wykonasz wszystkie te kroki, będziesz mieć klucz publiczny + login uwierzytelniający google dla użytkowników ssh oraz funkcjonalne chronione hasłem konto sftp do przesyłania danych.
źródło