Sikker sudo-kontroll på Linux: Få full kontroll over brukerrettigheter!

Sudo-kommandoen gir deg muligheten til å utføre handlinger i Linux som om du var en annen bruker, typisk «root». Sudo gir også detaljert kontroll over hvem som får tilgang til «root»-rettigheter. Du kan gi brukere fullstendig tilgang, eller bare tillate dem å utføre et begrenset sett med kommandoer. Vi skal vise deg hvordan du gjør det.

sudo og «root»-tillatelser

Det er en kjent (men forenklet) sannhet at alt i Linux er en fil. Realiteten er at nesten alt i operativsystemet, fra prosesser, filer, kataloger, sockets og pipes, til kjernen, kommuniserer via en fildeskriptor. Selv om ikke alt er en fil i teknisk forstand, behandles de fleste operativsystemobjekter som om de var det. Linux og Unix-lignende systemer følger dette prinsippet så langt det er mulig.

Konseptet «alt er en fil» har stor betydning i Linux. Det er lett å forstå hvorfor filtillatelser i Linux er så sentrale for brukerrettigheter og privilegier. Hvis du eier en fil eller mappe (som er en spesiell type fil), kan du gjøre hva du vil med den, inkludert å endre, gi nytt navn, flytte og slette den. Du kan også definere tillatelsene for filen, slik at andre brukere eller grupper kan lese, endre eller utføre den. Alle tillatelser styres på denne måten.

Dette gjelder alle, bortsett fra superbrukeren, kjent som «root». «Root»-kontoen har spesielle privilegier. Den er ikke underlagt de vanlige tillatelsene til objekter i operativsystemet. «Root»-brukeren kan gjøre hva som helst, med hva som helst, og når som helst.

Selvsagt kan alle med tilgang til «root»-passordet gjøre det samme. De kan skape kaos, enten med vilje eller ved et uhell. Faktisk kan også «root»-brukeren selv skape problemer ved en feil. Ingen er feilfrie. Dette er en farlig situasjon.

Derfor regnes det nå som beste praksis å ikke logge på som «root» i det hele tatt. Logg inn med en vanlig brukerkonto, og bruk sudo for å øke dine rettigheter for den korte tiden du trenger det. Ofte er det bare snakk om å utføre en enkelt kommando.

Sudoers-listen

sudo var allerede installert på Ubuntu 18.04.3, Manjaro 18.1.0 og Fedora 31, som ble brukt under utarbeidelsen av denne artikkelen. Dette er ikke overraskende. sudo har eksistert siden tidlig på 1980-tallet, og har blitt standardmetoden for superbrukeroperasjoner for nesten alle distribusjoner.

Når du installerer en moderne distribusjon, blir brukeren du oppretter under installasjonen lagt til en liste som kalles «sudoers». Dette er brukere som har tillatelse til å bruke sudo-kommandoen. Siden du har sudo-rettigheter, kan du bruke dem til å legge til andre brukere i denne listen.

Det er selvsagt uklokt å gi fullstendig superbrukertilgang til alle, eller til de som bare har et delvis eller spesifikt behov. «Sudoers»-listen lar deg definere hvilke kommandoer de ulike brukerne har tillatelse til å bruke sudo med. På denne måten gir du dem ikke hele nøkkelknippet, men de kan likevel gjøre det de trenger.

Kjøre en kommando som en annen bruker

Opprinnelig ble det kalt «superuser do» (superbruker gjør), fordi du kunne utføre handlinger som superbruker. Funksjonaliteten er utvidet nå, og du kan bruke sudo til å utføre en kommando som om du var en hvilken som helst bruker. Navnet er endret for å reflektere den nye funksjonaliteten. Det kalles nå «substitute user do» (erstatningsbruker gjør).

For å bruke sudo til å kjøre en kommando som en annen bruker, må vi bruke -u (user) alternativet. Her skal vi kjøre whoami (hvem er jeg) kommandoen som brukeren «mary». Hvis du bruker sudo-kommandoen uten -u-alternativet, kjører du kommandoen som «root».

Og selvsagt, siden du bruker sudo, vil du bli bedt om passordet ditt.

sudo -u mary whoami

Svaret fra «whoami» forteller oss at brukerkontoen som kjører kommandoen er «mary».

Du kan bruke sudo-kommandoen til å logge inn som en annen bruker uten å kjenne passordet. Du vil bli bedt om ditt eget passord. Vi må bruke -i (logg inn) alternativet.

sudo -i -u mary
pwd
whoami
ls -hl
exit

Du er nå logget inn som «mary». «.bashrc», «.bash_aliases» og «.profile»-filene for «mary»-brukerkontoen behandles akkurat som om «mary» selv hadde logget inn.

Ledeteksten endres for å vise at dette er en økt for «mary»-brukerkontoen.
«pwd»-kommandoen viser at du nå er i Marys hjemmekatalog.
«whoami» forteller oss at du bruker «mary»-brukerkontoen.
Filene i mappen tilhører «mary»-brukerkontoen.
«exit»-kommandoen bringer deg tilbake til din vanlige brukerkontoøkt.

