Jak całkowicie wyłączyć konto?

48

Jak całkowicie wyłączyć konto? passwd -lnie pozwoli nikomu zalogować się na konto za pomocą hasła, ale nadal możesz logować się za pomocą kluczy prywatnych / publicznych. Jak całkowicie wyłączyć konto? Jako poprawkę zmieniłem nazwę pliku na authorized_keys_lockme. Czy jest inny sposób?

Braiam
źródło
3
Czy planujesz w końcu włączyć ją ponownie? Blokowanie systemu? Jeśli nie, po prostu usunę konto.
Ken

Odpowiedzi:

59

Prawidłowy sposób według usermod(8)to:

usermod --lock --expiredate 1970-01-02 <username>

(W rzeczywistości argumentem --expiredatemoże być dowolna data przed bieżącą datą w formacie YYYY-MM-DD.)


Wyjaśnienie:

  • --lockblokuje hasło użytkownika. Jednak logowanie przy użyciu innych metod (np. Klucza publicznego) jest nadal możliwe.

  • --expiredate YYYY-MM-DDwyłącza konto w określonym dniu. Według man shadow 51970-01-01 jest niejednoznaczną wartością i nie należy jej używać.

Przetestowałem to na moim komputerze. Po wykonaniu tego polecenia nie jest możliwe logowanie za pomocą hasła ani klucza publicznego.


Aby ponownie włączyć konto w późniejszym terminie, możesz uruchomić:

usermod --unlock --expiredate '' <username>
Christoph Wurm
źródło
7
Nie używaj 1970-01-01, ponieważ ustawi on / etc / shadow expiration na 0. shadow (5) Wartość 0 nie powinna być używana, ponieważ jest interpretowana jako konto bez wygaśnięcia lub jako data wygaśnięcia 1 stycznia 1970 r. Proszę użyć: usermod --lock --expiredate 1970-02-02 <nazwa użytkownika>
Marcus Maxwell
4
Byłoby wspaniale, gdybyś mógł podać metodę odwrócenia tej operacji. Wygląda na usermod --unlock --expiredate '' usernameto, że to zrobi.
Bob
3
Dodając do tego, co napisał @MarcusMaxwell: Strona man dla usermodmówi:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3
1
Dlaczego sam w sobie --expiredate 1nie wystarczy?
Thomas Jensen,
Ale sudo su usernamewydaje się, że działa przy użyciu innego konta.
xuhdev
10

Zablokuj hasło i zmień powłokę na /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(Lub bardziej zwięźle sudo usermod -L -s /bin/nologin username.)

mattdm
źródło
Jak mogę zmienić powłokę na / bin / nologin.?
5
@mattdm Nie jest to kompletne rozwiązanie, ponieważ użytkownik nadal może określić polecenie do wykonania. Na przykład ssh username@hostname /bin/bashwyświetli monit bash, niezależnie od domyślnej powłoki.
phunehehe
4
@phunehehe - próbowałeś? W dzienniku pojawi się komunikat „Użytkownik [nazwa użytkownika] nie jest dozwolony, ponieważ shell / bin / nologin nie istnieje”.
mattdm,
2
O ile mi wiadomo, zachowanie nieprawidłowej powłoki nie jest faktycznie udokumentowane. Z drugiej strony strona podręcznika mówi, że jeśli hasło ma wiodące znaczenie !! w Linuksie konto będzie traktowane jako zablokowane, a to w rzeczywistości nie działa. Wiesz, dokumentacja i rzeczywistość i tak są tylko przybliżonymi dopasowaniami. :)
mattdm,
2
sudo chsh -s /bin/nologinbyłoby lepsze niż /etc/passwdręczne edytowanie . Również w niektórych systemach jest to /sbin/nologin.
Mikel
3

Oto kolejny prosty sposób. Możesz ustawić wygasłe konto użytkownika. Zapobiegnie to logowaniu do konta zarówno za pomocą hasła, jak i klucza ssh, ale nie będzie dotykać hasła.

Aby zablokować konto:

