11. december

chown, chgrp og chmod

Brugere, grupper og filrettigheder er centrale elementer i sikkerhedsmodellen under Linux (og alle andre implementationer af Unix). I dag skal vi se på værktøjerne der ændre hvem der ejer en fil, hvilken gruppen den hører til og hvilke adgangsrettigheder der til filen.

De tre programmer chown(1), chgrp(1) og chmod(1), der bruges til henholdsvis at ændre ejer, gruppetilhørsforhold og adgangsrettigheder til filer, er ret simple og virker næsten ens. Programmerne har en række fælles flag:

-R
Udfør ændringen på filer og kataloger rekursivt.
--reference=filnavn
Tag bruger, gruppe eller adgangsrettigheder fra filen filnavn

Programmerne kaldes med eventuelle flag, det der skal ændres til hvis man ikke bruger --reference og de filer der skal ændres.

chown

chown bruges til at skifte ejer på en fil. For at give brugeren makholm ejerskabet af filen /tmp/sushi skriver man følgende:

# chown makholm /tmp/shusi

Man kan også skifte gruppe med samme komando. Dette gøres ved at sætte gruppenavnet lige efter brugernavnet adskilt af kun et kolon:

# chown brother:staff /tmp/sushi

Det er kun root der kan skifte ejere af filer.

Advarsel: med --reference ændres både ejer og gruppetilhørsforhold

chgrp

Skal man kun ændre gruppetilhørsforhold for filen kan man bruge chgrp. Komandoen virker helt som forventet, hvis man vil ængre gruppetilhørsforholdet for /tmp/sushi til users skriver man:

$ chgrp users /tmp/sushi

Man skal ikke være root for at ændre gruppetilhørsforhold for filer, men man kan selvfølgelig kun bruge grupper man selv tilhører.

chmod

Nu kan vi sætte bruger- og gruppetilhørsforhold for filer, men skal de bruges til noget skal vi kikke lidt på adgangsrettigheder.

Adgangsrettigheder er delt op i tre dele: det der gælder for ejeren, det der gælder for folk i den gruppe filen tilhører og det der gælder for alle andre. Der er også tre basale rettigheder: om man må læse filen, om man må skrive i filen og om man må udføre filen.

For kataloger kan betydningen af de basale rettigheder være lidt spøjs. Har man læserettigheder til et katalog kan man se hvilke filer, der ligger i kataloget, har man skriverettigheder kan man oprette filer i kataloget og har man udfør-rettigheder har man adgang til filer i kataloget. Ved at give folk udfør-rettigheder uden at de har læserettigheder kan man sikre sig at de kun kan læse filer de på anden måde ved eksisterer.

Der er også tre specielle rettigheder: sticky, sæt-bruger og sæt-gruppe. Sticky-rettigheden har lidt forskellig betydning under forskellige unix'er. Under Linux betyder den ikke noget for almindelige filer. For kataloger betyder det at kun root eller ejeren af en fil kan slette filen eller give den et nyt navn, dette kan ellers gøres af alle med skriverettigheder til kataloget. Sæt-bruger- og sæt-gruppe-rettighederne gør at man kan udføre filen som om man var ejeren af filen eller var i den gruppe filen tilhøre.

Nu ved vi hvad de forskellige rettigheder gør, så lad os se hvordan vi sætter dem. Vi kan med chmod sætte en række forskellige rettigheder ved at angive dem på komandolinjen adskilt med kommaer. De forskellige rettigheder kan angives således:

Først angiver vi hvem rettigheden skal gælde for. Et u siger at vi ændre på brugerens rettigheder, et g siger at vi ændre på rettighederne for gruppen og et o betyder at vi ændre rettigheder for alle andre. Et a angiver at vi ændre rettigheder for alle brugere, dette er standarden hvis vi ikke angiver noget. Vi kan skrive flere bogstaver for at få alle de respektive grupper med.

Så angiver vi om vi skal fjerne rettigheder (-) tilføje rettigheder (+) eller sætte præcis de nævnte rettigheder (=).

Tilsidst hvilke rettigheder der er tale om. Læse-, skrive- og udfør-rettigheder er henholdsvis r, w og x. Sticky-rettigheden hedder t og sæt-bruger og sæt-gruppe er s sat for henholdsvis brugeren og gruppen.

Et par eksempler anskuer det.

Skal man give ejeren af /tmp/sushi ret til at læse, skrive og udføre filen skriver man følgende:

$ chmod u=rwx,uo=rx /tmp/sushi

Skal man fjerne rettigheden til at udføre /tmp/sushi for andre end ejeren eller folk i gruppen udføre man følgende:

$ chmod o-x /tmp/sushi

Vi kan sikre os at alle kan udføre filen ved at sætte udfør-rettigheden for alle:

$ chmod +x /tmp/sushi

Vi kunne have skrevet et a foran +'et, men det er unødvendigt

Endelig kan vi sætte sæt-bruger-rettigheden:

$ chmod u+s /tmp/sushi

Advarsel 1: Pas på med sæt-bruger- og sæt-gruppe-rettighederne. De kan give sikkerhedshuller.

Advarsel 2: Pas på med at sætte rettigheder rekursivt. De specielle måder rettigheder for kataloger fortolkes på kan give uønskede resultater.