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

169

Technicznie, chyba że pamjest skonfigurowany do sprawdzania powłoki, pam_shellsżadna z nich nie może faktycznie uniemożliwić zalogowania się, jeśli nie jesteś w powłoce. W moim systemie mają nawet różne rozmiary, więc podejrzewam, że faktycznie coś robią. Jaka jest różnica? dlaczego oboje istnieją? Dlaczego miałbym używać jednego nad drugim?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin
ksenoterracid
źródło
Ścieżka /bin/falsepowinna istnieć wszędzie, ale nie /sbin/nologin: '/ sbin / nologin': Brak takiego pliku lub katalogu. Wiesz, dlaczego tak jest /usr/sbin/nologinzamiast /sbin/nologinDebiana i Ubuntu?
baptx
4
Ciekawe, dlaczego / bin / false wymaga 21k kodu, aby zwrócić kod powrotu „1”! (i / sbin / nologin zajmuje tylko 4,7 tys.)
Mark Stewart
1
@ nxnev Tak, nie myślałem o kosztach ELF. A od moich dawnych dni IBM był program IEFBR14, który był prostą instrukcją montażu jednego kodu operacyjnego: BR 14 - Rozgałęzienie do rejestru 14, które kończyło program z ustawionym kodem powrotu na cokolwiek, co było w rejestrze 14!
Mark Stewart

Odpowiedzi:

198

Gdy /sbin/nologinjest ustawiony jako powłoka, jeśli użytkownik z tą powłoką zaloguje się, otrzyma uprzejmą wiadomość „To konto jest obecnie niedostępne”. Ten komunikat można zmienić za pomocą pliku /etc/nologin.txt.

/bin/falsejest tylko plikiem binarnym, który natychmiast kończy działanie, zwracając wartość false, gdy jest wywoływany, więc gdy ktoś, kto ma falsepowłokę, loguje się, jest natychmiast wylogowywany po falsewyjściu. Ustawienie powłoki /bin/truema taki sam efekt, że nie pozwala komuś się zalogować, ale falseprawdopodobnie jest używane jako konwencja, trueponieważ znacznie lepiej jest przekazać pojęcie, że dana osoba nie ma powłoki.

Patrząc na nologinstronę manuala, napisano, że została stworzona w 4.4 BSD (wczesne lata 90.), więc przyszła długo po falsejej stworzeniu. Użycie falsejako powłoki jest prawdopodobnie tylko konwencją przeniesioną z początków UNIX-a.

nologinjest opcją bardziej przyjazną dla użytkownika, z dostosowywalnym komunikatem dla użytkownika próbującego się zalogować, więc teoretycznie chcesz z niego skorzystać; ale oba nologini falsebędzie miał taki sam wynik końcowy ktoś nie mający powłokę i nie jest w stanie w ssh.

Mark McKinstry
źródło
10
/usr/sbin/nologindla dystrybucji opartych na Debianie.
Diemo
3
Przynajmniej implementacja BSD rejestruje również próby logowania do syslog, jak widać w opensource.apple.com/source/system_cmds/system_cmds-735/... , podczas gdy / bin / false nie rejestruje niczego
Sergiy Kolodyazhnyy
28

Niektóre serwery FTP umożliwiają dostęp do FTP tylko wtedy, gdy masz prawidłową powłokę. /sbin/nologinjest uważany za prawidłową powłokę, podczas gdy /bin/falsenie jest.

(Myślę, że „prawidłowy” oznacza, że ​​jego kod zakończenia wynosi 0, ale /etc/shellsmoże również do niego wejść, prawdopodobnie zależy od systemu, oprogramowania FTP i konfiguracji).

Mikel
źródło
1
tak, to prawdopodobnie część programu ftp używającego pam i pam używających pam_shells, które, jak powiedziałeś, sprawdzają /etc/shells. Tylko zgadnij ... Mogę się mylić.
ksenoterrakid
4
Właśnie sprawdziłem zarówno Ubuntu 8.04, jak i 14.04. Komenda nologin kończy działanie ze statusem 1 podobnym do false i żadne z prawd, fałszów ani nologin nie są zawarte w / etc / shells. Gdyby tak było, użytkownik mógłby użyć chsh, aby wybrać taką powłokę i zablokować się na swoim koncie.
penguin359,
12

