Vraag Wat is het verschil tussen / sbin / nologin en / bin / false?


Ik heb vaak gehoord dat een gebruikersaccount moet worden uitgeschakeld door de shell in te stellen /bin/false. Maar op mijn bestaande Linux-systemen zie ik dat een groot aantal bestaande accounts (allemaal serviceaccounts) een shell hebben van /sbin/nologin in plaats daarvan.

Ik zie dat vanaf de manpagina /sbin/nologin drukt een bericht af aan de gebruiker die zegt dat het account is uitgeschakeld en vervolgens wordt afgesloten. Vermoedelijk /bin/false zou niets afdrukken.

Ik zie dat ook /sbin/nologin wordt vermeld in /etc/shells, terwijl /bin/false is niet.

De man-pagina zegt dat FTP de toegang voor gebruikers met een shell zal uitschakelen niet opgenomen in /etc/shells en impliceert dat andere programma's hetzelfde kunnen doen. Betekent dit dat iemand zou kunnen FTPen met een account dat dat wel heeft /sbin/nologin als zijn schil?

Wat is het verschil hier? Welke daarvan moet ik gebruiken om een ​​gebruikersaccount uit te schakelen en onder welke omstandigheden? Welke andere effecten heeft een vermelding /etc/shells hebben?


65
2018-06-28 04:58


oorsprong


unix.stackexchange.com/questions/10852/... - dmourati
Als algemene informatie die werkt. Ik denk specifiek vanuit het perspectief van systeembeheer. - Michael Hampton♦
Gewoon bedoeld als achtergrondinformatie. - dmourati


antwoorden:


/bin/false is een hulpprogramma, metgezel voor /bin/true, wat handig is in een abstracte zin om ervoor te zorgen dat Unix feature-compleet is. Er zijn echter opkomende doelen voor deze programma's gevonden; denk aan de BASH-verklaring /some/program || /bin/true, die altijd boolean-evalueert naar true ($? = 0) ongeacht de terugkeer van /some/program.

Een emergent gebruik van /bin/false, zoals u hebt aangegeven, is als een lege shell voor gebruikers die zich niet mogen aanmelden. Het systeem gedraagt ​​zich in dit geval precies alsof de shell niet kan worden uitgevoerd.

POSIX (hoewel ik misschien ongelijk heb en het kan de SUS zijn) beperkt deze beide opdrachten om niets anders te doen dan de juiste booleaanse waarde te retourneren.

/sbin/nologin is een BSD-hulpprogramma dat hetzelfde gedrag vertoont als /bin/false (geeft boolean false), maar drukt ook uitvoer af, zoals /bin/false is verboden om te doen. Dit is bedoeld om de gebruiker te helpen begrijpen wat er is gebeurd, hoewel in de praktijk veel terminalemulators gewoon zullen sluiten wanneer de shell eindigt, waardoor de boodschap in sommige gevallen hoe dan ook onleesbaar wordt.

Er is weinig reden om op te lijsten /sbin/nologin in /etc/shells. Het standaard effect van /etc/shells is om de programma's op te geven die zijn toegestaan ​​voor gebruik met chsh wanneer gebruikers hun eigen shell veranderen (en er is geen geloofwaardige reden om je eigen shell te veranderen naar /sbin/nologin). De superuser kan de schaal van iemand in iets veranderen. Misschien wilt u beide echter opsommen /sbin/nologin en /bin/false in /etc/rsh, wat gebruikers met deze shells zal verbieden hun shell te veranderen met chsh in het ongelukkige geval dat ze een schil krijgen.

FTP daemons kunnen de toegang tot gebruikers met een shell die niet in / etc / shells staat uitsluiten, of ze kunnen elke andere logica gebruiken die zij wensen. Het uitvoeren van FTP moet in ieder geval worden vermeden, omdat sftp (die vergelijkbare functionaliteit biedt) is vergelijkbaar, maar veilig. Sommige sites gebruiken /sbin/nologin om shell-toegang uit te schakelen terwijl sftp-toegang wordt toegestaan ​​door het in te zetten /etc/shells. Dit kan een achterdeur openen als de gebruiker cronjobs mag maken.

In elk geval, scp werkt niet met een ongeldige shell. scponly kan in dit geval als een shell worden gebruikt.

Bovendien beïnvloedt de keuze van shell de werking van su - (AKA su -l). Vooral de output van /sbin/nologin wordt afgedrukt op stdout als dit de shell is; dit kan niet het geval zijn met /bin/false. In beide gevallen voeren opdrachten uit met su -cl zal mislukken.

Eindelijk het antwoord:

