Kapitel 3. Root access - hvem, hvordan og hvorfor ikke?

Når en bruger for første gang skal til at anvende Linux (eller en anden UNIX), så det kan måske være svært at forstå, hvorfor man ikke skal være logget ind som systemadministrator - dvs. brugeren root - hele tiden. Dette vil vi starte dette kapitel med at diskutere. Derefter vil vi se på fornuftig håndtering af root rettigheder.

Der er flere sikkerhedsaspekter forbundet med root-adgang. Ud over risikoen for selv at komme til at ødelægge noget på sit system, er der spørgsmålet om hvilke personer ud over systemadministratoren, der skal have root privilegier - om nogen. I den forbindelse vil vi også se på nogle af de elementære forholdsregler, man bør tage for at forhindre, at uautoriserede personer får root adgang. Desuden vil vi se på valg af passwords. Det er meget vigtigt - specielt for root-kontoen - at der vælges passwords, der ikke kan gættes. Som det sidste i kapitlet ser vi på programmet sudo og suid programmer, dvs. programmer, der kører med rettigheder, som om de var startet af root. Dette kan naturligvis være et sikkerhedsmæssigt problem. Disse lokale problemer bliver til netværksproblemer i det øjeblik, nogen trænger ind på systemet via netværket. Er en cracker inde som almindelig bruger, er det endnu begrænset, hvor meget skade han kan gøre. Det er nok desværre sandsynligt, at crackeren vil gå efter at få root-rettigheder for at have fuld kontrol over din computer.

Det ville også være slemt, hvis nogen fra salgsafdelingen fik fat i dit root password... Fra http://www.userfriendly.org/static

Figur 3-1. User Friendly

3.1. Hvem er root?

På et Linuxsystem er der som regel et antal brugere med forskellige rettigheder. Linux er grundlæggende et fler-bruger system. Hvis man f.eks. bruger Linux i en virksomhed, eller på en skole, er der forskel på, hvad folk skal have lov til at gøre på maskinen. Hvor nogle brugere kun kan hente deres post fra maskinen, kan andre betroede brugere have lov til at logge ind på maskinen og køre programmer. De forskellige brugere har et brugernavn og et password, som de logger ind på systemet med. Ud fra bruger-ID nummeret (fås ud fra brugernavnet) afgør systemet, hvilke handlinger man har lov til at udføre. Passwordet sikrer, at man er den man giver sig ud for at være. Ingen af de "almindelige" brugere kan ændre systemfiler, konfigurere ny hardware eller re-installere software. Derfor har Linux brugeren root, som kan alt dette. Er man root, så har man total kontrol over maskinen. At være root kan du blive ved at logge ind med brugernavnet root, og det dertil hørende password. Brugerkontoen root er en systemadministratorkonto, som du også kan skifte til og fra ved brug af su kommandoen.

Det skal nævnes, at det er bruger-ID 0, som giver root-rettigheder, egentlig ikke alene navnet root. Hvis du derfor finder flere brugere med bruger-ID 0 (nul), så skal du være meget opmærksom på, hvad der er sket. Det er med stor sikkerhed resultatet af et netværks-indbrud på maskinen.

Hvis du er systemadministrator for en Linux-maskine og kender root passwordet, er det stadig vigtigt, at du har en almindelig bruger konto, som du bruger til daglig. Man bør kun være root, når det er nødvendigt, for at udføre opgaver, hvor root rettigheder er nødvendige. Lad os illustrere hvorfor.

Antag som første eksempel, at du arbejder i et lokale, hvortil andre har adgang, og at du altid logger ind som root. Du skal i løbet af dagen forlade din maskine et antal gange f.eks. til frokost eller møder. Hvis du bare en gang glemmer at sætte en password-beskyttet screensaver på (denne må ikke kunne afbrydes med Ctrl-Alt-Backspace) eller logge helt ud, kan enhver, som kommer forbi dit kontor ødelægge hele din maskine. F.eks. ved at skrive rm -rf / som vil slette alle filer på din harddisk uden at spørge, om du mener det - og der er ingen fortrydelsesmulighed. Eksemplet er naturligvis grelt og ren sabotage, men det er faktisk sket, at andre lige skulle rette noget på et tidspunkt, hvor systemadministratoren lige var ude, og med root-login forvoldte stor skade, fordi vedkommende overvurderede sine evner som UNIX-administrator. Andre uheldige hændelser sker ved, at en root glemmer at logge ud, og andre ser dette. For at drille skiver de så rm -rf / men uden at trykke retur - dvs. ordren er ikke udført endnu. Hvis den rigtige root så kommer tilbage og ved et uheld trykker retur, er alt tabt, og han har selv udført handlingen. Det, som var en sjov spøg, blev pludselig til et sort uheld. Desværre er uheld, som disse set før.

