Hur man använder kommandot chmod på Linux

By rik

Med Linux-kommandot chmod kan du kontrollera vem som får tillgång till filer, navigera genom kataloger och köra skript. Till en början kan det se komplicerat ut att ändra Linux-filbehörigheter, men när man förstår grunderna blir det ganska enkelt.

chmod – Ändring av filbehörigheter

I Linux är behörigheter indelade i tre grupper som styr vilka åtgärder som kan utföras på en fil eller katalog. Det finns en uppsättning behörigheter för filens ägare, en för gruppmedlemmarna och en för alla andra användare.

Behörigheterna avgör om en fil kan läsas, ändras eller, om det är ett skript eller program, köras. För en katalog anger behörigheterna vem som får gå in i katalogen och vem som får skapa eller ändra filer där.

Kommandot chmod används för att konfigurera dessa behörigheter. För att se aktuella behörigheter för en fil eller katalog, kan kommandot ls användas.

Visning och tolkning av filbehörigheter

För att visa filbehörigheter i detalj kan ls köras med flaggan -l (långt format).

ls -l

Varje rad i utskriften börjar med en symbol som anger typen av objekt. Ett bindestreck (-) betecknar en fil, medan bokstaven ”d” indikerar en katalog.

De efterföljande nio tecknen representerar behörighetsinställningarna, indelade i tre grupper om tre.

De tre första tecknen avser behörigheter för filens ägare (användarbehörigheter). De mellersta tre tecknen visar behörigheter för medlemmar i filens grupp (gruppbehörigheter). De sista tre tecknen avser behörigheter för alla användare som inte tillhör de två första kategorierna (övriga behörigheter).

Varje uppsättning med tre tecken visar om en specifik behörighet är tilldelad eller inte. Ett bindestreck (-) betyder att behörigheten inte är given. Bokstäverna ’r’, ’w’ eller ’x’ betyder att den motsvarande behörigheten är beviljad.

Dessa bokstäver står för:

r: Lästillstånd – filen kan öppnas och innehållet läsas.
w: Skrivtillstånd – filen kan redigeras, ändras och tas bort.
x: Körningstillstånd – om filen är ett skript eller program, kan den köras.

Exempelvis:

— betyder att inga behörigheter är tilldelade.
rwx betyder att fullständiga behörigheter är tilldelade – läs-, skriv- och körningsbehörigheter.

I ett exempel börjar den första raden med bokstaven ’d’, vilket betyder att det är en katalog som heter ”arkiv”. Ägaren av katalogen är ”dave” och gruppen som katalogen tillhör heter också ”dave”.

De följande tre tecknen (rwx) visar att användaren Dave har fullständiga behörigheter för katalogen. Dave har alltså läs-, skriv- och körningsbehörighet.

De nästa tre tecknen (rx) visar gruppbehörigheterna, vilket betyder att medlemmarna i gruppen ”dave” har läs- och körningsbehörigheter. De kan lista innehållet i katalogen och navigera till den, men de kan inte skapa, redigera eller ta bort filer.

De sista tre tecknen (rx) avser övriga användare, vilka alltså också har läs- och körningsbehörigheter.

Sammanfattningsvis har gruppmedlemmar och andra läs- och körningsbehörighet, medan ägaren, ”dave”, även har skrivbehörighet.

För övriga filer har ”dave” och gruppmedlemmarna läs- och skrivbehörigheter, medan övriga endast har läsbehörighet.

Filen ”mh.sh” har läs-, skriv- och körningsbehörighet för ägaren och gruppen, medan övriga endast har läs- och körningsbehörighet.

Syntax för behörighet

För att kunna använda chmod för att ställa in behörigheter måste vi definiera följande:

Vem: Vem ska ändringarna gälla?
Vad: Vad ska vi göra? Lägga till eller ta bort behörigheter?
Vilken: Vilka specifika behörigheter ska vi ändra?

Dessa värden representeras av indikatorer, vilket ger korta ”behörighetssatser”, exempelvis ”u+x”, där ”u” betyder ”användare” (vem), ”+” betyder ”lägg till” (vad) och ”x” betyder ”körningsbehörighet” (vilken).

Möjliga värden för ”vem” är:

  • u: Användaren (filens ägare).
  • g: Gruppen (medlemmarna i filens grupp).
  • o: Övriga (användare som inte styrs av u- och g-behörigheterna).
  • a: Alla (u, g och o).

Om inget ”vem”-värde specificeras, fungerar chmod som om ”a” hade specificerats.

