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.