Jaka jest różnica między / sbin / nologin i / bin / false?


69

Często słyszałem, że zaleca się wyłączenie konta użytkownika poprzez ustawienie jego powłoki na /bin/false. Ale w moich istniejących systemach Linux widzę, że duża liczba istniejących kont (wszystkie konta usług) ma /sbin/nologinzamiast tego powłokę .

Widzę ze strony podręcznika, która /sbin/nologindrukuje użytkownikowi wiadomość, że konto jest wyłączone, a następnie kończy działanie. Prawdopodobnie /bin/falsenic nie wydrukuje.

Widzę też, że /sbin/nologinjest wymieniony w /etc/shells, podczas gdy /bin/falsenie ma.

Strona podręcznika mówi, że FTP zablokuje dostęp użytkownikom z powłoką niewymienioną na liście /etc/shellsi sugeruje, że inne programy mogą zrobić to samo. Czy to oznacza, że ​​ktoś może FTP na konto /sbin/nologinz powłoką?

Jaka jest tutaj różnica? Którego z nich należy użyć do wyłączenia konta użytkownika iw jakich okolicznościach? Jakie jeszcze efekty ma aukcja /etc/shells?



1
Jako ogólna informacja, która działa. Myślę konkretnie z perspektywy administracji systemu.
Michael Hampton

Po prostu jako tło.
dmourati

Odpowiedzi:


70

/bin/falseto program narzędziowy, towarzyszący /bin/true, który jest użyteczny w pewnym abstrakcyjnym sensie, aby upewnić się, że unix jest kompletny. Znaleziono jednak nowe cele dla tych programów; rozważ instrukcję BASH /some/program || /bin/true, która zawsze będzie oceniać wartość logiczną na true ( $? = 0) bez względu na zwrot /some/program.

Wykryte użycie /bin/false, jak już zidentyfikowano, ma postać pustej powłoki dla użytkowników, którym nie wolno się logować. W tym przypadku system zachowa się dokładnie tak, jakby powłoka nie uruchomiła się.

POSIX (choć mogę się mylić i może to być SUS) ogranicza oba te polecenia, aby nie robiły nic poza zwracaniem odpowiedniej wartości logicznej.

/sbin/nologinjest narzędziem BSD, które ma podobne zachowanie /bin/false(zwraca wartość logiczną false), ale drukuje również dane wyjściowe, co /bin/falsejest zabronione. Ma to pomóc użytkownikowi zrozumieć, co się stało, chociaż w praktyce wiele emulatorów terminali po prostu zamknie się po zakończeniu powłoki, co w niektórych przypadkach sprawi, że komunikat będzie prawie nieczytelny.

Niewiele jest celem do notowań /sbin/nologinw /etc/shells. Standardowym efektem /etc/shellsjest lista programów dozwolonych do użycia, chshgdy użytkownicy zmieniają własną powłokę (i nie ma wiarygodnego powodu, aby zmienić własną powłokę na /sbin/nologin). Administrator może zmienić powłokę dowolnej osoby na dowolną. Jednakże, może chcesz wymienić zarówno /sbin/nologini /bin/falsena /etc/rsh, które zabraniają użytkownikom tych muszli zmianę ich powłokę używając chshdo nieszczęśliwego zdarzenia, które dostają powłokę.

Demony FTP mogą uniemożliwiać dostęp użytkownikom z powłoką, której nie ma w / etc / shells, lub mogą używać dowolnej innej logiki, którą chcą. W każdym przypadku należy unikać uruchamiania FTP, ponieważ sftp(który zapewnia podobną funkcjonalność) jest podobny, ale bezpieczny. Niektóre witryny używają /sbin/nologindo wyłączania dostępu do powłoki, jednocześnie umożliwiając dostęp sftp poprzez włączenie go /etc/shells. Może to otworzyć backdoora, jeśli użytkownik będzie mógł tworzyć cronjobs.

W obu przypadkach scpnie będzie działać z niepoprawną powłoką. scponlyw tym przypadku może być używany jako powłoka.

Dodatkowo wybór powłoki wpływa na działanie su -(AKA su -l). W szczególności wyjście /sbin/nologinzostanie wydrukowane na standardowe wyjście, jeśli jest to powłoka; nie może tak być /bin/false. W obu przypadkach polecenia uruchomione z su -clzakończą się niepowodzeniem.

Wreszcie odpowiedź:

