Hvis /etc/nsswitch.conf
har:
passwd: files ldap
denne linje i den, og jeg gør getent passwd
vil den først køre ned /etc/passwd
liste og derefter gennemgå alle brugere i LDAP? Det ser ud til at være, hvad der sker.
Jeg prøvede det på en Red Hat-server, og det rullede tusinder af linjer, når /etc/passwd
kun er 36 linjer.
Kommentarer
Svar
getent
returnerer uanset resultaterne for den “database”, du angiver. Den bestemmer, hvilken backends der skal bruges, når du konstruerer denne “database” baseret på indholdet af /etc/nsswitch.conf
.
getent
viser sine “databaser”, når du forespørger om dens brugsside, getent --help
.
Supported databases: ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups netgroup networks passwd protocols rpc services shadow
Efter min viden er der ingen wa y for at deaktivere dens adfærd ved at levere alle resultaterne til de forskellige backends, der er konfigureret i /etc/nsswitch.conf
.
getent
og /etc/nsswitch.conf
er begge en del af nss (Name Service Switch).
Uddrag fra nss man-side
Hvert opkald til en funktion, der henter data fra en systemdatabase som adgangskoden eller gruppedatabasen, håndteres af implementeringen af Name Service Switch i GNU C-biblioteket. De forskellige tjenester, der leveres, implementeres af uafhængige moduler, som naturligvis varierer meget fra hinanden.
Standardimplementeringerne, der følger med GNU C-biblioteket, er som standard konservative og bruger ikke usikre data. Dette kan være meget dyrt i nogle situationer, især når databaser er store. Nogle moduler tillader systemadministratoren at anmode om genveje, hvis disse vides at være sikre. Det er derefter systemadministratorens ansvar at sikre, at antagelsen er korrekt.
Der er andre moduler, hvor implementeringen ændrede sig over tid. Hvis en implementering bruges til at ofre hastighed for hukommelsesforbrug, kan det skabe problemer, hvis præferencen er skiftet.
Backends
Der er en række af disse, for mange til at dække her. Men nok til at sige, der er backends som sssd
(sss / LDAP), NIS og NIS + for at nævne nogle få.
Så afhængigt af hvilket dit system har specificeret i din /etc/nsswitch.conf
-fil vil have indflydelse på, hvad output getent
viser, når en given “database” spørges, f.eks. getent passwd
.
Referencer
Kommentarer
- Sssd-linket er dødt.
- @GhostLyrics – ændret link
Svar
Ja, hvis du bare siger getent passwd
, viser den alle de brugere, den kan finde i nogen af de databaser, der er anført i nsswitch.
Kommentarer
- kun for NSS-udbydere, der muliggør optælling. For eksempel kan du med
sss
deaktivere optælling for nogle domæner.
getent passwd
alle brugere (lokal + ldap)