Kontroller hvem som kan få tilgang til filer, søke i mapper og utføre skript ved hjelp av Linux-kommandoen chmod. Denne kommandoen endrer filtillatelser i Linux, som kan virke kompliserte ved første øyekast, men som faktisk er ganske enkle å forstå når du lærer hvordan de fungerer.
chmod Endrer Rettigheter for Filer
I Linux bestemmes det hvem som har tillatelse til å utføre handlinger med en fil eller mappe gjennom et sett med tillatelser. Det finnes tre grupper av tillatelser: én for filens eier, én for medlemmene av filens gruppe, og én for alle andre brukere.
Disse tillatelsene definerer hvilke handlinger som er tillatt for en fil eller mappe. De gir eller hindrer muligheten til å lese, endre eller, for skript eller programmer, kjøre filen. For mapper kontrollerer tillatelsene hvem som kan navigere inn i mappen (cd) og hvem som kan opprette eller endre filer i den.
Du bruker chmod-kommandoen til å spesifisere disse tillatelsene. For å se hvilke tillatelser som er satt på en fil eller mappe, kan vi bruke kommandoen ls.
Visning og Forståelse av Filrettigheter
Vi kan bruke alternativet -l (langt format) med ls for å vise filrettighetene for filer og mapper.
ls -l
På hver linje identifiserer det første tegnet typen oppføring. En bindestrek (-) indikerer en fil, mens bokstaven d indikerer en mappe.
De neste ni tegnene representerer innstillingene for de tre gruppene med tillatelser.
De tre første tegnene viser tillatelsene til brukeren som eier filen (brukertillatelser).
De midterste tre tegnene viser tillatelsene for medlemmene av filens gruppe (gruppetillatelser).
De tre siste tegnene viser tillatelsene for alle som ikke er i de to første kategoriene (andre tillatelser).
Hvert sett med tillatelser består av tre tegn, som indikerer om en tillatelse er gitt eller ikke. En bindestrek (-) betyr at tillatelsen ikke er gitt. Bokstavene r, w eller x indikerer at tillatelsen er gitt.
Bokstavene representerer:
r: Leserettigheter. Filen kan åpnes og innholdet vises.
w: Skriverettigheter. Filen kan redigeres, endres og slettes.
x: Utførelsestillatelser. Hvis filen er et skript eller et program, kan den kjøres.
For eksempel:
— betyr at ingen tillatelser er gitt.
rwx betyr at alle tillatelser er gitt. Indikatorene for lesing, skriving og utførelse er alle til stede.
I skjermbildet vårt begynner den første linjen med d. Dette indikerer en mappe som heter «arkiv». Eieren av mappen er «dave», og gruppen som mappen tilhører, heter også «dave».
De neste tre tegnene er brukertillatelsene for denne mappen. De viser at eieren har alle tillatelser. Tegnene r, w og x er alle til stede. Dette betyr at brukeren dave har lese-, skrive- og utførelsestillatelser for denne mappen.
Det andre settet med tre tegn er gruppetillatelsene, som er rx. Disse viser at medlemmene av dave-gruppen har lese- og kjøretillatelser for denne mappen. Det betyr at de kan liste filene og deres innhold i mappen, og de kan bruke kommandoen cd for å gå inn i mappen. De har ikke skriverettigheter, så de kan ikke opprette, redigere eller slette filer.
Det siste settet med tre tegn er også rx. Disse tillatelsene gjelder for personer som ikke styres av de to første settene med tillatelser. Disse personene (kalt «andre») har lese- og kjøretillatelser på denne mappen.
For å oppsummere har gruppemedlemmer og andre lese- og utførelsestillatelser. Eieren, brukeren dave, har også skriverettigheter.
For alle de andre filene (bortsett fra mh.sh-skriptfilen) har dave og medlemmer av dave-gruppen lese- og skriverettigheter, og de andre har kun leserettigheter.
For skriptfilen mh.sh har eieren dave og gruppemedlemmene lese-, skrive- og utføringstillatelser, mens de andre bare har lese- og utføringstillatelser.
Forstå Tillatelsessyntaksen
For å bruke chmod til å sette tillatelser, må vi spesifisere:
Hvem: Hvem tillatelsene gjelder for.
Hva: Hvilken handling vi gjør? Legger vi til eller fjerner tillatelsen?
Hvilken: Hvilken tillatelse spesifiserer vi?
Vi bruker indikatorer for å representere disse verdiene og danner korte «tillatelseserklæringer» som u+x, der «u» betyr «bruker» (hvem), «+» betyr legg til (hva), og «x» betyr utførelsestillatelse (hvilken).
«Hvem»-verdiene vi kan bruke er:
u: Bruker, som betyr eieren av filen.
g: Gruppe, som betyr medlemmene av gruppen filen tilhører.
o: Andre, altså personer som ikke styres av u- og g-tillatelsene.
a: Alle, som betyr alle de ovennevnte.
Hvis ingen av disse brukes, oppfører chmod seg som om «a» var brukt.
«Hva»-verdiene vi kan bruke er:
–: Minustegn. Fjerner tillatelsen.
+: Plusstegn. Gir tillatelsen. Tillatelsen legges til de eksisterende tillatelsene. Hvis du bare vil ha denne tillatelsen og ikke andre, bruk alternativet =, beskrevet nedenfor.
=: Likhetstegn. Setter en tillatelse og fjerner andre.
«Hvilke»-verdiene vi kan bruke er:
r: Leserettighet.
w: Skriverettighet.
x: Utførelsestillatelse.
Sette og Endre Tillatelser
La oss anta at vi har en fil der alle har full tilgang.
ls -l new_file.txt
Vi ønsker at brukeren dave skal ha lese- og skriverettigheter, og at gruppen og andre brukere kun skal ha leserettigheter. Dette kan vi oppnå med følgende kommando:
chmod u=rw,og=r new_file.txt
Ved å bruke «=» -operatoren sletter vi alle eksisterende tillatelser og setter de spesifiserte.
La oss sjekke de nye tillatelsene for denne filen:
ls -l new_file.txt
De eksisterende tillatelsene er fjernet, og de nye tillatelsene er satt som forventet.
Hva med å legge til en tillatelse uten å fjerne eksisterende tillatelsesinnstillinger? Det kan vi også gjøre enkelt.
La oss si at vi har en skriptfil som vi er ferdig med å redigere. Vi må gjøre den kjørbar for alle brukere. De nåværende tillatelsene ser slik ut:
ls -l new_script.sh
Vi kan legge til utførelsestillatelsen for alle med følgende kommando:
chmod a+x new_script.sh
Hvis vi ser på tillatelsene, vil vi se at utførelsestillatelsen nå er gitt til alle, og de eksisterende tillatelsene er fortsatt på plass.
ls -l new_script.sh
Vi kunne ha oppnådd det samme uten «a» i «a+x»-setningen. Følgende kommando ville ha fungert like bra.
chmod +x new_script.sh
Sette Tillatelser for Flere Filer
Vi kan bruke tillatelser på flere filer samtidig.
Dette er filene i den gjeldende mappen:
ls -l
La oss si at vi ønsker å fjerne skriverettighetene for «andre» brukere fra filer med filtypen «.page». Vi kan gjøre dette med følgende kommando:
chmod o-r *.page
La oss sjekke effekten dette har hatt:
ls -l
Som vi kan se, er lesetillatelsen fjernet fra «.page»-filene for kategorien «andre» brukere. Ingen andre filer er berørt.
Hvis vi ønsket å inkludere filer i undermapper, kunne vi ha brukt alternativet -R (rekursivt).
chmod -R o-r *.page
Numerisk Forkortelse
En annen måte å bruke chmod på er å angi tillatelsene du vil gi til eieren, gruppen og andre som et tresifret tall. Det venstre sifferet representerer tillatelsene til eieren. Det midterste sifferet representerer tillatelsene for gruppemedlemmene. Det høyre sifferet representerer tillatelsene for de andre.
Tallene du kan bruke, og hva de representerer, er oppført her:
0: (000) Ingen tillatelse.
1: (001) Utførelsestillatelse.
2: (010) Skriverettighet.
3: (011) Skrive- og utførelsestillatelser.
4: (100) Leserettighet.
5: (101) Lese- og utførelsestillatelser.
6: (110) Lese- og skriverettigheter.
7: (111) Lese-, skrive- og utførelsestillatelser.
Hver av de tre tillatelsene er representert av en av bitene i den binære ekvivalenten til desimaltallet. Så 5, som er 101 i binær, betyr lesing og utførelse. 2, som er 010 i binær, vil bety skriverettighet.
Ved å bruke denne metoden angir du tillatelsene du vil ha. Du legger ikke til disse tillatelsene til de eksisterende tillatelsene. Så hvis lese- og skriverettigheter allerede var på plass, må du bruke 7 (111) for å legge til utførelsestillatelser. Ved å bruke 1 (001) vil du fjerne lese- og skriverettighetene og legge til utførelsestillatelsen.
La oss legge til leserettighetene tilbake på «.page»-filene for de andre brukerne. Vi må også angi bruker- og grupperettigheter, så vi må sette dem til det de allerede er. Disse brukerne har allerede lese- og skriverettigheter, som er 6 (110). Vi vil at de «andre» skal ha lesetillatelse, så de må settes til 4 (100).
Følgende kommando vil oppnå dette:
chmod 664 *.page
Dette setter tillatelsene vi trenger for brukeren, gruppemedlemmer og andre. Brukerne og gruppemedlemmene får sine tillatelser tilbakestilt til det de allerede var, og de andre får lesetillatelsen gjenopprettet.
ls -l
Avanserte Innstillinger
Hvis du leser man-siden for chmod, vil du se at det finnes noen avanserte alternativer knyttet til SETUID- og SETGID-bitene, og til den begrensede slettingen eller «sticky»-biten.
For 99 % av tilfellene der du trenger chmod, vil alternativene som er beskrevet her dekke dine behov.