/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ąc chsh
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 -
(AKA su -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 z su -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.