Wygasło hasło i login SSH przy użyciu UsePAM tak


12

Istnieje maszyna SLES 11. Użytkownicy logują się za pośrednictwem SSH i klucza publicznego (mieszane, niektórzy użytkownicy używają hasła, inni używają klucza ssh)

Sshd_config ma:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

Problem: jeśli hasło wygasa dla użytkownika korzystającego z klucza publicznego, zostanie wyświetlony monit o zmianę hasła.

Pytanie: Jak możemy ustawić konfigurację PAM lub sshd, aby umożliwić użytkownikom logowanie się, jeśli mają prawidłowy klucz SSH i hasło wygasło? - Bez wyskakującego okienka „zmień hasło”.

AKTUALIZACJA # 1: Rozwiązaniem nie może być: „UsePAM nie”

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

AKTUALIZACJA # 2: Rozwiązaniem nie może być: ustaw hasło użytkownika, aby nigdy nie wygasało

AKTUALIZACJA # 3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 

Możesz to zrobić, usuwając pam_unix.soz sessionsekcji /etc/pam.d/sshd(i zamień na, pam_lastlog.sojeśli go nie ma. Nie jestem pewien, czy pam_unix.so/sessionto ten robi, czy nie, ale wydaje się, że to właściwe miejsce.
Patrick

1
ustaw konto użytkownika, aby nigdy nie wygasło :)
Raza,

@Raza: Dzięki :) świetny pomysł, ale nie może być rozwiązania :(
thequestionthequestion

spróbuj ForcedPasswdChange Noto dla SSH1
Raza

1
Uświadomiłem sobie, że ForcedPasswdChange Nonie będzie działać po upływie terminu ważności. szukasz rozwiązania, które pozwoli wygasłego użytkownika na logowanie
Raza,

Odpowiedzi:


10

Kolejność operacji powodująca monit o wygaśnięcie hasła jest następująca:

  • SSH uruchamia accountetap PAM , który weryfikuje, czy konto istnieje i jest ważne. Do accountzawiadomienia etapie, że hasło wygasło i pozwala SSH wiem.
  • SSH wykonuje uwierzytelnianie oparte na kluczach. Nie potrzebuje do tego PAM, więc nie prowadzi authsceny. Następnie konfiguruje sesję logowania SSH i uruchamia sessionetap PAM .
  • Następnie SSH pamięta, że ​​PAM powiedział mu, że hasło wygasło, drukuje komunikat ostrzegawczy i prosi PAM o zmianę hasła przez użytkownika. SSH rozłącza się.

Wszystko to robi SSH i nie widzę żadnych opcji SSH, aby skonfigurować to zachowanie. Jeśli więc nie chcesz zbudować niestandardowej wersji SSH i / lub PAM, jedyną opcją, którą widzę, jest zapobieganie zgłaszaniu przez PAM wygasłego hasła do SSH. Jeśli to zrobisz, spowoduje to całkowite wyłączenie wygasłego sprawdzania hasła przez SSH , nawet jeśli użytkownik loguje się przez SSH za pomocą hasła. Inne (inne niż SSH) metody logowania nadal sprawdzają wygaśnięcie hasła.

Twój aktualny pam.d/sshdplik ma account include common-accountwpis. Zakładam, że istnieje common-accountplik, który zawiera odniesienie do pam_unix.so. Jest to linia, która sprawdza, czy hasło wygasło.

Prawdopodobnie nie chcesz dotykać samego common-accountpliku, ponieważ jest on używany do innych metod logowania. Zamiast tego chcesz usunąć includez pam.d/sshdpliku. Jeśli istnieją inne funkcje common-accountoprócz pam_unix.so, prawdopodobnie chcesz, aby umieścić je bezpośrednio pam.d/sshd.

Na koniec pamiętaj, że jest to modyfikacja bezpieczeństwa twojego systemu i nie powinieneś ślepo mi ufać, że dam ci dobrą radę. Przeczytaj, jak działa PAM, jeśli go nie znasz. Niektóre miejsca zaczynające może być man 7 PAM, man 5 pam.confi man 8 pam_unix.


Ładne wyjaśnienie kolejności operacji, dzięki.
M_dk

3

Do pam_unix.so (około lutego 2016 r.) Dodano opcję o nazwie no_pass_expiry ( zmiana kodu źródłowego tutaj lub tutaj strona man ). Zasadniczo informuje pam_unix, aby zignorował wygasłe hasło, jeśli do uwierzytelnienia użyto czegoś innego niż pam_unix, np. Jeśli sshd wykonał uwierzytelnienie.

W rezultacie, jeśli masz wersję pam_unix.so, która zawiera tę opcję, powinieneś być w stanie skonfigurować PAM do:

  1. Nadal ostrzegam, ale nie wymaga zmiany wygasłego hasła, jeśli do uwierzytelnienia przez ssh użyto klucza SSH
  2. Wymagaj zmiany hasła wygasłego hasła, jeśli do uwierzytelnienia przez ssh użyto loginu / hasła przez pam_unix.so
  3. Nie wpływa na żadną inną sekwencję uwierzytelniania (np. Za pośrednictwem usługi logowania).

Na przykład skonfigurowałem serwer RHEL 7, aby wykonać powyższe czynności, po prostu aktualizując /etc/pam.d/sshd i dodając pam_unix.so no_pass_expiry do obu typów kont i haseł, np.

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth

1
Właśnie to wypróbowałem i działa. Możesz sprawdzić, czy twój PAM obsługuje tę opcję, czy nie, wyszukując „no_pass_expiry”, czy nie, na stronie podręcznika „man 8 pam_unix”.
Tomofumi,

Zmiana kodu z 2016 roku wciąż nie jest obecna w Ubuntu 18.04 ... :(
ColinM

0
  • Możesz nie chcieć zmieniać PAM lub sshd_config ze względu na zgodność.
  • Być może używasz uwierzytelnienia hasła nr w sshd_config
  • Możliwe, że masz losowe hasła.
  • Możliwe, że nawet wdrożyłeś zgodność z CIS.
  • Mimo to użytkownicy otrzymują monit

Następnie root może dostosować datę zmiany hasła:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.