Aby wyłączyć konto, polegaj na żadnym z nich, ale ustaw powłokę /sbin/nologinw celach informacyjnych (chyba że /sbin/nologinjest w /etc/shells, w którym momencie powinieneś użyć /bin/false, co nie powinno być). Zamiast tego ustaw pole hasła /etc/passwdna !, co gwarantuje, cryptże będzie prawidłowe dla braku haseł. Rozważ ustawienie skrótu w /etc/shadowtaki sam sposób, aby uniknąć błędów. passwd -lzrobi to za ciebie.

Trzecim sposobem wyłączenia konta jest ustawienie pola daty ważności konta na starą datę (np. usermod --expiredate 1). Zapobiegnie to logowaniu w przypadku, gdy Twoja konfiguracja pozwoli użytkownikom uwierzytelnić się na ich koncie unix bez hasła, a usługa, której używają, nie wymaga powłoki.


9
Chociaż ta odpowiedź doskonale podsumowuje różne opcje (i odpowiedzi na pytanie), czułem potrzebę, aby wskazywał na użytecznym źródłem tym przypadku zastosowania, który jest dostępny przynajmniej w magazynie repozytoriach Debiana, w titantoolspakiecie: noshell. Ta pseudo-powłoka zapewnia możliwości inspekcji, logowanie do syslog próbuje używać kont noshelljako powłoki, a jednocześnie uniemożliwia dostęp.
dawud

1
W żadnym wypadku nie jest apokryficzny, ale w rzeczywistości jest dość powszechny wśród sysadminów pewnego rocznika (kaszel), aby używać go /bin/falsejako powłoki logowania dla osób, które nie powinny się logować.
MadHatter

2
Apokryficzny w tym sensie, że nie jest to pierwotne zamierzone zastosowanie. Nie powiedziałem anachroniczny; Widzę to codziennie :)
Falcon Momot

1
Wyłączenie konta przez nieprawidłowe hasło nie działa zbyt dobrze z ssh. Jeśli użytkownik wcześniej skonfigurował uwierzytelnianie za pomocą klucza publicznego, może i tak być w stanie się zalogować.
joshudson

3
sshd jest udokumentowany, aby sprawdzić, czy konta, które są zablokowane w określony sposób (hashe haseł zaczynające się na!! są wymienione konkretnie), nawet z auth pubkey.
Falcon Momot,

13

Po przeprowadzeniu pewnych badań, zastosowana metoda zależy od tego, co musisz zablokować. Jeśli użytkownik zaloguje się przy użyciu tego zestawu do powłoki, wyświetli się komunikat z informacją This account is currently unavailable., że można to zmienić, tworząc plik /etc/nologin.txtprzynajmniej na pochodnych RHEL.

Jak wiesz, /bin/falseto nie jest skorupa. Ich sposób działania polega na tym, że zwraca false, który wylogowuje się natychmiast po wyjściu z pliku binarnego. Zauważ, /bin/trueże osiągnąłby ten sam efekt.

Odnośnie pytania FTP: Tak, masz rację, ponieważ ustawienie powłoki /sbin/nologinpozwala użytkownikom na logowanie się do FTP /bin/falselub /bin/truecałkowicie uniemożliwi zalogowanie się do dowolnej usługi.

W związku z tym, /bin/falseczy /bin/truejest najlepiej uniemożliwić użytkownikowi logowania do dowolnej usługi, podczas gdy /sbin/nologinnadal pozwoli użytkownikom zalogować się do usług innych niż SSH lub konsoli lokalnej przy jednoczesnym zapewnieniu informacji zwrotnej dla użytkownika, że konto jest nieaktywne, a najlepiej jest używany, gdy tylko SSH / miejscowego konsola musi być zablokowana.


2

Czy ktoś próbował udowodnić, że / bin / false uniemożliwiłby dostęp do FTP?

Właśnie zmieniłem powłokę użytkownika na / bin / false i mogłem FTP w porządku.

Używam / dev / null, aby całkowicie zablokować użytkownika (no oprócz e-maila, nadal mogą POP3).


Czy miałeś to /etc/shells? Jak skonfigurowany jest Twój serwer FTP?
Michael Hampton

nie ma reguły mówiącej, że użytkownik potrzebuje powłoki, aby zalogować się na serwerze FTP.
Petter H

Nie zezwoli na to na niektórych demonach FTP, a nie na innych. Istnieje wiele różnic w funkcjonalności między różnymi. Klasyczna implementacja uniemożliwia dostęp każdemu, kto nie ma powłoki, ale to nie znaczy, że wszystkie implementacje muszą.
Falcon Momot,
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.