To pierwotnie wspomniane pytanie passwd --delete <username>
jest niebezpieczne : dzięki temu pole zaszyfrowanego hasła /etc/shadow
będzie całkowicie puste.
username::...
Jeśli skonfigurowałeś sshd
odmawianie uwierzytelniania hasła, to jest to bezpieczne z SSH ... Ale jeśli jakakolwiek inna usługa w twoim systemie używa uwierzytelniania hasła i nie jest skonfigurowana do odrzucania haseł zerowych, umożliwia to dostęp bez hasła! Nie chcesz tego.
adduser --disabled-passwd
wyświetli /etc/shadow
wpis, w którym pole zaszyfrowanego hasła jest tylko gwiazdką, tj
username:*:...
To jest „zaszyfrowane hasło, które nigdy nie może być z powodzeniem wprowadzony”, czyli oznacza to, że konto jest ważne i technicznie pozwala loginów, ale to sprawia, że autoryzacja hasłem niemożliwe do osiągnięcia sukcesu . Jeśli więc masz na serwerze jakiekolwiek inne usługi oparte na uwierzytelnianiu hasła, ten użytkownik jest przed nimi zablokowany.
Tylko metody uwierzytelniania, które używają czegoś innego niż standardowe hasło do konta (np. Klucze SSH) będą działać dla tego użytkownika dla każdej usługi, która korzysta z plików haseł systemowych w tym systemie. Jeśli potrzebujesz użytkownika, który może zalogować się tylko za pomocą kluczy SSH, właśnie tego chcesz.
Jeśli chcesz ustawić istniejące konto na ten stan, możesz użyć tego polecenia:
echo 'username:*' | chpasswd -e
Istnieje trzecia wartość specjalna dla pola zaszyfrowanego hasła: adduser --disabled-login
wtedy pole będzie zawierać tylko jeden wykrzyknik.
username:!:...
Podobnie jak gwiazdka, uniemożliwia to uwierzytelnienie hasła, ale ma również dodatkowe znaczenie: oznacza hasło jako „zablokowane” w przypadku niektórych narzędzi administracyjnych. passwd -l
ma taki sam efekt, poprzedzając istniejący skrót hasłem wykrzyknikiem, co ponownie uniemożliwia użycie uwierzytelniania hasła.
Ale oto pułapka dla nieostrożnych: w 2008 roku wersja passwd
polecenia pochodzącego ze starego shadow
pakietu została zmieniona, aby zmienić definicję passwd -l
z „blokowania konta” na „blokowanie hasła”. Podanym powodem jest „zgodność z inną wersją passwd”.
Jeśli (jak ja) nauczyłeś się tego dawno temu, może to być nieprzyjemną niespodzianką. To nie pomaga w kwestiach, które adduser(8)
najwyraźniej nie są jeszcze świadome tego rozróżnienia.
Część, która wyłącza konto dla wszystkich metod uwierzytelniania jest rzeczywiście ustawienie daty wygaśnięcia wartość z 1 na rachunek: usermod --expiredate 1 <username>
. Przed rokiem 2008 passwd -l
pochodzi on z shadow
zestawu źródłowego używanego do tego oprócz prefiksu hasła z wykrzyknikiem - ale już tego nie robi.
Dziennik zmian pakietów Debiana mówi:
- debian / patches / 494_passwd_lock-no_account_lock: Przywróć poprzednie zachowanie passwd -l (które zmieniło się w # 389183): zablokuj tylko hasło użytkownika, a nie konto użytkownika. Również wyraźnie udokumentuj różnice. To przywraca zachowanie wspólne z poprzednimi wersjami passwd i innymi implementacjami. Zamyka: # 492307
Historie błędów dla błędu 492307 i błędu 389183 w Debianie mogą być pomocne w zrozumieniu tego myślenia.
sudo
uzyskania dostępu (albo z powodu braku uprawnień sudo, albo z uprawnieniami sudo zNOPASSWD
), wybrana odpowiedź powinna być odpowiednia. Przesłałem poprawkę do tej odpowiedzi, aby uwzględnić problem sudo, ale pomyślałem, że w międzyczasie przywołam ją tutaj.