Product SiteDocumentation Site

9.3. Håndtering av rettigheter

Linux er definitivt et flerbrukersystem (multi-user system), så det er nødvendig å tilby et tilgangssystem for å kontrollere mengden autoriserte operasjoner på filer og kataloger, for alle systemressurser og enheter (på et Unix-system, er enhver enhet representert med en fil eller katalog). Dette prinsippet er felles for alle Unix-systemer, men en påminnelse er alltid nyttig, særlig fordi det er noen interessante og relativt ukjente, avanserte bruksmåter.

9.3.1. Eiere og tilganger

Hver fil eller katalog har egne tilganger for tre kategorier av brukere:
  • dens eier (symbolisert ved u som i «user»);
  • dens eiergruppe (symbolisert med g som i «gruppe»), som representerer alle medlemmene i gruppen;
  • de andre (symbolisert med o som i «other»).
Tre grunnleggende typer rettigheter kan kombineres:
  • lesing (symbolisert med r som i «read»);
  • skrive (eller modifisere, symbolisert ved w som i «write»);
  • utføre (symbolisert med x som i «eXecute»).
Når det gjelder en fil, er disse rettighetene lette å forstå: Lesetilgang tillater å lese innhold (inkludert kopiering), skrivetilgang tillater å endre den, og med kjøretilgang kan du kjøre den (som bare vil fungere hvis den er et program).
En katalog håndteres annerledes. Lesetilgang gir rett til å lese listen over oppføringer (filer og kataloger), skrivetilgang gir tilgang til å opprette eller slette filer, og kjøretilgang gjør det mulig passere gjennom den (spesielt å gå dit med cd-kommandoen). Å kunne passere gjennom en katalog uten å kunne lese den, gjør det mulig til å bevegese seg til de oppføringene som er kjent ved navn, men ikke til å finne dem hvis man ikke vet at de finnes, eller deres presise navn.
Tre kommandoer kontrollerer tilganger knyttet til en fil:
  • chown bruker fil endrer eieren av filen;
  • chgrp gruppe fil endrer eiergruppen;
  • chmod rettigheter fil endrer tilgangene for filen.
Det er to måter å presentere rettighetene på. Blant dem er den symbolske representasjon trolig den enkleste å forstå og huske. Det innebærer bokstavsymboler som nevnt ovenfor. Du kan definere rettigheter for hver kategori av brukere (u/g/o), ved å sette dem eksplisitt (ved =), ved å legge til (+), eller trekke fra (-). Dermed gir u=rwx,g+rw,o-r-formelen eieren lese-, skrive-, og utføringsrettigheter, legger til lese- og skriverettigheter for eiergruppen, og fjerner leserettigheter for andre brukere. Rettigheter som ikke er endret ved å legge til eller fjerne i en slik kommando, forblir uendret. Bokstaven a, for «alle», dekker alle tre kategorier brukere, slik at a=rx gir alle tre kategorier de samme rettigheter (lese og kjøre, men ikke skrive).
Den (åttetalls-) numeriske representasjonen forbinder hver rettighet med en verdi: 4 for lese-, 2 for skrive, og 1 for å utføre. Vi forbinder hver kombinasjon av rettigheter med summen av tallene. Hver verdi blir deretter knyttet til ulike kategorier av brukere ved å sette dem side ved side (end to end)i den vanlige rekkefølgen (eier, gruppe, andre).
For eksempel chmod 754 fil-kommandoen vil gi de følgende rettigheter: lese, skrive og utføre for eieren (fordi 7 = 4 + 2 + 1); lese og utføre for gruppen (fordi 5 = 4 + 1); bare lese for andre. 0 (zero) betyr ingen rettigheter; da chmod 600 fil tillater lese/skrive-rettigheter for eieren, og ingen rettigheter for noen andre. De hyppigste rettighetskombinasjonene er 755 for kjørbare filer og kataloger, og 644 for datafiler.
For å representere spesielle rettigheter kan du stille et fjerde siffer foran dette tallet etter samme prinsipp, der setuid, setgid og sticky-bit-ene er henholdsvis 4, 2 og 1. chmod 4754 vil knytte setuid-bit-et til den tidligere beskrevne rettigheten.
Merk at bruk av åttetallsystemet bare tillater å sette alle rettigheter samtidig i en fil; du kan ikke bruke den til å bare legge til en ny rett, slik som lesetilgang for gruppens eier, siden du må ta hensyn til eksisterende rettigheter, og beregne ny tilsvarende tallverdi.

9.3.2. ACL-er - Tilgangskontroll-lister

Mange filsystemer, for eksempel Btrfs, Ext3, Ext4, JFS, XFS, og så videre støtter bruk av tilgangskontroll-lister (ACL-er). Disse utvider grunnleggende funksjoner for eierskap og tilganger (beskrevet i den forrige delen) og tillater mer finmasket kontroll over hvert objekt (fil). For eksempel hvis en bruker ønsker å dele en fil med en annen og den brukeren kun skal kunne lese filen, men ikke skrive eller endre den.
For noen filsystemer er bruk av ACL-er påskrudd som forvalg (for eksempel Btrfs, Ext3, Ext4). For andre filsystemer eller eldre systemer må det skrus på ved bruk av acl-monteringsvalg. Enten i mount-kommandoen direkte, eller i /etc/fstab. På samme vis kan bruk av ACL-er skrus av ved bruk av noacl-monteringsvalget. For Ext*-filsystemer kan man også bruke tune2fs -o [no]acl /dev/enhet-kommandoen for å skru av/på bruk av ACL-er som forvalg. De forvalgte verdiene for hvert filsystem er vanligvis å finne i deres homonym-manualsider i del 5 (filsystem(5)) eller i mount(8).
Etter at ACL-er er skrudd på så kan tilganger styres med ved bruk av setfacl(1)-kommandoen, mens getfacl(1) lar en hente frem ACL-er for et gitt objekt eller sti. Disse kommandoene er en del av acl-pakken. Med setfacl kan man også sette opp at nylig opprettede filer eller mapper skal arve tilganger fra foreldremappe. Det er viktig å merke seg at ACL-er behandles i rekkefølge, og at en tidligere oppføring som passer situasjonen har rang over senere oppføringer.
Hvis en fil har ACL-er satt, vil utdata for ls -l-kommandoen vise et pluss-tegn etter de tradisjonelle tilgangene. Ved bruk av ACL-er oppfører chmod seg litt annerledes, og det kan hende at umask blir ignorert. Den fyldige dokumentasjonen, for eksempel acl(5), har mer info.