Om een ​​account uit te schakelen, moet u van geen van deze afhankelijk zijn, maar de shell instellen /sbin/nologin voor informatieve doeleinden (tenzij /sbin/nologin is in /etc/shells, op welk moment je zou moeten gebruiken /bin/false, wat niet zou moeten zijn). Stel in plaats daarvan het wachtwoordveld in /etc/passwd naar !, gegarandeerd door crypt om geldig te zijn voor geen wachtwoorden. Overweeg de hash in te stellen /etc/shadow op dezelfde manier om bugs te voorkomen. passwd -l zal dit voor je doen.

Een derde manier om een ​​account uit te schakelen, is door het veld voor de vervaldatum van de account in te stellen op een oude datum (bijv. usermod --expiredate 1). Hiermee worden aanmeldingen voorkomen voor het geval dat uw instellingen gebruikers in staat stellen zich te authenticeren tegen hun Unix-account zonder een wachtwoord en de service die ze gebruiken geen shell vereist.


68
2018-06-28 05:34



Hoewel dit antwoord de verschillende opties perfect samenvat (en de vraag beantwoordt), voelde ik de noodzaak om te wijzen op een bruikbare bron voor dit gebruik, dat tenminste beschikbaar is in de stock Debian-repositories, in de titantools pakket: noshell. Deze pseudo-shell biedt controlemogelijkheden, logboekregistratie bij syslog-pogingen om accounts te gebruiken noshellals de shell, terwijl de toegang nog steeds wordt geweigerd. - dawud
Het is geenszins apocrief, maar komt in feite vrij vaak voor bij sysadmins van een bepaalde wijnoogst (hoest), om te gebruiken /bin/false als login-shell voor mensen die niet moeten inloggen. - MadHatter
Apocrief in de zin dat het niet het oorspronkelijke bedoelde gebruik is. Ik zei niet anachronistisch; Ik zie het elke dag :) - Falcon Momot
Het uitschakelen van het account met een ongeldig wachtwoord werkt niet goed met ssh. Als de gebruiker eerder de authenticatie van de openbare sleutel had ingesteld, zou hij er toch in kunnen komen. - joshudson
sshd is gedocumenteerd om te controleren of accounts op een bepaalde manier zijn vergrendeld (wachtwoordhashes die beginnen met! worden specifiek vermeld), zelfs met pubkey-autorisatie. - Falcon Momot


Nadat je wat onderzoek hebt gedaan, hangt de methode die je gebruikt af van wat je moet uitsluiten. Als een gebruiker met deze set inlogt op de shell, wordt er een bericht weergegeven met het effect van This account is currently unavailable. Merk op dat je dit kunt veranderen door het bestand aan te maken /etc/nologin.txt tenminste op RHEL-derivaten.

Zoals je weet /bin/false is geen schelp. De manier waarop het werkt, is dat het false retourneert, dat zich onmiddellijk na de binaire uitgangen afmeldt. Let daar op /bin/true zou hetzelfde effect bereiken.

Wat betreft je FTP-vraag: Ja, je hebt gelijk dat de shell is ingesteld op /sbin/nologin zal gebruikers toestaan ​​om zich tijdens het inloggen op FTP aan te melden /bin/false of /bin/true zal volledig voorkomen dat de gebruiker kan inloggen ieder service.

daarom /bin/false of /bin/true is het beste om te voorkomen dat een gebruiker zich bij een dienst aanmeldt, terwijl /sbin/nologin Gebruikers kunnen nog steeds inloggen op andere services dan SSH of de lokale console, terwijl ze de gebruiker feedback geven over het feit dat het account inactief is en het beste kunnen worden gebruikt wanneer alleen SSH / lokale console moet worden geblokkeerd.


12
2018-06-28 05:30





Eh, niemand proberen om te bewijzen dat / bin / false FTP-toegang zou verbieden?

Ik heb de shell van mijn gebruiker zojuist gewijzigd in / bin / false en kon er prima mee FTPen.

Ik gebruik / dev / null om helemaal blokkeer de gebruiker (nou ja, behalve e-mail, ze kunnen nog steeds POP3).


2
2017-09-01 02:24



Had je het binnen /etc/shells? Hoe is uw FTP-server geconfigureerd? - Michael Hampton♦
er is geen regel die zegt dat een gebruiker een shell nodig heeft om in te loggen op een FTP-server. - Petter H
Het zal het op sommige FTP daemons, en niet anderen. Er is nogal wat variatie in functionaliteit tussen de verschillende. De klassieke implementatie zal de toegang blokkeren voor iedereen die geen shell heeft, maar dat betekent niet dat alle implementaties moeten. - Falcon Momot