Wyłącz powłokę użytkownika ze względów bezpieczeństwa

58

Mamy kilka kont użytkowników, które tworzymy do zadań automatycznych wymagających szczegółowych uprawnień, takich jak przesyłanie plików między systemami, monitorowanie itp.

W jaki sposób blokujemy te konta użytkowników, aby ci „użytkownicy” nie mieli powłoki i nie mogli się zalogować? Chcemy zapobiec możliwości, że ktoś może zalogować się SSH jako jedno z tych kont użytkowników.

Suman
źródło

Odpowiedzi:

63

Możesz użyć usermodpolecenia, aby zmienić powłokę logowania użytkownika.

usermod -s /sbin/nologin myuser

lub

usermod -s /usr/sbin/nologin myuser

Jeśli twój system operacyjny nie udostępnia / sbin / nologin, możesz ustawić powłokę na polecenie NOOP, takie jak / bin / false:

usermod -s /bin/false myuser
Jordan
źródło
1
/bin/falsewydaje się bardziej powszechne niż /bin/true.
jw013,
@ jw013 Aktualizuję swoją odpowiedź, ale oba powinny działać poprawnie.
jordanm,
1
Zauważ, że na Debianie nologinmożna go znaleźć pod adresem/usr/sbin/nologin
xebeche,
to był mój pierwszy pomysł, niestety „prawidłowe” korzystanie z niektórych kont użytkowników jest wyłączone podczas ustawianianologin
Javier
2
@ jw013 Właściwie mam, /usr/local/bin/maybektóre /dev/urandomly wybiera między tymi dwoma. Może powinienem go użyć: D
hegez
21

Zmiana powłoki logowania niekoniecznie uniemożliwia użytkownikom uwierzytelnianie (z wyjątkiem niektórych usług, które sprawdzają, czy powłoka użytkownika jest wymieniona w /etc/shells).

Ludzie mogą nadal być w stanie uwierzytelniać się w różnych usługach, które twój system zapewnia użytkownikom unixowym, i mogą być nadal upoważnieni do wykonywania niektórych działań, choć prawdopodobnie nie mogą wykonywać dowolnych poleceń bezpośrednio.

Zmiana powłoki na /bin/falselub /usr/sbin/nologinuniemożliwi im uruchamianie poleceń tylko w tych usługach, których można używać do uruchamiania poleceń (logowanie do konsoli, ssh, telnet, rlogin, rexec ...), więc wpływ na autoryzację tylko niektórych usług.

Na sshprzykład nadal pozwala im to na przekierowanie portów.

passwd -lwyłączy uwierzytelnianie za pomocą hasła, ale użytkownik może nadal mieć możliwość korzystania z innych metod uwierzytelniania (np. authorized_keysz ssh).

Przy pamLinuksie możesz przynajmniej użyć pam_shellsmodułu, aby ograniczyć uwierzytelnianie lub autoryzację do użytkowników z dozwoloną powłoką (tymi wymienionymi w /etc/shells). Na przykład ssh, będziesz chciał to zrobić na poziomie autoryzacji ( account), jak w przypadku sshdzastosowań uwierzytelniania pam oprócz innych metod uwierzytelniania (jak authorized_keys), lub możesz to zrobić za pomocą sshd_configdyrektyw w /etc/ssh/sshd_config(jak AllowUsersi znajomych).

Pamiętaj jednak, że dodanie pewnych ograniczeń w globalnej autoryzacji pam może potencjalnie uniemożliwić uruchamianie cronzadań jako tych użytkowników.

Stéphane Chazelas
źródło
Dziękuję Ci. Co byś polecił, biorąc pod uwagę następujący schemat: Potrzebuję utworzyć użytkownika, który potrzebuje dostępu do swojego folderu domowego za pośrednictwem sftp lub sshfs, ale nie może być w stanie zalogować się za pomocą powłoki. Czy to w ogóle jest możliwe ? Upadłem, jakby moduły PAM mogły być rozwiązaniem goto, ale nie rozumiem tego wszystkiego:|
Stphane
@Stphane można przyjrzeć rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha
4

Edytujesz /etc/passwdplik i zmieniasz powłokę użytkownika z /bin/bashlub /bin/shna/sbin/nologin

Mark Cohen
źródło
8
Odpowiedź jest poprawna, ale nigdy nie zaleca się ręcznej edycji / etc / passwd.
jordanm,
3
Dlaczego? Robimy to tak długo, jak jestem profesjonalnym administratorem systemu. (już około 20 lat) W rzeczywistości nie wszystkie dystrybucje linux / unix mają narzędzia do modyfikowania / etc / passwd lub / etc / group .. Chyba że użyjesz czegoś takiego jak Yast lub Smit, które są narzędziami do buforowania ustawień i nadpisywania im nie ma szkody w edycji ręcznej.
Mark Cohen
6
O wiele łatwiej jest popełnić błąd „psuje wszystkim login” przez ręczną edycję, a nie przez pojedynczego użytkownika.
Jordan
2
@jordanm: istnieje sposób, vipwktóry zapobiega tego rodzaju błędom .
eudoxos
4

Najpierw wyłącz hasło, używając passwd -l username.

Uwaga na manstronie passwddotycząca opcji -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.
mdpc
źródło
1
Może to nie być pożądane. Mogą potrzebować hasła do konta systemowego, aby na przykład uzyskać dostęp do poczty e-mail.
jordanm,
1
Niektóre systemy poczty e-mail umożliwiają korzystanie z własnych mechanizmów haseł. Używam Dovecot i Exim z hasłem tylko do wiadomości e-mail. Umożliwia to korzystanie z poczty internetowej na serwerach, których nie użyłbym hasła systemowego. Wirtualne domeny e-mail wymagają własnego hasła, ponieważ nie są powiązane z systemem haseł serwerów.
BillThor
2

Możesz użyć polecenia chsh:

~# chsh myuser

Wprowadź nowe szczegóły powłoki na żądanie:

Login Shell [/bin/sh]: /bin/nologin

Lub krótsza wersja:

~# chsh myuser -s /bin/nologin
Porozmawiajmy
źródło
0

Aby uniemożliwić zalogowanie się użytkownika, a nawet uwierzytelnienie przez ssh, które umożliwia przekierowanie portów (jak opisano tutaj Stephane), modyfikuję użytkownika, aby był podobny do nobodyużytkownika systemu :

  • zablokowane uwierzytelnianie hasła w /etc/shadow(z *lub !!w odpowiednim polu)
  • wyłączona powłoka w /etc/passwd(np. /sbin/nologinw odpowiednim polu)
  • Domowy katalog tylko do odczytu w /etc/passwd(np. /w odpowiednim polu)
naciśnięcie klawisza
źródło