Redigere sudoers-filen

For å legge til brukere i listen over de som kan bruke sudo, må du redigere «sudoers»-filen. Det er veldig viktig at du bare gjør dette ved å bruke «visudo»-kommandoen. «Visudo»-kommandoen hindrer flere personer i å forsøke å redigere «sudoers»-filen samtidig. Den utfører også syntaksjekk og analyse av filinnholdet når du lagrer det.

Hvis endringene dine ikke består testene, vil ikke filen bli lagret automatisk. Du får alternativer. Du kan avbryte og forkaste endringene, gå tilbake og redigere dem på nytt, eller tvinge lagring av de feilaktige endringene. Det siste er en svært dårlig idé. Ikke la deg friste til å gjøre det. Du kan havne i en situasjon der alle blir stengt ute fra å bruke sudo.

Selv om du starter redigeringsprosessen med «visudo»-kommandoen, er ikke «visudo» en redigerer i seg selv. Den kaller opp en av de eksisterende redigererne for å utføre filredigeringene. På Manjaro og Ubuntu lanserte «visudo»-kommandoen den enkle redigereren «nano». På Fedora lanserte «visudo» den mer kapable, men mindre intuitive «vim».

Hvis du foretrekker å bruke «nano» på Fedora, kan du gjøre det enkelt. Installer «nano» først:

sudo dnf install nano

Deretter må «visudo» kalles med denne kommandoen:

sudo EDITOR=nano visudo

Dette ser ut som en god kandidat for et alias. «Nano»-editoren åpnes med «sudoers»-filen lastet inn.

Legge til brukere i sudo-gruppen

Bruk «visudo» for å åpne «sudoers»-filen. Bruk enten denne kommandoen, eller den som er beskrevet ovenfor for å spesifisere redigeringsprogrammet du ønsker:

sudo visudo

Bla gjennom «sudoers»-filen til du ser definisjonen av %sudo-oppføringen.

Prosenttegnet indikerer at dette er en gruppedefinisjon, og ikke en brukerdefinisjon. På noen distribusjoner har %sudo-linjen en hash # ved starten. Dette gjør linjen til en kommentar. Hvis dette er tilfelle, fjern hashen og lagre filen.

%sudo-linjen kan deles opp slik:

%sudo: Navnet på gruppen.
ALL=: Denne regelen gjelder for alle verter på dette nettverket.
(ALLE:ALLE): Medlemmer av denne gruppen kan kjøre kommandoer som alle brukere og alle grupper.
Alle: Medlemmer av denne gruppen kan kjøre alle kommandoer.

For å omformulere dette litt, kan medlemmer av denne gruppen kjøre hvilken som helst kommando, som enhver bruker eller en hvilken som helst gruppe, på denne datamaskinen eller en hvilken som helst annen vert i dette nettverket. En enkel måte å gi noen «root»-privilegier og muligheten til å bruke sudo, er derfor å legge dem til sudo-gruppen.

Vi har to brukere, Tom og Mary, med brukerkontoer henholdsvis «tom» og «mary». Vi legger til brukerkontoen «tom» i «sudo»-gruppen med kommandoen «usermod». -G (grupper) alternativet spesifiserer gruppen vi skal legge til «tom»-kontoen. -a (legg til) alternativet legger til denne gruppen i listen over grupper bruker «tom» allerede er medlem i. Uten dette alternativet ville «tom»-brukerkontoen blitt plassert i den nye gruppen, men fjernet fra andre grupper.

sudo usermod -a -G sudo tom

La oss sjekke hvilke grupper Mary er medlem i:

groups

Brukerkontoen «mary» er bare med i «mary»-gruppen.

La oss sjekke med Tom:

groups

«Tom»-brukerkontoen – og dermed Tom – er med i gruppene «tom» og «sudo».

La oss prøve å få Mary til å gjøre noe som krever sudo-rettigheter.

sudo less /etc/shadow

Mary får ikke lov til å se den begrensede filen «/etc/shadow». Hun får en vennlig irettesettelse for å forsøke å bruke sudo uten tillatelse. La oss se hvordan det går med Tom:

sudo less /etc/shadow

Så snart Tom taster inn passordet, får han se innholdet i «/etc/shadow».

Bare ved å legge ham til i «sudo»-gruppen, har han blitt oppgradert til eliten av dem som kan bruke sudo. Helt ubegrenset.

Gi brukere begrensede sudo-rettigheter

Tom har fått fulle sudo-rettigheter. Han kan gjøre alt som «root» – eller alle andre i «sudo»-gruppen – kan gjøre. Det kan gi ham mer makt enn du er komfortabel med å gi ham. Noen ganger er det nødvendig for en bruker å utføre en funksjon som krever «root»-privilegier, men det er ikke en god idé at de skal ha full sudo-tilgang. Du kan oppnå en god balanse ved å legge dem til i «sudoers»-filen og liste opp kommandoene de kan bruke.

