På denne siden

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/bash setter påloggingsskallet. Uten dette leser useradd tilbakefallet fra /etc/default/useradd (SHELL=-linjen), aldri fra /etc/login.defs. Tilbakefallet er /bin/sh på Ubuntu og bash på Fedora og Arch, men det varierer, så bruk alltid -s for å være eksplisitt.
  • -G sudo,docker legger til tilleggsgrupper (flagget -aGusermod gjør det samme for eksisterende brukere, se nedenfor). Bli kjent med distribusjonens admin-gruppe: sudo-gruppen finnes på Ubuntu. Fedora og Arch kaller den wheel i stedet (der feiler useradd -G sudo med group 'sudo' does not exist). Og docker-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 i grep alice /etc/passwd.

Du kan også sette en egendefinert primærgruppe eller UID:

$ sudo useradd -m -g developers -u 2000 carol
  • -g developers setter primærgruppen (felt 4 i /etc/passwd). Uten dette oppretter useradd en ny gruppe med brukerens navn.
  • -u 2000 tildeler 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 – dokumenterer CREATE_HOME, UID-områder og standardinnstillinger for passordaldering