Hvordan bruke chmod-kommandoen på Linux

Kontroller hvem som kan få tilgang til filer, søke i kataloger og kjøre skript ved å bruke Linuxs chmod-kommando. Denne kommandoen endrer Linux-filtillatelser, som ser kompliserte ut ved første øyekast, men som faktisk er ganske enkle når du først vet hvordan de fungerer.

chmod Endrer filtillatelser

I Linux kontrolleres hvem som kan gjøre hva med en fil eller katalog gjennom sett med tillatelser. Det er tre sett med tillatelser. Ett sett for eieren av filen, et annet sett for medlemmene av filens gruppe, og et siste sett for alle andre.

Tillatelsene kontrollerer handlingene som kan utføres på filen eller katalogen. De enten tillater eller forhindrer at en fil leses, endres eller, hvis det er et skript eller program, kjøres. For en katalog styrer tillatelsene hvem som kan cd inn i katalogen og hvem som kan opprette eller endre filer i katalogen.

Du bruker chmod-kommandoen for å angi hver av disse tillatelsene. Til se hvilke tillatelser som er angitt på en fil eller katalog kan vi bruke ls.

Vise og forstå filtillatelser

Vi kan bruke alternativet -l (langt format) for å få ls til å vise filtillatelsene for filer og kataloger.

ls -l

På hver linje identifiserer det første tegnet typen oppføring som vises. Hvis det er en bindestrek (-) er det en fil. Hvis det er bokstaven d er det en katalog.

De neste ni tegnene representerer innstillingene for de tre settene med tillatelser.

De tre første tegnene viser tillatelsene til brukeren som eier filen (brukertillatelser).
De midterste tre tegnene viser tillatelsene for medlemmer av filens gruppe (gruppetillatelser).
De tre siste tegnene viser tillatelsene for alle som ikke er i de to første kategoriene (andre tillatelser).

Det er tre tegn i hvert sett med tillatelser. Tegnene er indikatorer for tilstedeværelse eller fravær av en av tillatelsene. De er enten en bindestrek (-) eller en bokstav. Hvis tegnet er en bindestrek, betyr det at tillatelsen ikke er gitt. Hvis tegnet er en r, w eller en x, har denne tillatelsen blitt gitt.

  Hvordan redigere PPAer i Linux Mint

Bokstavene representerer:

r: Leserettigheter. Filen kan åpnes og innholdet vises.
w: Skriverettigheter. Filen kan redigeres, endres og slettes.
x: Utfør tillatelser. Hvis filen er et skript eller et program, kan den kjøres (utføres).

For eksempel:

— betyr at ingen tillatelser er gitt i det hele tatt.
rwx betyr at fulle tillatelser er gitt. Lese-, skrive- og utfør-indikatorene er alle til stede.

I skjermbildet vårt starter den første linjen med en d. Denne linjen refererer til en katalog kalt «arkiv.» Eieren av katalogen er «dave», og navnet på gruppen som katalogen tilhører kalles også «dave.»

De neste tre tegnene er brukertillatelsene for denne katalogen. Disse viser at eieren har fulle tillatelser. Tegnene r, w og x er alle til stede. Dette betyr at brukeren dave har lese-, skrive- og utføringstillatelser for den katalogen.

Det andre settet med tre tegn er gruppetillatelsene, disse er rx. Disse viser at medlemmene av dave-gruppen har lese- og kjøretillatelser for denne katalogen. Det betyr at de kan liste filene og innholdet deres i katalogen, og de kan cd (kjøre) inn i den katalogen. De har ikke skrivetillatelser, så de kan ikke opprette, redigere eller slette filer.

Det endelige settet med tre karakterer er også rx. Disse tillatelsene gjelder personer som ikke er styrt av de to første settene med tillatelser. Disse personene (kalt «andre») har lese- og kjøretillatelser på denne katalogen.

Så for å oppsummere har gruppemedlemmer og andre lest og utføre tillatelser. Eieren, en bruker kalt dave, har også skriverettigheter.

For alle de andre filene (bortsett fra mh.sh-skriptfilen) har dave og medlemmer av dave-gruppen lese- og skriveegenskaper på filene, og de andre har kun leserettigheter.

For det spesielle tilfellet av mh.sh-skriptfilen, har eieren dave og gruppemedlemmene lese-, skrive- og utføringstillatelser, og de andre har kun lese- og utføringstillatelser.

Forstå tillatelsessyntaksen

For å bruke chmod til å angi tillatelser, må vi fortelle det:

Hvem: Hvem gir vi tillatelser for.
Hva: Hvilken endring gjør vi? Legger vi til eller fjerner tillatelsen?
Hvilken: Hvilken av tillatelsene angir 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).

  Hvordan organisere listene dine i Linux med Dynalist

«Hvem»-verdiene vi kan bruke er:

u: Bruker, som betyr eieren av filen.
g: Gruppe, som betyr medlemmer av gruppen filen tilhører.
o: Andre, altså personer som ikke styres av u- og g-tillatelsene.
a: Alle, betyr alt ovenfor.

Hvis ingen av disse brukes, oppfører chmod seg som om «a» hadde blitt brukt.

«Hva»-verdiene vi kan bruke er:

–: Minustegn. Fjerner tillatelsen.
+: Plusstegn. Gir tillatelsen. Tillatelsen legges til de eksisterende tillatelsene. Hvis du vil ha denne tillatelsen og bare dette tillatelsessettet, bruk = alternativet, beskrevet nedenfor.
=: Lik tegn. Angi en tillatelse og fjern andre.

«Hvilke» verdier vi kan bruke er:

r: Lesetillatelsen.
w: Skrivetillatelsen.
x: Utføringstillatelsen.

Innstilling og endring av tillatelser

La oss si at vi har en fil der alle har fulle tillatelser på den.

ls -l new_ file.txt

Vi vil at brukeren dave skal ha lese- og skrivetillatelser og at gruppen og andre brukere kun skal ha lesetillatelser. Vi kan gjøre ved å bruke følgende kommando:

chmod u=rw,og=r new_file.txt

Å bruke «=»-operatoren betyr at vi sletter alle eksisterende tillatelser og deretter angir de spesifiserte.

la oss sjekke den nye tillatelsen på denne filen:

ls -l new_file.txt

De eksisterende tillatelsene er fjernet, og de nye tillatelsene er satt, slik vi forventet.

Hva med å legge til en tillatelse uten å fjerne de eksisterende tillatelsesinnstillingene? Det kan vi også enkelt gjøre.

La oss si at vi har en skriptfil som vi er ferdig med å redigere. Vi må gjøre det kjørbart 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 tar en titt 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

Angi tillatelser for flere filer

Vi kan bruke tillatelser til flere filer samtidig.

Dette er filene i gjeldende katalog:

ls -l

La oss si at vi ønsker å fjerne skrivetillatelsene for de «andre» brukerne fra filer som har filtypen «.page». Vi kan gjøre dette med følgende kommando:

chmod o-r *.page

La oss sjekke hvilken effekt det har hatt:

ls -l

Som vi kan se, har lesetillatelsen blitt fjernet fra «.page»-filene for kategorien «andre» brukere. Ingen andre filer er berørt.

  Slik bruker du xargs-kommandoen på Linux

Hvis vi hadde ønsket å inkludere filer i underkataloger, kunne vi ha brukt alternativet -R (rekursivt).

chmod -R o-r *.page

Numerisk stenografi

En annen måte å bruke chmod på er å gi tillatelsene du ønsker å gi til eieren, gruppen og andre som et tresifret tall. Sifferet lengst til venstre representerer tillatelsene til eieren. Det midterste sifferet representerer tillatelsene for gruppemedlemmene. Sifferet lengst til høyre representerer tillatelsene for de andre.

Sifrene du kan bruke og hva de representerer er oppført her:

0: (000) Ingen tillatelse.
1: (001) Utfør tillatelse.
2: (010) Skrivetillatelse.
3: (011) Skrive og utføre tillatelser.
4: (100) Lesetillatelse.
5: (101) Les og utfør tillatelser.
6: (110) Lese- og skrivetillatelser.
7: (111) Les, skriv og utfør tillatelser.

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 skrivetillatelsen.

Ved å bruke denne metoden angir du tillatelsene du ønsker å ha; du legger ikke til disse tillatelsene til de eksisterende tillatelsene. Så hvis lese- og skrivetillatelser allerede var på plass, må du bruke 7 (111) for å legge til utførelsestillatelser. Bruk av 1 (001) vil fjerne lese- og skrivetillatelsene og legge til utførelsestillatelsen.

La oss legge til lesetillatelsen tilbake på «.page»-filene for de andre brukerkategoriene. Vi må angi bruker- og gruppetillatelser også, så vi må sette dem til det de allerede er. Disse brukerne har allerede lese- og skrivetillatelser, som er 6 (110). Vi vil at de «andre» skal ha lesing og tillatelser, så de må settes til 4 (100).

Følgende kommando vil oppnå dette:

chmod 664 *.page

Dette setter tillatelsene vi krever for brukeren, gruppemedlemmer og andre til det vi trenger. Brukerne og gruppemedlemmene får tilbakestille tillatelsene til det de allerede var, og de andre får lesetillatelsen gjenopprettet.

ls -l

Avanserte instillinger

Hvis du les man-siden for chmod vil du se at det er noen avanserte alternativer knyttet til SETUID- og SETGID-bitene, og til den begrensede slettingen eller «sticky»-biten.

For 99 % av tilfellene du trenger chmod for, vil alternativene beskrevet her dekke deg.