Tekniskt, såvida inte pam
är inställt för att kontrollera ditt skal med pam_shells
ingen av dessa kan faktiskt förhindra din inloggning, om du inte är på skalet. På mitt system de har till och med olika storlekar, så jag misstänker att de faktiskt gör något. Så vad är skillnaden? varför finns de båda? Varför skulle jag använda varandra?
-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
Kommentarer
- Se även Fungerar / usr / sbin / nologin som inloggningsskal ett säkerhetsändamål?
- Jag ’ är nyfiken varför / bin / false tar 21k kod för att returnera en ” 1 ” returkod! (och / sbin / nologin tar bara 4,7 k)
- användbart att läsa. Vad är skillnaden mellan / sbin / nologin och / bin / false
- @MarkStewart Lite för sent, men du kanske vill läsa Varför är sant och falskt så stort? och En virvelvindshandledning om att skapa riktigt teensiga ELF-körbara filer för Linux .
- @nxnev Ja tänkte inte ’ tänkte på ELF: s overhead. Och från mina gamla IBM-dagar fanns det ett program IEFBR14 som var en enkel instruktion för op-kodmontering: BR 14 – Filial till register 14, som skulle avsluta programmet med returkoden inställd på vad som helst i register 14!
Svar
När /sbin/nologin
är inställt som skal, om användaren när skalet loggar in kommer de att få ett artigt meddelande som säger ”Detta konto är för närvarande inte tillgängligt.” Detta meddelande kan ändras med filen /etc/nologin.txt
.
/bin/false
är bara en binär som omedelbart går ut och returnerar falsk när den kallas, så när någon som har false
som skalloggar in loggas de omedelbart ut när false
avslutas. Om du ställer in skalet på /bin/true
har samma effekt att ingen tillåter att logga in men false
används antagligen som en konvention över true
eftersom det är mycket bättre a t förmedlar konceptet att personen inte har ett skal.
Om man tittar på nologin
s mansida, står det att den skapades i 4.4 BSD (tidigt 1990-tal ) så det kom långt efter att false
skapades. Användningen av false
som skal är förmodligen bara en konvention som överförs från de tidiga dagarna av UNIX.
nologin
är det mer användarvänliga alternativet, med ett anpassningsbart meddelande som ges till användaren som försöker logga in, så du skulle teoretiskt vilja använda det; men både nologin
och false
får samma slutresultat av att någon inte har ett skal och inte kan ssh in.
Kommentarer
-
/usr/sbin/nologin
för Debian-baserade distributioner. - Åtminstone loggar BSD-implementering också inloggningen försöker syslog som visas i opensource.apple.com/source/system_cmds/system_cmds-735/… , medan / bin / false inte skulle ’ inte logga något
- DETTA – Är ett fantastiskt svar med stor historia som presenteras här. Bra gjort Mark!
-
/etc/nologin.txt
anpassade meddelandefunktioner är inte tillgängliga i Ubuntu.
Svar
Vissa FTP-servrar tillåter bara FTP-åtkomst om du har ett giltigt skal. /sbin/nologin
betraktas som ett giltigt skal, medan /bin/false
inte är det.
(jag tror ”giltig” betyder dess exit status är 0, men /etc/shells
kan också komma in i det, det beror förmodligen på systemet, FTP-programvaran och din konfiguration.)
Kommentarer
- ja, att ’ är förmodligen en del av ftp-programmet med pam, och pam med pam_shells som som du sa kontrollerar
/etc/shells
. Bara en gissning … Jag kan ha fel. - Jag kollade bara både Ubuntu 8.04 och 14.04. Kommandot nologin avslutas med status 1 som falsk, och inget av sant, falskt eller nologin ingår i / etc / skal. Om så var fallet kunde en användare använda chsh för att välja ett sådant skal och låsa sig utanför sitt konto.
Svar
/bin/false
är ett systemkommando som används när som helst du behöver skicka ett kommando till ett program som inte skulle göra mer än att avsluta med ett fel. Det är följeslagaren till /bin/true
. Båda dessa är väldigt gamla och vanliga POSIX-verktyg och ger ingen definition per definition.true används ibland för ett skalskript som ska slinga på obestämd tid, som:
while true; do ... # Waste time if [ $wasted_time -gt 100000 ]; then exit 0 fi ... done
/usr/sbin/nologin
är särskilt utformad för byt ut ett skal och producerar utdata som klagar på att du inte kan logga in. Innan det fanns var det vanligt att använda /bin/false
för dummyanvändare, men det kan vara förvirrande eftersom användaren inte t vet varför de ”startade igen.
Kommentarer
- värt att notera att
/bin/true
och/bin/false
är inte alltid vad du får i ett skalskript. Izsh
true
ochfalse
är inbyggda, därbash
använder/bin/*
versionerna
Svar
På min maskin visar nologin
alltid samma meddelande, på engelska, och ignorerar argument . /bin/false
svarar på --version
och --help
på det språk som indikeras av $LC_CTYPE
. Förutom dessa kosmetiska skillnader har de samma effekt.
Användbarhetsmässigt, nologin
är bättre om det används för en verklig person som talar engelska. Säkerhetsmässigt är det ingen skillnad.
Kommentarer
- verkar som
false
är mer för systemkonton som inte har någon riktig användare, ochnologin
är för inaktiverade konton. - Vad är ditt operativsystem? Centos
nologin
-versionen tar inga argument, men kan läsa meddelanden från/etc/nologin.txt
.
Svar
På linux kommer /sbin/nologin
från util-linux -projektet, medan /bin/false
är en del av GNU Coreutils . De har olika roller och nologin har möjlighet att skriva ut ett meddelande för personer som har det som deras skal som loggar in. Linux-kommandona kommer från BS D, där de verkar ha en lång historia av att vara annorlunda. FreeBSD false
returnerar helt enkelt 1 , medan nologin
kontrollerar till se till att det ”s körs på en TTY och skickar ett meddelande till syslog under inloggningsförsök. Linuxversionerna är lite mer komplicerade (false
gör alla möjliga roliga saker med internationalisering för produktionen av –hjälp, antar jag) men utför i princip samma sätt.
Svar
/ bin / false jobbet är att avsluta med en utgångskod som inte är noll.
Prova på kommandoraden:
$:> /bin/false $:> echo $? 1 $:>
Vissa institutioner använder / bin / false i skalfältet i lösenordsfilen. Om användaren försöker logga in är shell / bin / false, så de avslutas genast
Svar
De kan vara samma program, men de har olika betydelser. Programmets namn berättar allt.
- / bin / false är avsett att returnera ett falskt värde körs som program.
- / bin / nologin är avsett att indikera för användaren att ingen inloggning är tillåten för ett konto. (Det används ett inloggningsskal.)
Svar
Båda gör mer eller mindre samma jobb men /bin/false
är användbart för icke-privilegierade användare. Å andra sidan är /sbin/nologin
för privilegierade användare.
Kommentarer
- Åh, hur gjorde du komma till den slutsatsen?
- Förmodligen har han tittat på
/etc/passwd
. Jag tittade precis på/etc/passwd
av en nyligen installerad Debian-sträcka. I den här rutan har nästan alla systemkonton (användar-id < 1000)/usr/sbin/nologin
som skal, med några få undantag. Observera att jag inte håller med @pythondetective ’ s svar. Jag spekulerar bara i vad som kan ha lett honom till denna slutsats. Min kommentar är dock lite sen. - nej! standardinloggningsskalet är inte detsamma som behörigheter.