Technicznie, chyba że pam jest skonfigurowany do sprawdzania powłoki za pomocą pam_shells, żadne z nich nie może uniemożliwić logowania, jeśli nie jesteś w powłoce. W moim systemie mają nawet różne rozmiary, więc podejrzewam, że faktycznie coś robią. Więc 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
Komentarze
- Zobacz także Czy / usr / sbin / nologin jako powłoka logowania służy celom bezpieczeństwa?
- Ja ' jestem ciekawy dlaczego / bin / false pobiera 21 tys. kodu, aby zwrócić kod powrotu ” 1 „! (a / sbin / nologin zajmuje tylko 4,7k)
- przydatne do czytania. Jaka jest różnica między / sbin / nologin i / bin / false
- @MarkStewart Trochę za późno, ale możesz chcieć przeczytać Dlaczego prawda i fałsz są tak duże? i Samouczek Whirlwind na temat tworzenia naprawdę małych plików wykonywalnych ELF dla systemu Linux .
- @nxnev Tak, nie ' nie myślałem o narzutach związanych z ELF. A z moich starych czasów IBM istniał program IEFBR14, który był prostą instrukcją asemblera kodu operacyjnego: BR 14 – Rozgałęzienie do rejestru 14, które kończyło program z kodem powrotu ustawionym na to, co było w rejestrze 14! li>
Odpowiedź
Kiedy /sbin/nologin jest ustawiony jako powłoka, jeśli użytkownik po zalogowaniu się powłoki otrzymają uprzejmą wiadomość „To konto jest obecnie niedostępne”. Ta wiadomość może być zmieniona za pomocą pliku /etc/nologin.txt.
/bin/false to po prostu plik binarny, który natychmiast kończy pracę, zwracając fałsz po wywołaniu, więc gdy ktoś, kto ma false jako dzienniki powłoki in, „zostają natychmiast wylogowani, gdy false wychodzi. Ustawienie powłoki na /bin/true ma taki sam efekt, że nie pozwala komuś się zalogować ale false jest prawdopodobnie używany jako konwencja w stosunku do true, ponieważ jest znacznie lepszy a t przekazuje koncepcję, że osoba nie ma powłoki.
Patrząc na stronę podręcznika nologin, mówi, że została utworzona w 4.4 BSD (wczesne lata 90. ), więc nastąpiło to długo po utworzeniu false. Użycie false jako powłoki jest prawdopodobnie tylko konwencją przeniesioną z wczesnych dni systemu UNIX.
nologin jest opcją bardziej przyjazną dla użytkownika, z możliwością dostosowania komunikatu do użytkownika próbującego się zalogować, więc teoretycznie chciałbyś go użyć; ale zarówno nologin, jak i false będą miały taki sam efekt końcowy, że ktoś nie będzie miał powłoki i nie będzie mógł połączyć się przez ssh.
Komentarze
-
/usr/sbin/nologindla dystrybucji opartych na Debianie. - Przynajmniej implementacja BSD również rejestruje logowanie próbuje przeprowadzić syslog, jak widać na opensource.apple.com/source/system_cmds/system_cmds-735/… , mając na uwadze, że / bin / false nie ' nie rejestruje niczego
- TO – to niesamowita odpowiedź, z przedstawioną tutaj wspaniałą historią. Dobra robota Mark!
-
/etc/nologin.txtfunkcja wiadomości niestandardowych nie jest dostępna w Ubuntu.
Odpowiedź
Niektóre serwery FTP umożliwiają dostęp do FTP tylko wtedy, gdy masz poprawną powłokę. /sbin/nologin jest uważany za prawidłową powłokę, podczas gdy /bin/false nie jest.
(Myślę, że „prawidłowe” oznacza, że stan wyjścia to 0, ale /etc/shells również może do niego wejść, prawdopodobnie zależy to od systemu, oprogramowania FTP i konfiguracji).
Komentarze
- tak, że ' jest prawdopodobnie częścią programu ftp używającego pam, a pam używającego pam_shells, które, jak powiedziałeś, sprawdza
/etc/shells. Zgaduję … Mogę się mylić. - Właśnie sprawdziłem Ubuntu 8.04 i 14.04. Polecenie nologin kończy działanie ze statusem 1 podobnym do fałszu i żadne z wartości true, false 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ć sobie dostęp do swojego konta.
Odpowiedź
/bin/false to polecenie systemowe, które jest używane zawsze, gdy trzeba przekazać polecenie do programu, który powinien jedynie zakończyć działanie z błędem. Jest to dodatek do /bin/true. Oba są bardzo starymi i standardowymi narzędziami POSIX iz definicji nie generują żadnych wyników.Wartość true jest czasami używana dla skryptu 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/nologin jest specjalnie zaprojektowany, aby zamień powłokę i generuje komunikat, narzekając, że nie można się zalogować. Zanim to istniało, często używano /bin/false dla fałszywych użytkowników, ale mogło to być mylące, ponieważ użytkownik nie wiedzieć, dlaczego zostały „wyrzucone”.
Komentarze
- warto zauważyć, że
/bin/truei/bin/falsenie zawsze są tym, co otrzymasz w skrypcie powłoki. Wzshtrueifalsesą wbudowane, gdziebashużywa/bin/*wersji
Odpowiedź
Na moim komputerze nologin wyświetla zawsze tę samą wiadomość w języku angielskim, ignorując argumenty . /bin/false odpowiada na --version i --help w języku wskazanym przez $LC_CTYPE. Poza tymi różnicami kosmetycznymi mają ten sam efekt.
Jeśli chodzi o użyteczność, nologin jest lepsze, jeśli jest używane na koncie prawdziwej osoby, mówi po angielsku. Pod względem bezpieczeństwa nie ma różnicy.
Komentarze
- wygląda na to, że
falsejest bardziej dla kont systemowych, które nie mają prawdziwego użytkownika, anologinjest dla kont wyłączonych. - Jaki jest Twój system operacyjny? Centos
nologinwersja nie pobiera argumentów, ale może czytać wiadomość z/etc/nologin.txt.
Odpowiedz
W systemie Linux /sbin/nologin pochodzi z projektu util-linux , natomiast /bin/false jest częścią GNU Coreutils . Pełnią one różne role, a nologin ma możliwość wydrukowania wiadomości dla osób, które mają to jako ich powłoka, która się loguje. Polecenia linux pochodzą z BS D, gdzie wydają się mieć długą historię bycia innymi. FreeBSD false po prostu zwraca 1 , podczas gdy nologin sprawdza upewnij się, że „s działa na TTY i wysyła wiadomość do syslog podczas prób logowania. Wersje Linuksa są nieco bardziej skomplikowane (false robienie wszelkiego rodzaju zabawnych rzeczy z internacjonalizacją dla wyjścia –help, jak zakładam), ale zasadniczo działa w ten sam sposób.
Odpowiedź
/ bin / false jedynym zadaniem jest wyjście z niezerowym kodem zakończenia.
Spróbuj w wierszu poleceń:
$:> /bin/false $:> echo $? 1 $:>
Niektóre instytucje używają / bin / false w polu powłoki pliku z hasłami. Jeśli użytkownik próbuje się zalogować, powłoka to / bin / false, więc są one natychmiast zamykane.
Odpowiedź
Może to być ten sam program, ale mają różne znaczenia. Nazwa programu mówi wszystko.
- / bin / false ma na celu zwrócenie fałszywej wartości jest uruchamiany jako program.
- / bin / nologin ma na celu wskazanie użytkownikowi, że żadne logowanie na konto nie jest dozwolone. (Używa się powłoki logowania.)
Odpowiedź
Obie wykonują mniej więcej to samo zadanie, ale /bin/false jest przydatny dla nieuprzywilejowanych użytkowników. Z drugiej strony, /sbin/nologin jest dla uprzywilejowanych użytkowników.
Komentarze
- Och, jak to się stało doszedł do takiego wniosku?
- Prawdopodobnie zajrzał do
/etc/passwd. Właśnie rzuciłem okiem na/etc/passwdświeżo zainstalowanego stretch Debiana. W tym oknie prawie wszystkie konta systemowe (identyfikatory użytkowników < 1000) mają/usr/sbin/nologinjako powłokę, z kilkoma wyjątkami. Pamiętaj, że nie zgadzam się z odpowiedzią @pythondetective '. Zastanawiam się tylko, co mogło doprowadzić go do takiego wniosku. Mój komentarz jest jednak trochę spóźniony. - nie! domyślna powłoka logowania to nie to samo, co uprawnienia.