/bin/falseto komenda systemowa, która jest używana w dowolnym momencie, gdy trzeba przekazać komendę do programu, który nie powinien nic więcej robić poza wyjściem z błędem. Jest towarzyszem /bin/true. Oba są bardzo starymi i standardowymi narzędziami POSIX i żadne z nich z definicji nie generuje danych wyjściowych. prawda jest czasem używana w skrypcie powłoki, który powinien zapętlać się w nieskończoność, na przykład:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinjest specjalnie zaprojektowany, aby zastąpić powłokę i generuje dane wyjściowe, na które nie można się zalogować. Zanim to istniało, było powszechnie używane /bin/falsedla fałszywych użytkowników, ale może być mylące, ponieważ użytkownik nie wie, dlaczego zostali wyrzuceni.

penguin359
źródło
4
Warto to zauważyć /bin/truei /bin/falsenie zawsze są to, co dostaniesz w skrypcie powłoki. W zsh truei falsesą wbudowane, w których bashużywa /bin/*wersji
ksenoterracyd
4

Na moim komputerze nologinwyświetla zawsze ten sam komunikat po angielsku, ignorując argumenty. /bin/falseodpowiada --versioni --helpw języku wskazanym przez $LC_CTYPE. Oprócz tych różnic kosmetycznych mają one ten sam efekt.

Pod względem użyteczności nologinjest lepszy, jeśli jest używany na konto prawdziwej osoby, która mówi po angielsku. Ze względów bezpieczeństwa nie ma różnicy.

Gilles
źródło
4
wydaje się, że może falsebardziej dotyczy kont systemowych, które nie mają prawdziwego użytkownika, i nologindotyczy kont wyłączonych.
ksenoterrakid
1
Jaki jest twój system operacyjny? nologinWersja Centos nie przyjmuje żadnych argumentów, ale może odczytać wiadomość /etc/nologin.txt.
Alexander Gonchiy,
3

Zadaniem tylko / bin / false jest wyjście z niezerowym kodem wyjścia.

Wypróbuj w wierszu poleceń:

$:> /bin/false
$:> echo $?
1
$:>

Niektóre instytucje używają / bin / false w polu powłoki pliku hasła. Jeśli użytkownik spróbuje się zalogować, powłoka to / bin / false, więc są natychmiast usuwane

łobuz
źródło
2

Na Linuksie /sbin/nologinpochodzi z projektu util-linux , a /bin/falsejest częścią GNU Coreutils . Służą one różnym rolom, a nologin ma opcję wydrukowania wiadomości dla osób, które logują się w jej powłoce. Komendy linux pochodzą z BSD, gdzie wydaje się, że ich historia jest inna. FreeBSD falsepo prostu zwraca 1 , podczas gdy nologinsprawdza, czy działa na TTY i wysyła komunikat do syslog podczas prób logowania. Wersje linuksowe są nieco bardziej skomplikowane ( falsezakładam, że robię różne zabawy z internacjonalizacją dla wyjścia --help, jak sądzę), ale zasadniczo działają w ten sam sposób.

jsbillings
źródło
1

Mogą być tym samym programem, ale mają różne znaczenia. Nazwa programu mówi wszystko.

  • / bin / false ma na celu zwrócenie wartości false. Jest uruchamiany jako program.
  • / bin / nologin ma na celu zasygnalizować użytkownikowi, że konto nie jest dozwolone. (Jest używana powłoka logowania).
BillThor
źródło
-4

Oba wykonują mniej więcej tę samą pracę, ale /bin/falsesą przydatne dla użytkowników nieuprzywilejowanych. Z drugiej strony /sbin/nologinjest dla uprzywilejowanych użytkowników.

pythondetektywny
źródło
4
Och, jak doszedłeś do tego wniosku?
fpmurphy
Prawdopodobnie zajrzał /etc/passwd. Właśnie obejrzałem /etc/passwdświeżo zainstalowany odcinek Debiana. W tym polu prawie wszystkie konta systemowe (identyfikatory użytkowników <1000) mają /usr/sbin/nologinpowłokę, z kilkoma wyjątkami. Pamiętaj, że nie zgadzam się z odpowiedzią @ pythondetective. Właśnie spekuluję, co mogło doprowadzić go do tego wniosku. Mój komentarz jest jednak trochę spóźniony.
Binarus,
Nie! domyślna powłoka logowania nie jest tym samym co uprawnienia.
MUY Belgia,
niezbyt „detektyw”
Emobe