Lad os som det næste eksempel se på de uheld, man selv kan komme til at lave, når man er logget ind som root. Den hyppigste grund til fejl og ulykker er nok slåfejl eller rettere sløseri. På en Linux-maskine vil du normalt altid få udført den ordre, du skriver, og du må selv garantere for fornuften i dette. Linux har den fordel, at du som almindelig bruger ikke kan slette systemfiler, såsom den meget vigtige fil /etc/passwd, der indeholder information om brugerne og deres passwords. Prøver du, som almindelig bruger at slette password-filen, vil blot få en besked med "Permission denied" - og det skal du faktisk være glad for. Sker det samme, imens du er root, vil du få lov til at slette filen. Styrer maskinen post for 500 brugere, så går der sikkert mellem 10 og 20 sekunder før at din telefon er rødglødende af sure folk, som ikke længere kan hente post eller logge ind på maskinen.

Selvom man bare har sin Linux-maskine derhjemme, og der ikke er andre, der bruger den, er det stadig vigtigt at have mindst én almindelig konto ud over root kontoen.

Når du skal lave systemarbejde, så kan følgende fremgangsmåde være anvendelig: Tag en speciel rød kasket på hovedet, som tegn på at du nu vil være root :-) Skift nu til root arbejde ved at skrive su - root. Bemærk at nogle gange udelades minustegnet. Det kommer vi tilbage til. Og før du skriver den mindste ordre, så placer begge hænder under din bagdel. I den tilstand tænker du dig så grundigt om, før du skriver og udfører ordrer - for du kan ALT som root. Det lyder nok lidt komisk, men der er alvor i noget af det. Skil dit normale arbejde på maskinen, såsom at læse din egne breve og programmere, fra root arbejdet. Vær kun root, når det er nødvendigt og brug root kontoen med stor varsomhed. Sørg bl.a. for at videresende breve til systemadministratoren (brugeren "root") til en almindelig brugerkonto (din egen), i det du ikke bør læse post, når du har systemadministratorrettigheder.

Hvis du hører til dem, der tror, at de sagtens kan administrere at være root hele tiden, så kan vi kun sige, at du ikke er den første. Det er noget man typisk hører fra begyndere, der endnu ikke har oplevet, hvor let det er som root at ødelægge meget med en lillebitte forkert kommando. Hvis du vil være root hele tiden, så kræver det stor disciplin. Du bør overveje, om du vil udsætte dig selv for de risici, det indebærer at være root hele tiden.

Vi vil gerne sige det en gang for meget, så det er helt klart: En god administrator giver altid så få rettigheder som muligt til brugerne og tilsvarende til sig selv. Kun når det er nødvendigt, skifter systemadministratoren fra sin egen personlige konto til root kontoen, og man låner ikke sit root password ud. I praksis vil man mange steder synes, at denne meget restriktive måde at administrere sikkerhed er unødigt streng og ofte fører til alt for langsomme ændringer af systemet, men det er den afvejning man altid skal lave mellem kontrol, sikkerhed og fleksibel brug af et computersystem.

3.1.1. su root

Så hvad er forskellen på su root og su - root? Minus-tegnet betyder at root brugerens environment (miljø-variable) bliver brugt. Hvis minus-tegnet udelades, beholder root de miljø-variable, som brugeren der skrev su kommandoen havde. Dette kan være et sikkerhedsaspekt. En brugers miljø-variable indeholder bl.a. hans personlige sti til de programmer, han vil køre, gemt i variablen PATH. Forrest i en brugers PATH kan man ofte finde ".", som betyder "det aktuelle katalog". Det betyder, at når man skriver en kommando, vil maskinen først lede efter programmet i det aktuelle katalog. Det kan være meget praktisk, men som root er det farligt. Vi antager, at en bruger har skrevet et program og kaldt det ls, og lagt det i sit hjemmekatalog. Root står tilfældigvis i denne brugers hjemmekatalog, og skriver ls. Hvis root har "." forrest i sin PATH, hvad sker der så? I stedet for at ls kommandoen bliver kørt, bliver brugerens eget program kørt - som root! Root bør ikke have "." i sin egen PATH - og slet ikke forrest. Dette er bare et eksempel. Brugeren kan også have aliaser i sine opstartsfiler, så kommandoer ikke gør det, man forventer, og der kan ske uheld - selvom man som regel bruger "su" fra sin egen bruger konto, hvor man kender opsætningen. Desuden har root ofte /sbin og måske /usr/sbin i sin PATH, hvor der ligger en række systemkommandoer. Det er en god ide altid at bruge minus-tegnet.

