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


Ś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.


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).


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.


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.


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


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.


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).

-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.


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
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.