Möjliga värden för ”vad” är:

  • -: Minus – tar bort behörigheten.
  • +: Plus – tilldelar behörigheten, behörigheten läggs till de befintliga. För att ge *endast* en specifik behörighet, använd ’=’ som beskrivs nedan.
  • =: Likhetstecken – tilldelar en behörighet och tar bort övriga.

Möjliga värden för ”vilken” är:

  • r: Lästillstånd.
  • w: Skrivtillstånd.
  • x: Körningstillstånd.

Justering och ändring av behörigheter

Anta att vi har en fil där alla har fullständiga behörigheter:

ls -l new_file.txt

Vi vill att användaren Dave ska ha läs- och skrivbehörigheter, och att gruppen och övriga användare endast ska ha läsbehörigheter. Vi kan göra detta med följande kommando:

chmod u=rw,og=r new_file.txt

Operatorn ”=” raderar alla befintliga behörigheter och tilldelar sedan de specificerade.

Kontrollerar den nya behörigheten för filen:

ls -l new_file.txt

De befintliga behörigheterna är borttagna och de nya är inställda som förväntat.

Hur gör man om man vill lägga till en behörighet utan att ta bort befintliga? Det kan vi också enkelt göra.

Anta att vi har ett skript som vi precis har färdigredigerat. Vi vill göra det körbart för alla användare. Nuvarande behörigheter ser ut så här:

ls -l new_script.sh

Vi kan lägga till körningsbehörighet för alla med följande kommando:

chmod a+x new_script.sh

En titt på behörigheterna visar att körningsbehörigheten är tilldelad alla, och att de befintliga behörigheterna är intakta.

ls -l new_script.sh

Vi hade kunnat uppnå samma sak utan ”a” i ”a+x”. Följande kommando hade fungerat lika bra.

chmod +x new_script.sh

Konfigurering av behörigheter för flera filer

Vi kan tillämpa behörigheter på flera filer samtidigt.

Filer i aktuell katalog:

ls -l

Anta att vi vill ta bort skrivbehörigheter för ”övriga” användare från alla filer som slutar på ”.page”. Vi kan göra detta med följande kommando:

chmod o-w *.page

Låt oss kontrollera resultatet:

ls -l

Skrivbehörigheten är borttagen från filerna med tillägget ”.page” för ”övriga” användare. Inga andra filer har påverkats.

För att även inkludera filer i underkataloger, hade vi kunnat använda flaggan -R (rekursivt).

chmod -R o-w *.page

Numerisk förkortning

Ett annat sätt att ange behörigheter med chmod är att använda en tresiffrig kod, där varje siffra representerar behörigheterna för ägaren, gruppen och övriga, i den ordningen.

Följande siffror och vad de står för är:

0 (000) Ingen behörighet.
1 (001) Körningstillstånd.
2 (010) Skrivtillstånd.
3 (011) Skriv- och körningstillstånd.
4 (100) Lästillstånd.
5 (101) Läs- och körningstillstånd.
6 (110) Läs- och skrivtillstånd.
7 (111) Läs-, skriv- och körningstillstånd.

Varje behörighet representeras av en bit i det binära talet som motsvarar det decimala talet. Till exempel betyder 5 (101 i binärt) läs- och körningstillstånd. 2 (010 i binärt) betyder skrivtillstånd.

Med denna metod justerar du behörigheterna direkt och lägger inte till dem till de befintliga. Om till exempel läs- och skrivbehörigheter redan var aktiva skulle du behöva använda 7 (111) för att även ge körningsbehörighet. Att använda 1 (001) skulle ta bort läs- och skrivbehörigheterna och ge körningsbehörighet.

Låt oss till exempel lägga till läsbehörighet till ”.page”-filerna för övriga användare. Vi måste också återställa användar- och gruppbehörigheterna till deras befintliga värden. Användarna har redan läs- och skrivbehörigheter (6, binärt 110). Vi vill ge ”övriga” läsbehörighet (4, binärt 100).

Detta åstadkoms med följande kommando:

chmod 664 *.page

Detta tilldelar de behörigheter som vi vill ha för användaren, gruppen och övriga. Användarna och gruppmedlemmarna får sina behörigheter återställda till de tidigare värdena, och övriga får tillbaka läsbehörighet.

ls -l

Avancerade alternativ

Genom att läsa manualen för chmod kan man se att det finns fler avancerade alternativ relaterade till SETUID- och SETGID-bitarna och ”sticky”-biten.

För 99% av de fall du behöver chmod för, kommer de alternativ som beskrivs här att vara tillräckliga.