3.1.2. Uddeling af root rettigheder

Som systemadministrator vil du komme ud for, at nogle brugere har behov for at kunne lave noget "specielt" systemarbejde, og derfor mener de skal have root passwordet. Det kunne f.eks. være selv at kunne genstarte en webserver, måske stoppe/genstarte maskinen eller dræbe processer efter programmer, som ikke fungerer. Disse ting kræver at root passwordet anvendes på tidspunkter, som ikke kan forudsiges. Du kan bevare root passwordet på få hænder og alligevel give nogle brugere de tilstrækkelige systemrettigheder ved at installere programmet "sudo".

Programmet sudo følger med de fleste Linux distributioner under navnet sudo.*.rpm, men kan er dette ikke tilfældet med din distribution, så kan hentes fra http://www.courtesan.com/sudo.

Derefter skal du lære at konfigurere sudo rigtigt. Dette afgør, hvilke programmer bestemte personer kan tilgå. Du bør også følge med i hvilke sikkerhedsfejl, der bliver fundet i sudo (følg med på deres hjemmeside). Der er på sudo-hjemmesiden en kortfattet eksempelfil. Læs desuden man-sider for sudo, sudoers og visudo.

Opsætningen startes som root ved at skrive

[root@hven tyge]#  /usr/local/sbin/visudo

Nu kommer editoren vi frem med den opsætningsfil, du skal udfylde. Som et eksempel lader vi brugeren "tyge" kunne genstarte NFS-serveren. Find linjen med

root    all=(ALL) ALL 

Under denne tilføjer du, at brugeren "tyge" på maskinen "hven" må køre kommandoen /etc/rc.d/init.d/nfs restart.

tyge      hven=/etc/rc.d/init.d/nfs restart

Gem filen og prøv nu som brugeren "tyge" at genstarte nfs.

Det eneste trick er, at du, som almindelig bruger, skal skrive sudo foran den kommando, du skal kunne køre med root-rettigheder. Efter en lille formaning om at passe på skal "tyge" som almindelig bruger skrive sit eget passsword. Derefter udføres kommandoen, som om det var root, der gjorde det. Man skal skrive sit password som en sikkerhedsforanstaltning, der beskytter imod, at andre brugere kan udnytte ens sudo rettigheder. Hvis du f.eks. er gået til frokost uden at logge ud, så kan kollegaen ikke gå over og lave sudo kommandoer fra din maskine, da han stadig ikke kender dit password.

[tyge@hven ~]$ sudo /etc/rc.d/init.d/sendmail restart

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:

        #1) Respect the privacy of others.
        #2) Think before you type.

Password:
Shutting down sendmail:                                    [  OK  ]
Starting sendmail:                                         [  OK  ]           

Eksemplet er fra Red Hat, men kan være taget med en vilkårlig Linuxdistribution.

super er et andet program, som kan meget af det samme som sudo, og som kan hentes fra ftp://ftp.ucolick.org/pub/users/will. Umiddelbart har super flere muligheder, men det er sværere at anvende end sudo.

Endelig skal det siges, at programmet sudo også er smart, selvom du har spredt root password på flere hænder, idet det tvinger brugeren til at være lidt forsigtig med root-kontoen. Som afslutning vil vi dog påpege, at hvis du tildeler personer rettigheder via sudo, så bør det ikke være ene generelt blankocheck til at kunne køre alt som root. Istedet bør du anføre hver af de services, der skal kunne startes og stoppes via sudo. En god grund til dette er, at du så ikke havner i en sitation, hvor dine basale binære programmer eller bibioteker er bliver udskiftet pga. misforståelser eller destruktiv handling. Hvis en person virkelig skal være root ofte, så er det måske klogere, at personen også har root-password og et tilsvarende ansvar.