Hvert Linux-system har minst to kontoer: root og den som satte opp
maskinen. Mellom de to ytterpunktene samler virkelige systemer
tjenestekontoer, delte prosjektkontoer og den tilfeldige testbrukeren
som ingen husker å ha opprettet. Denne guiden dekker kommandoene som
oppretter, endrer og sletter disse kontoene – og de fire klartekstfilene
som lagrer dem.
Hvis du aldri har endret en brukers skall eller lagt til noen i en gruppe, begynn her. Kommandoene er korte; konsekvensene er permanente.
Forkunnskaper
Du trenger root-tilgang. Hver kommando i denne guiden skriver enten til
/etc/passwd eller håndterer kontodatabaser som bare root kan berøre.
På Ubuntu/Debian setter du sudo foran kommandoene. På Fedora logger du
enten inn som root eller bruker sudo. På Arch er det samme sak.
Hvis språket rundt rettigheter og eierskap virker ukjent, les
Rettigheter og eierskap
først. Det kapittelet dekker chmod og chown; denne guiden dekker
kontoene som rettighetene er tildelt til.
useradd – opprett en bruker
Grunnformen er enkel:
$ sudo useradd alice
På Ubuntu og Arch opprettes brukeren, men ikke en hjemmemappe. På
Fedora er CREATE_HOME=yes satt i /etc/login.defs, så en hjemmemappe
under /home/alice opprettes automatisk. Dette er en ekte forskjell
mellom distribusjonene, ikke en feilkonfigurasjon.
For å opprette en hjemmemappe på hvilken som helst distribusjon, bruk
-m:
$ sudo useradd -m alice
Dette oppretter /home/alice og kopierer skjelett-filene fra
/etc/skel inn i den. Skjelett-mappen inneholder standard dotfiler:
.profile på Ubuntu, .bash_profile på Fedora og Arch. Disse er
maler. De påvirker ikke påloggingsoppførselen før du redigerer dem.
Noen flagg dukker opp ofte:
$ sudo useradd -m -s /bin/bash -G sudo,docker -c "Alice Example" alice
-s /bin/bashsetter påloggingsskallet. Uten dette leseruseraddtilbakefallet fra/etc/default/useradd(SHELL=-linjen), aldri fra/etc/login.defs. Tilbakefallet er/bin/shpå Ubuntu og bash på Fedora og Arch, men det varierer, så bruk alltid-sfor å være eksplisitt.-G sudo,dockerlegger til tilleggsgrupper (flagget-aGpåusermodgjør det samme for eksisterende brukere, se nedenfor). Bli kjent med distribusjonens admin-gruppe:sudo-gruppen finnes på Ubuntu. Fedora og Arch kaller denwheeli stedet (der feileruseradd -G sudomedgroup 'sudo' does not exist). Ogdocker-gruppen finnes først etter at Docker faktisk er installert. Inntil da er også det flagget en feil.-c "Alice Example"setter GECOS-kommentarfeltet, en fritekststreng som vises igrep alice /etc/passwd.
Du kan også sette en egendefinert primærgruppe eller UID:
$ sudo useradd -m -g developers -u 2000 carol
-g developerssetter primærgruppen (felt 4 i/etc/passwd). Uten dette oppretteruseradden ny gruppe med brukerens navn.-u 2000tildeler en bestemt UID i stedet for å velge neste ledige. Nyttig når UID-er må stemme overens på flere maskiner.
En egendefinert hjemmemappe-sti fungerer også:
$ sudo useradd -m -d /opt/alice alice
Uten -m setter -d-flagget stien i /etc/passwd, men oppretter
ikke mappen. Brukeren ville logget inn til en fraværende hjemmemappe
og fått feilmeldinger.
Én ting til: useradd setter ikke et passord. Kontoen finnes, men er
låst til du kjører passwd (dekket senere i denne guiden).
adduser vs useradd – Debian-innpakningen
På Ubuntu og Debian er adduser et høynivå, interaktivt innpakningsskript
skrevet i Perl. Den oppretter hjemmemappen, setter skallet, ber om et
passord og spør deretter etter fullt navn – alt i én samtale:
$ sudo adduser alice
På Fedora er adduser en symbolsk lenke til useradd. Det finnes ingen
interaktiv innpakning; adduser alice oppfører seg identisk med
useradd alice. På Arch finnes ikke adduser.
Hvis du skriver skripter, bruk alltid useradd – det fungerer likt
overalt. Hvis du setter opp en bruker manuelt på Ubuntu og foretrekker
den guidede opplevelsen, er adduser det hyggeligere alternativet.
groupadd – opprett en gruppe
Grupper lar deg gi rettigheter til flere brukere på én gang. Hver bruker
har én primærgruppe (felt 4 i /etc/passwd, gruppen en ny fil
tilhører) og null eller flere tilleggsgrupper (felt 5 i
/etc/group, de ekstra medlemskapene). -G-flagget og usermod -aG
begge håndterer tilleggsgrupper. -g setter primærgruppen.
Kommandoen for å opprette en gruppe er enkel:
$ sudo groupadd developers
Dette oppretter en ny gruppe i /etc/group med neste ledige GID. Du kan
legge til brukere i den med en gang:
$ sudo usermod -aG developers alice
Eller opprette brukeren med gruppen allerede tildelt:
$ sudo useradd -m -G developers bob
Forskjellen mellom -G i useradd og -aG i usermod betyr noe.
I useradd setter -G de opprinnelige tilleggsgruppene. I usermod
legger -aG til den eksisterende listen. Uten -a erstatter
usermod -G hele tilleggsgruppelisten. Å glemme -a er en av de
vanligste feilene i brukeradministrasjon – og den er stille. Kommandoen
advarer deg ikke om at den nettopp fjernet brukeren fra alle andre
grupper.
usermod – endre en konto
usermod redigerer en eksisterende konto. De vanligste bruksområdene:
Endre påloggingsskallet:
$ sudo usermod -s /bin/zsh alice
(usermod advarer om at skallet mangler eller ikke kan kjøres, men registrerer det likevel.)
Flytte en hjemmemappe:
$ sudo usermod -d /home/alice-new -m alice
-m-flagget flytter det eksisterende hjemmeinnholdet til den nye stien.
Finner målmappen seg allerede der, advarer usermod
(usermod: directory /home/X exists, exit code 12) og flytter ingenting.
Men den oppdaterer likevel hjemmefeltet i /etc/passwd og lar
brukerens filer stå uendret igjen. Sjekk før du kjører.
Låse og låse opp en konto:
$ sudo usermod -L alice # lås
$ sudo usermod -U alice # lås opp
Låsing setter et ! foran det krypterte passordet i /etc/shadow.
Kontoen finnes fortsatt, men ingen passord vil godkjenne den.
Nøkkelbasert SSH-godkjenning påvirkes ikke av kontolåsing. Bare
passordbaserte påloggingsforsøk blokkeres.
Legge til i en gruppe (uten å fjerne andre):
$ sudo usermod -aG developers alice
Igjen: -aG legger til. -G alene erstatter.
userdel – slett en konto
$ sudo userdel alice
Dette fjerner brukeroppføringen fra /etc/passwd og /etc/group, men
lar hjemmemappen være intakt. Filer som tilhørte den slettede brukeren
blir foreldreløse: de finnes fortsatt, men eierskapet viser et numerisk
UID i stedet for et brukernavn.
For å fjerne brukeren og hjemmemappen:
$ sudo userdel -r alice
-r-flagget sletter /home/alice sammen med brukeroppføringen. Det er
ingen angre-mulighet. Hvis du vil beholde filene, men overføre eierskap,
slett brukeren først, og bruk deretter chown for å tildele filene til
en annen konto.
Et praktisk tips: slett aldri en bruker mens de er logget inn. Kommandoen
who viser hvem som er logget inn for øyeblikket; id <bruker> viser
medlemskap og UID/GID-detaljer. Bruk en av dem før du sletter kontoer.
De fire kontofilene
Linux lagrer bruker- og gruppeinformasjon i fire klartekstfiler i
/etc. Å forstå dem hjelper når kommandoer oppfører seg uventet.
/etc/passwd – én linje per bruker, syv kolonseparerte felt:
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
Feltene er: brukernavn, passord-plassholder (x betyr at den ekte
hashen ligger i shadow), UID, GID, GECOS-kommentar, hjemmemappe,
påloggingsskall.
/etc/shadow – passord-hasher og aldringsdata, lesbar bare av root:
På Ubuntu er rettighetene 640. På Fedora kontrollerer SELinux tilgangen
(de rå rettighetene viser 000). På Arch er filen 600. Detaljene
varierer, men regelen er den samme: vanlige brukere kan ikke lese den.
/etc/group – én linje per gruppe:
developers:x:1002:alice,bob
Felt: gruppenavn, passord-plassholder (sjelden brukt), GID, kommaseparert medlemsliste.
/etc/gshadow – gruppepassord og administrasjonsdata, bare lesbar
av root. Fila er ikke tom: hver gruppe får en linje, og
passordfeltet er som regel ubrukt (* eller !). Gruppepassord er en
levning fra fortiden. Moderne oppsett bruker tilleggsgrupper i stedet.
id og getent – slå opp kontoer
id-kommandoen viser hvem du er:
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1002(developers)
Eller spør om en annen bruker:
$ id bob
uid=1001(bob) gid=1001(bob) groups=1001(bob),1002(developers)
Nyttige flagg:
$ id -u # bare numerisk UID: 1000
$ id -g # bare numerisk GID: 1000
$ id -n -u # bare brukernavn: alice
$ id -n -g # bare gruppenavn: alice
Disse flaggene er nyttige i skripter der du trenger et tall, ikke en visningsstreng.
getent spør systemdatabasene direkte. Det leser de samme filene
som id, men kan rette seg mot en bestemt database:
$ getent passwd alice
alice:x:1001:1001:Alice Example:/home/alice:/bin/bash
$ getent group developers
developers:x:1002:alice,bob
Forskjellen fra å lese /etc/passwd med cat er at getent
respekterer NSS. Hvis systemet ditt bruker LDAP, SSSD eller en annen
katalogtjeneste, returnerer getent også oppføringer fra disse
kildene. Vanlig cat ville bare vise de lokale filene.
passwd og chage – passord og utløp
En bruker uten passord kan ikke logge inn via passordbasert godkjenning. Som root setter du ett:
$ sudo passwd alice
Systemet ber om det nye passordet to ganger. Hvor snakkesom
styrkesjekken er, avhenger av distribusjonen: Fedora advarer om svake
passord rett ut av boksen (BAD PASSWORD: The password is shorter than 8 characters), mens root på Ubuntu og Arch setter svake passord i
stillhet hvis PAM-kvalitetsmodulen ikke er installert. De håndhever
likevel PAM-reglene hvis de er satt opp.
Passordaldering styrer hvor lenge et passord forblir gyldig.
chage-kommandoen håndterer dette:
$ sudo chage -l alice # vis gjeldende innstillinger
$ sudo chage -M 90 alice # utløp passord etter 90 dager
-l-flagget viser gjeldende passordalderingsinformasjon: dato for siste
endring, minimumsalder, maksimumsalder, varslingsperiode og
kontoutløp. -M 90-flagget setter det maksimale antallet dager et
passord kan brukes før systemet tvinger en endring.
Disse innstillingene gjelder for passordbaserte påloggingsforsøk. Hvis du bruker SSH-nøkkelbasert godkjenning utelukkende, påvirker ikke passordutløpspolitikken tilgangen din – men de betyr fortsatt noe hvis noen kan falle tilbake på et passord.
UID- og GID-tall – nummereringsskjemaet
Hver bruker har et numerisk UID. Hver gruppe har et numerisk GID. Konvensjonen på tvers av de store distribusjonene:
UID 0 er alltid root. UID-er 1 til 999 er systemkontoer: tjenester
som www-data og systemd-resolve som kjører daemoner, ikke
interaktive skall. Vanlige kontoer starter på UID 1000.
Den første brukeren som opprettes på et ferskt Ubuntu-system får
UID 1000. Fedora og Arch følger det samme mønsteret. Når du oppretter
brukere med useradd, velger systemet neste ledige UID startende
på 1000.
Grupper følger et identisk skjema: GID 0 er root, 1–999 er
systemgrupper, 1000+ er brukergrupper. Gruppen users finnes på de
fleste systemer som et tilbakefall (GID 100 på Ubuntu og Fedora,
982 på Arch).
Du kan sjekke en bestemt UID:
$ id -u alice
1000
Eller se hvilken UID en systemkonto kjører som:
$ id -u nobody
65534
UID 65534 (nobody) er den konvensjonelle ikke-privilegerte kontoen,
og navnet er det samme på alle tre distribusjonene. Det som varierer,
er kosmetikken: Ubuntus GECOS-streng leser nobody, mens Fedora og
Arch leser Kernel Overflow User, og nologin-stien varierer
(/usr/sbin/nologin på Ubuntu og Fedora, /usr/bin/nologin på Arch).
Avslutning: sette opp en delt prosjektkonto
Anta at et lite team trenger en delt konto for å kjøre et
deploy-skript. Kontoen skal ha en hjemmemappe, et bash-skall og
tilgang til en deploy-gruppe som eier deploy-mappen.
$ sudo groupadd deploy
$ sudo useradd -m -s /bin/bash -G deploy -c "Deploy Account" deployer
$ sudo passwd deployer
Nå kan deployer logge inn og har en hjemmemappe. Deploy-mappen må
tilhøre deploy-gruppen:
$ sudo chown root:deploy /opt/deployments
$ sudo chmod 2775 /opt/deployments
Rettighetssettet 2775 betyr at mappen er skrivbar for gruppen, og nye
filer arver gruppen. Det innledende 2 setter setgid-biten: nye
filer som opprettes i denne mappen arver automatisk mappens gruppe
(deploy her) i stedet for oppretterens primærgruppe. Enhver bruker i
deploy-gruppen, inkludert deployer, kan opprette og redigere
filer der. Én advarsel: setgid alene stopper ikke gruppemedlemmer
fra å slette eller gi nytt navn til hverandres filer. Det skjer på
alle tre distribusjonene. For å få begge deler (gruppearv og
slettebeskyttelse), kombiner bitene: chmod 3775. Nye filer arver
fortsatt gruppen, og en ikke-eier i gruppen som prøver rm, får
Operation not permitted.
For å legge til flere teammedlemmer i gruppen:
$ sudo usermod -aG deploy alice
$ sudo usermod -aG deploy bob
For å verifisere:
$ id deployer
uid=1002(deployer) gid=1002(deployer) groups=1002(deployer),1003(deploy)
$ getent group deploy
deploy:x:1003:deployer,alice,bob
Hvis teamet endres og du trenger å fjerne noen:
$ sudo userdel -r olduser
Eller bare fjerne deres gruppetilhørighet uten å slette kontoen.
gpasswd-kommandoen håndterer gruppetilhørighet direkte, og -d fjerner
en bruker fra en gruppe:
$ sudo gpasswd -d olduser deploy
Hvor du er nå
Du har hele livssyklusen til Linux-kontoer: opprette brukere med
useradd, grupper med groupadd, endre kontoer med usermod,
slette dem med userdel, og lese de fire filene som lagrer alt
sammen. Kommandoene er korte; jobben er å vite hva hvert flagg betyr
og hvilken distribusjon som gjør det annerledes.
For rettighetene disse kontoene arver, se Rettigheter og eierskap. For tjenestene kontoene kjører og loggene de produserer, se Tjenester og logger. Hvis noe går galt (en låst konto, en fraværende hjemmemappe, en gruppe som ikke ser ut til å virke), Feilsøking dekker de vanlige feilmønstrene.
Eksterne referanser:
useradd(8)man-side – den autoritative listen over flagg og standardverdier- ArchWiki: Users and groups – en omfattende tverrdistribusjonsreferanse med detaljerte forklaringer av UID/GID-nummerering og gruppeadministrasjon
login.defs(5)man-side – dokumentererCREATE_HOME, UID-områder og standardinnstillinger for passordaldering