# chage -E 0 username

Konto użytkownika „nazwa użytkownika” zostanie zablokowane w systemie. Aby ponownie włączyć konto użytkownika, wykonaj następujące czynności.

Aby odblokować konto:

# chage -E -1 username

Konto użytkownika „nazwa użytkownika” zostanie ponownie włączone w systemie za pomocą tego samego hasła, co poprzednio. Plik binarny „chage” jest częścią pakietu shadow-utils w systemie Red Hat Linux lub pakietu passwd w systemie Debian Linux.

miklosq
źródło
3

Nie mam wystarczającego przedstawiciela, aby skomentować odpowiedź Legate, ale chciałem się podzielić, że ta odpowiedź pomogła nam w innym przypadku użycia:

1.) konto, o którym mowa, to konto usługi lokalnej działające na aplikacji, a nie konto użytkownika końcowego.

2.) użytkownicy końcowi ssh jako sami oraz sudo /bin/su <user>aby zostać użytkownikiem i administrować aplikacją z powodu wymogu ścieżki audytu, że konto usługi nie może mieć możliwości bezpośredniego logowania.

3.) konto usługi musi mieć poprawną powłokę ( /bin/bash, nie /sbin/nologin), ponieważ platforma planowania przedsiębiorstwa (agent działa lokalnie jako root) musi mieć możliwość pełnienia powłoki su - <user>i nie ma su -s /bin/bash <user>możliwości działania takiej powłoki i jest potrzebna do zdalnego uruchamiania zadań dla większych operacji wsadowych, które obejmują wiele serwerów i baz danych.


Więc ...

passwd -l <user>
Nie spełnia ograniczeń, ponieważ uwierzytelnianie za pomocą klucza publicznego omija PAM i nadal umożliwia bezpośrednie logowanie.

usermod -s /sbin/nologin <user>
Nie spełnia ograniczeń, ponieważ psuje harmonogram w przedsiębiorstwie

usermod --lock --expiredate 1970-01-01 <user>
To jest nasz zwycięzca. Zdalne logowanie wyłączone, ale root może nadal su <user>, podobnie jak inni użytkownicy, dzięki sudoczemu harmonogram działa poprawnie, a autoryzowani użytkownicy końcowi mogą w razie potrzeby zostać docelowymi kontami usług.

Dziękuję za rozwiązanie!

użytkownik1880028
źródło
1

Aby całkowicie usunąć, użyj userdel.

Należy pamiętać, że jeśli usuniesz konto, istnieje ryzyko, że jego identyfikator użytkownika nadal będzie gdzieś używany w systemie plików, a nowy użytkownik odziedziczy własność tych plików, jeśli będzie pod tym samym identyfikatorem użytkownika.

Chcesz zmienić właściciela wszelkich plików, które są własnością usuniętego użytkownika.

Jeśli chcesz później dodać użytkownika z powrotem, zapisz jego wiersze z /etc/passwd(i w systemie Solaris /etc/shadow) w plikach tymczasowych, takich jak /etc/passwd_deleted.

W ten sposób, gdy dodasz go ponownie, możesz użyć tego samego identyfikatora użytkownika i tego samego hasła (które jest szyfrowane w jednym z powyższych plików)

Oświadczenie: Nauczyłem się systemu UNIX na własną rękę, więc nie zdziwiłbym się, gdyby istniał lepszy sposób na tymczasowe wyłączenie użytkownika. W rzeczywistości nawet nie wiem o jakich kluczach prywatnych / publicznych mówisz. Jestem też pewien, że istnieje findpolecenie, którego można użyć do wyszukiwania plików za pomocą identyfikatora użytkownika tego właściciela

Bryan Field
źródło
1
google upoważnione_klucze lub spróbuj przeczytać ten eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html w zasadzie zamiast hasła, umieścisz swój klucz publuc w tym pliku, a kiedy połączysz się z ssh, automatycznie się zalogujesz jeśli jeden z publicznych pasuje do Twojego bieżącego klucza prywatnego