Technicky, pokud pam
je nastaven tak, aby zkontroloval váš shell pomocí pam_shells
ani jeden z nich nemůže ve skutečnosti zabránit vašemu přihlášení, pokud nejste v prostředí. V mém systému mají dokonce různé velikosti, takže mám podezření, že něco skutečně dělají. V čem je tedy rozdíl? proč oba existují? Proč bych měl používat jeden nad druhým?
-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
Komentáře
- Viz také Slouží / usr / sbin / nologin jako přihlašovací shell k bezpečnostním účelům?
- Jsem ‚ zvědavý why / bin / false takes 21k of code to return a “ 1 “ return code! (a / sbin / nologin trvá pouze 4,7 kB)
- užitečné ke čtení. Jaký je rozdíl mezi / sbin / nologin a / bin / false
- @MarkStewart Trochu pozdě, ale možná si budete chtít přečíst Proč jsou pravdivé a nepravdivé tak velké? a Výukový program Whirlwind pro vytváření skutečně spustitelných spustitelných souborů ELF pro Linux .
- @nxnev Ano, nemyslel jsem ‚ na režii ELF. A z mých starých IBM dnů existoval program IEFBR14, který byl jednoduchou instrukcí pro sestavení op-kódu: BR 14 – Branch to register 14, který by ukončil program s návratovým kódem nastaveným na cokoli, co bylo v registru 14!
Odpověď
Když je jako shell nastaven /sbin/nologin
s tímto přihlášením do shellu „dostanou zdvořilou zprávu„ Tento účet není aktuálně k dispozici. “Tuto zprávu lze změnit pomocí souboru /etc/nologin.txt
.
/bin/false
je pouze binární soubor, který se okamžitě ukončí a vrátí hodnotu false, když se volá, takže když někdo, kdo má false
jako protokoly prostředí dovnitř se okamžitě odhlásí, když false
skončí. Nastavení prostředí na /bin/true
má stejný účinek, že neumožňuje někomu se přihlásit ale false
se pravděpodobně používá jako konvence nad true
, protože je to mnohem lepší vyjadřuje koncept, že osoba nemá shell.
Při pohledu na manuálovou stránku nologin
se říká, že byla vytvořena v 4.4 BSD (začátek 90. let ), takže to přišlo dlouho poté, co byl vytvořen false
. Použití false
jako shellu je pravděpodobně jen konvence přenesená z počátků systému UNIX.
nologin
je uživatelsky přívětivější možnost s přizpůsobitelnou zprávou danou uživateli, který se pokouší přihlásit, takže byste ji teoreticky chtěli použít; ale nologin
i false
budou mít stejný konečný výsledek toho, že někdo nebude mít shell a nebude moci ssh dovnitř.
Komentáře
-
/usr/sbin/nologin
pro distribuce založené na Debianu. - Přinejmenším se také přihlašuje implementace BSD pokusy o přihlášení k syslogu, jak je vidět v opensource.apple.com/source/system_cmds/system_cmds-735/… , vzhledem k tomu, že / bin / false by ‚ nic nezaznamenal
- TOTO – je úžasná odpověď se skvělou historií, která je zde uvedena. Dobrá práce, Marku!
- Funkce
/etc/nologin.txt
vlastní zprávy není v Ubuntu k dispozici.
Odpověď
Některé servery FTP vám umožní přístup FTP pouze v případě, že máte platný shell. /sbin/nologin
je považován za platný shell, zatímco /bin/false
není.
(Myslím, že „valid“ znamená jeho stav ukončení je 0, ale /etc/shells
se do něj také může dostat, pravděpodobně to závisí na systému, softwaru FTP a vaší konfiguraci.)
Komentáře
- ano, ‚ je pravděpodobně součástí programu ftp pomocí pam a pam pomocí pam_shells, které, jak jste řekli, kontrolují
/etc/shells
. Jen odhad … mohl bych se mýlit. - Právě jsem zkontroloval Ubuntu 8.04 i 14.04. Příkaz nologin končí se stavem 1 podobným false a žádný z true, false nebo nologin není zahrnut v / etc / shells. Pokud by byly, mohl by uživatel pomocí chsh vybrat takový shell a zamknout se ze svého účtu.
Odpovědět
/bin/false
je systémový příkaz, který se používá kdykoli, když potřebujete předat příkaz programu, který by neměl dělat nic jiného než skončit s chybou. Je to společník /bin/true
. Oba jsou velmi staré a standardní nástroje POSIX a podle definice nevytvářejí žádný výstup.true se někdy používá pro shell skript, který by měl smyčku neurčitě, například:
while true; do ... # Waste time if [ $wasted_time -gt 100000 ]; then exit 0 fi ... done
/usr/sbin/nologin
je speciálně navržen tak, aby nahradit shell a vytvořit výstup, který si stěžuje, že se nemůžete přihlásit. Než existoval, bylo běžné používat /bin/false
pro fiktivní uživatele, ale mohlo by to být matoucí, protože uživatel není vědět, proč jsou „znovu nastartováni.
Komentáře
- stojí za zmínku, že
/bin/true
a/bin/false
nejsou vždy to, co ve skořápkovém skriptu získáte. Vzsh
true
afalse
jsou vestavěné moduly, kdebash
používá/bin/*
verze
Odpověď
Na mém počítači nologin
zobrazuje vždy stejnou zprávu v angličtině, ignoruje argumenty . /bin/false
odpovídá na --version
a --help
v jazyce označeném $LC_CTYPE
. Kromě těchto kosmetických rozdílů mají stejný účinek.
Z hlediska použitelnosti je nologin
lepší, pokud je používán na účet skutečné osoby, která mluví anglicky. Z hlediska bezpečnosti neexistuje žádný rozdíl.
Komentáře
- se zdá být snad
false
je více pro systémové účty, které nemají skutečného uživatele, anologin
je pro zakázané účty. - Jaký je váš operační systém? Centos
nologin
verze nevyžaduje žádné argumenty, ale může číst zprávy z/etc/nologin.txt
.
Odpovědět
V systému Linux pochází /sbin/nologin
z projektu util-linux , zatímco /bin/false
je součástí GNU Coreutils . Slouží různým rolím a nologin má možnost vytisknout zprávu pro lidi, kteří mají kteří se přihlašují. Jejich linuxové příkazy pocházejí z BS D, kde se zdá, že mají dlouhou historii odlišnosti. FreeBSD false
jednoduše vrátí 1 , zatímco nologin
zkontroluje na ujistěte se, že to „s běží na TTY a během pokusů o přihlášení pošle zprávu do syslogu. Verze linuxu jsou trochu komplikovanější (false
dělá nejrůznější zábavné věci s internacionalizací pro výstup –help, předpokládám), ale v podstatě funguje stejným způsobem.
Odpovědět
/ bin / false only job is to exit with a non-zero exit code.
Zkuste to na příkazovém řádku:
$:> /bin/false $:> echo $? 1 $:>
Některé instituce používají / bin / false v poli shellu v souboru hesla. Pokud se uživatel pokusí přihlásit, shell je / bin / false, takže jsou okamžitě ukončeny
Odpověď
Mohli by to být stejný program, ale mají různé významy. Název programu říká všechno.
- / bin / false má vrátit falešnou hodnotu je spuštěn jako program.
- / bin / nologin má uživateli naznačit, že pro účet není povoleno žádné přihlášení. (Používá se přihlašovací shell.)
Odpověď
Oba plní víceméně stejnou práci, ale /bin/false
je užitečné pro neprivilegované uživatele. Na druhou stranu /sbin/nologin
je pro privilegované uživatele.
Komentáře
- Ach, jak jste se dospěl k tomuto závěru?
- Pravděpodobně se podíval na
/etc/passwd
. Právě jsem se podíval na/etc/passwd
čerstvě nainstalovaného úseku Debianu. V tomto poli téměř všechny systémové účty (ID uživatelů < 1000) mají/usr/sbin/nologin
shell, až na několik výjimek. Vezměte prosím na vědomí, že nesouhlasím s odpovědí @pythondetective ‚. Jen spekuluji, co ho k tomuto závěru mohlo vést. Můj komentář je ale trochu pozdě. - Ne! výchozí přihlašovací shell není stejný jako oprávnění.