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/nologin
zamiast tego powłokę .
Widzę ze strony podręcznika, która /sbin/nologin
drukuje użytkownikowi wiadomość, że konto jest wyłączone, a następnie kończy działanie. Prawdopodobnie /bin/false
nic nie wydrukuje.
Widzę też, że /sbin/nologin
jest wymieniony w /etc/shells
, podczas gdy /bin/false
nie ma.
Strona podręcznika mówi, że FTP zablokuje dostęp użytkownikom z powłoką niewymienioną na liście /etc/shells
i sugeruje, że inne programy mogą zrobić to samo. Czy to oznacza, że ktoś może FTP na konto /sbin/nologin
z 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
?
Odpowiedzi:
/bin/false
to 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/nologin
jest narzędziem BSD, które ma podobne zachowanie/bin/false
(zwraca wartość logiczną false), ale drukuje również dane wyjściowe, co/bin/false
jest 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/nologin
w/etc/shells
. Standardowym efektem/etc/shells
jest lista programów dozwolonych do użycia,chsh
gdy 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/nologin
i/bin/false
na/etc/rsh
, które zabraniają użytkownikom tych muszli zmianę ich powłokę używającchsh
do 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/nologin
do 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
scp
nie będzie działać z niepoprawną powłoką.scponly
w tym przypadku może być używany jako powłoka.Dodatkowo wybór powłoki wpływa na działanie
su -
(AKAsu -l
). W szczególności wyjście/sbin/nologin
zostanie wydrukowane na standardowe wyjście, jeśli jest to powłoka; nie może tak być/bin/false
. W obu przypadkach polecenia uruchomione zsu -cl
zakończą się niepowodzeniem.Wreszcie odpowiedź:
Aby wyłączyć konto, polegaj na żadnym z nich, ale ustaw powłokę
/sbin/nologin
w celach informacyjnych (chyba że/sbin/nologin
jest w/etc/shells
, w którym momencie powinieneś użyć/bin/false
, co nie powinno być). Zamiast tego ustaw pole hasła/etc/passwd
na!
, co gwarantuje,crypt
że będzie prawidłowe dla braku haseł. Rozważ ustawienie skrótu w/etc/shadow
taki sam sposób, aby uniknąć błędów.passwd -l
zrobi 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.źródło
titantools
pakiecie:noshell
. Ta pseudo-powłoka zapewnia możliwości inspekcji, logowanie do syslog próbuje używać kontnoshell
jako powłoki, a jednocześnie uniemożliwia dostęp./bin/false
jako powłoki logowania dla osób, które nie powinny się logować.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.txt
przynajmniej na pochodnych RHEL.Jak wiesz,
/bin/false
to 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/nologin
pozwala użytkownikom na logowanie się do FTP/bin/false
lub/bin/true
całkowicie uniemożliwi zalogowanie się do dowolnej usługi.W związku z tym,
/bin/false
czy/bin/true
jest najlepiej uniemożliwić użytkownikowi logowania do dowolnej usługi, podczas gdy/sbin/nologin
nadal 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.źródło
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).
źródło
/etc/shells
? Jak skonfigurowany jest Twój serwer FTP?