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/nologin
dla 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.txt
funkcja 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/true
i/bin/false
nie zawsze są tym, co otrzymasz w skrypcie powłoki. Wzsh
true
ifalse
są wbudowane, gdziebash
uż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
false
jest bardziej dla kont systemowych, które nie mają prawdziwego użytkownika, anologin
jest dla kont wyłączonych. - Jaki jest Twój system operacyjny? Centos
nologin
wersja 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/nologin
jako 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.