Hvordan fungerer Linux-filtillatelser?
Hvis du har brukt Linux for en stund (og til og med OS X), har du sannsynligvis kommet over en "tillatelser" -feil. Men hva er de, og hvorfor er de nødvendige eller nyttige? La oss ta et innvendig utseende.
Bruker Tillatelser
På dagen var datamaskiner massive maskiner som var utrolig dyre. For å få mest mulig ut av dem ble flere datamaskinterminaler koblet sammen, noe som tillot mange brukere å gå om sin virksomhet samtidig. Databehandling og lagring ble gjort på maskinen, mens terminaler seg selv var lite mer enn et middel til visning og innlasting av data. Hvis du tenker på det, er det ganske mye hvordan vi får tilgang til data på "skyen"; se på Amazons Cloud MP3-system, Gmail og Dropbox, og du vil legge merke til at mens endringer kan gjøres lokalt, lagres alt eksternt.
(Bilde: Zenith Z-19 "dum" terminal; kreditt: ajmexico)
For at dette skal fungere, må enkelte brukere ha kontoer. De må ha en del av lagringsområdet som er tildelt dem, og de må ha lov til å kjøre kommandoer og programmer. Alle får spesifikke "brukerrettigheter", som dikterer hva de kan og ikke kan gjøre, hvor i systemet de gjør og ikke har tilgang, og hvis filer de kan og ikke kan endre. Hver bruker er også plassert i ulike grupper, som gir eller begrenser ytterligere tilgang.
Filtilgang
I denne sprø multi-user verden har vi allerede satt opp grenser for hva brukere kan gjøre. Men hva med hva de får tilgang til? Vel, hver fil har et sett med tillatelser og en eier. Eierbetegnelsen, som vanligvis er bundet når filen er opprettet, erklærer hvilken bruker den tilhører, og bare den brukeren kan endre tilgangstillatelsene.
I Linux-verdenen er tillatelser oppdelt i tre kategorier: lese, skrive og utføre. Med "Read" -tilgang kan man se innholdet i en fil, "skrive" -tilgang gjør at man kan endre innholdet i en fil, og "execute" gjør at man kan kjøre et sett med instruksjoner, som et skript eller et program. Hver av disse kategoriene brukes til forskjellige klasser: bruker, gruppe og verden. "Bruker" betyr eieren, "gruppe" betyr enhver bruker som er i samme gruppe som eieren, og "verden" betyr noen og alle.
Mapper kan også begrenses med disse tillatelsene. Du kan for eksempel tillate andre personer i gruppen å se kataloger og filer i hjemmemappen din, men ikke noen utenfor gruppen din. Du vil sannsynligvis begrense "skrive" tilgang til bare deg selv, med mindre du jobber med et delt prosjekt av noe slag. Du kan også opprette en delt katalog som gjør at noen kan se og endre filer i den mappen.
Endring av tillatelser i Ubuntu
GUI
For å endre tillatelsene til en fil du eier i Ubuntu, høyreklikker du bare på filen og går til "Egenskaper".
Du kan endre om eieren, gruppen eller andre kan lese og skrive, lese bare eller ikke gjøre noe. Du kan også merke en boks for å tillate kjøring av filen, og dette vil aktivere det for Eier, Gruppe og andre samtidig.
Kommandolinje
Du kan også gjøre dette via kommandolinjen. Gå til en katalog som har filer i den og skriv følgende kommando for å vise alle filer i en liste:
ls -al
Ved siden av hver fil og katalog ser du en spesiell seksjon som skisserer tillatelsene den har. Det ser slik ut:
-rwxrw-r-
De r står for "lese", den w står for "skrive" og x står for "kjøre". Kataloger vil starte med en "d" i stedet for en "-". Du vil også merke at det er 10 mellomrom som holder verdien. Du kan ignorere den første, og så er det 3 sett med 3. Det første settet er for eieren, det andre settet er for gruppen, og det siste settet er for verden.
For å endre en fil eller katalogets tillatelser, la oss se på grunnleggende form for chmod-kommandoen.
chmod [klasse] [operatør] [tillatelse] -fil
chmod [ugoa] [+ eller -] [rwx] fil
Dette kan virke komplisert først, men stol på meg, det er ganske enkelt. Først, la oss se på klassene:
- u: Dette er for eieren.
- g: Dette er for gruppen.
- o: Dette er for alle andre.
- a: Dette vil endre tillatelser for alle de ovennevnte.
Neste operatørene:
- +: Pluss-tegnet vil legge til tillatelsene som følger.
- -: Minustegnet vil fjerne tillatelsene som følger.
Fortsatt med meg? Og den siste delen er den samme som når vi sjekket tillatelsene til en fil:
- r: Tillater lesetilgang.
- w: Tillater skrivetilgang.
- x: Tillater kjøring.
La oss si det sammen. La oss si at vi har en fil med navnet "todo.txt" som har følgende tillatelser:
-rw rw-r--
Det vil si at eieren og gruppen kan lese og skrive, og verden kan bare lese. Vi ønsker å endre tillatelsene til disse:
-rwxr-
Det vil si at eieren har full tilgang, og gruppen kan lese. Vi kan gjøre dette i tre trinn. Først legger vi til utførelsesrettighetene for brukeren.
chmod u + x todo.txt
Da fjerner vi skrivetillatelsen for gruppen.
chmod g-w todo.txt
Til slutt fjerner vi lesetillatelsene for alle andre brukere.
chmod o-r todo.txt
Vi kan også kombinere disse til en kommando, slik som:
chmod u + x, g-w, o-r todo.txt
Du kan se at hver seksjon er adskilt av kommaer, og det er ingen mellomrom.
Her er noen nyttige tillatelser:
- -rwxr-xr-x: Eieren har full tilgang, gruppe og andre brukere kan lese filinnhold og utføre.
- -rwxr-r-: Eieren har full tilgang, gruppe og andre brukere kan bare lese filen (nyttig hvis du ikke har noe imot andre som ser på filene dine.
- -rwx-: Eieren har full tilgang, alle andre har ingen (nyttig for personlige skript).
- -rw-rw--: Eier og gruppe kan lese og skrive (nyttig for samarbeid med gruppemedlemmer).
- -rw-r-r-: Eieren kan lese og skrive, gruppe og andre brukere kan bare lese fil (nyttig for lagring av personlige filer på et delt nettverk).
- -rw--: Eieren kan lese og skrive, alle andre har ingen (nyttig for lagring av personlige filer).
Det er noen andre ting du kan gjøre med chmod-like setuid og setgid - men de er litt dyptgående, og de fleste brukerne trenger ikke å bruke dem uansett.
Root- eller Super-User og System Files
I dag kjører vi ikke alltid systemer som har flere brukere. Hvorfor bør vi fortsatt bekymre oss om tillatelser?
Vel, Unix og dets derivater - Linux, OS X, blant annet - skiller også mellom ting som drives av brukeren, ting som drives av en administrator eller med administratorrettigheter, og ting som kjøres av selve systemet. Som sådan må ting som er integrert for systemet kreve administrasjonsrettigheter for å bli endret eller åpnet. På denne måten roter du ikke noe ved et uhell.
I Ubuntu, for å gjøre endringer i systemfiler bruker du "sudo" eller "gksudo" for å få tilsvarende administratorrettigheter. I andre distros bytter du til "root" eller "super-user" som effektivt gjør det samme før du logger ut.
Vær oppmerksom på at i begge disse omstendighetene kan endring av filtillatelser føre til at programmer ikke virker, utilsiktet endrer fil eierskap til roten brukeren (i stedet for eieren), og gjør systemet mindre sikkert (ved å gi flere tillatelser). Som sådan anbefales det at du ikke endrer tillatelser for filer - spesielt systemfiler - med mindre det er nødvendig eller du vet hva du gjør.
Filtillatelser er på plass for å gi et grunnleggende sikkerhetssystem blant brukerne. Å lære hvordan de fungerer, kan hjelpe deg med å sette opp grunnleggende deling i et flerbrukermiljø, beskytte "offentlige" filer, og gi deg en anelse om når noe går galt med systemfilens eierskap.
Tror du kan forklare ting enklere? Har du en rettelse? Vil du minne om gamle dager? Ta en pause og legg tankene dine ned i kommentarene.