La oss møte Harry, som eier brukerkontoen «harry». Han er ikke i «sudo»-gruppen, og har ingen sudo-privilegier.

groups

Det er nyttig for Harry å kunne installere programvare, men vi vil ikke at han skal ha fulle sudo-rettigheter. Ok, ikke noe problem. La oss starte visudo:

sudo visudo

Rull ned gjennom filen til du kommer forbi gruppedefinisjonene. Vi skal legge til en linje for Harry. Siden dette er en brukerdefinisjon og ikke en gruppedefinisjon, trenger vi ikke å starte linjen med et prosenttegn.

Oppføringen for brukerkontoen «harry» er:

harry    ALL=/usr/bin/apt-get

Legg merke til at det er en tabulator mellom «harry» og «ALL=».

Dette leses som at brukerkontoen «harry» kan bruke de listede kommandoene på alle verter som er koblet til dette nettverket. Det er en kommando oppført, som er «/usr/bin/apt-get». Vi kan gi Harry tilgang til mer enn én kommando ved å legge dem til i kommandolisten, adskilt med komma.

Legg til linjen i «sudoers»-filen, og lagre filen. Hvis du vil dobbeltsjekke at linjen er syntaktisk korrekt, kan vi be visudo om å skanne filen og sjekke syntaksen for oss ved å bruke -c (kun sjekk) alternativet:

sudo visudo -c

Kontrollen utføres, og visudo rapporterer at alt er i orden. Harry skal nå kunne bruke apt-get til å installere programvare, men bør nektes hvis han forsøker å bruke en annen kommando som krever sudo.

sudo apt-get install finger

De riktige sudo-rettighetene har blitt gitt til Harry, og han kan installere programvaren.

Hva skjer hvis Harry forsøker å bruke en annen kommando som krever sudo?

sudo shutdown now

Harry er forhindret fra å kjøre kommandoen. Vi har gitt ham spesifikk, begrenset tilgang. Han kan bruke den tillatte kommandoen og ingenting annet.

Bruke sudoers brukeralias

Hvis vi ønsker å gi Mary de samme privilegiene, kan vi legge til en linje i «sudoers»-filen for brukerkontoen «mary» på nøyaktig samme måte som vi gjorde med Harry. En annen, penere måte å oppnå det samme på, er å bruke et User_Alias.

I «sudoers»-filen inneholder et User_Alias en liste over brukerkontoer. Navnet på User_Alias kan deretter brukes i en definisjon for å representere alle disse brukerkontoene. Hvis du vil endre rettighetene for disse brukerkontoene, trenger du bare å redigere én linje.

La oss opprette et User_Alias og bruke det i «sudoers»-filen.

sudo visudo

Scroll down in the file until you come to the User_Alias specification line.
  
  

Legg til User_Alias ved å skrive:

User_Alias INSTALLERS = harry, mary

Hvert element er adskilt med et mellomrom, ikke en tabulator. Logikken kan brytes ned som følger:

User_Alias: Dette forteller visudo at dette kommer til å bli et User_Alias.
INSTALLERS: Dette er et vilkårlig navn på dette aliaset.
= harry, mary: Listen over brukere som skal inkluderes i dette aliaset.

Nå skal vi redigere linjen som vi la til tidligere for brukerkontoen «harry»:

harry    ALL=/usr/bin/apt-get

Endre den slik at den leser:

INSTALLERS    ALL=/usr/bin/apt-get

Dette betyr at alle brukerkontoer i definisjonen av «INSTALLERS» User_Alias kan utføre apt-get-kommandoen. Vi kan teste dette med Mary, som nå skal kunne installere programvare.

sudo apt-get install colordiff

Mary er i stand til å installere programvaren fordi hun er i «INSTALLERS» User_Alias, og at User_Alias har blitt tildelt disse rettighetene.

Tre raske sudo-triks

Når du glemmer å legge til sudo i en kommando, skriver du:

sudo !!

Da vil den siste kommandoen bli gjentatt, med sudo lagt til starten av linjen.

Når du har brukt sudo og autentisert deg med passordet ditt, trenger du ikke å bruke passordet for flere sudo-kommandoer de neste 15 minuttene. Hvis du vil at autentiseringen skal glemmes umiddelbart, bruker du:

sudo -k

Har du noen gang lurt på hvor du kan se mislykkede sudo-kommandoforsøk? De havner i filen «/var/log/auth.log». Du kan se den med:

less /var/log/auth.log

Vi kan se oppføringen for brukerkontoen «mary» som var logget inn på TTY «pts/1» da hun forsøkte å kjøre «shutdown»-kommandoen som bruker «root».

Med stor makt…

…følger muligheten til å delegere deler av den til andre. Nå vet du hvordan du kan styrke andre brukere på en selektiv måte.