Hur man använder kommandot chmod på Linux

Kontrollera vem som kan komma åt filer, söka i kataloger och köra skript med Linuxs chmod-kommando. Det här kommandot ändrar Linux-filbehörigheter, som ser komplicerade ut vid första anblicken men är faktiskt ganska enkla när du väl vet hur de fungerar.

chmod Modifierar filbehörigheter

I Linux kontrolleras vem som kan göra vad med en fil eller katalog genom uppsättningar av behörigheter. Det finns tre uppsättningar behörigheter. En uppsättning för ägaren av filen, en annan uppsättning för medlemmarna i filens grupp och en sista uppsättning för alla andra.

Behörigheterna styr de åtgärder som kan utföras på filen eller katalogen. De antingen tillåter eller förhindrar att en fil läses, modifieras eller, om det är ett skript eller program, exekveras. För en katalog styr behörigheterna vem som kan cd in i katalogen och vem som kan skapa eller ändra filer i katalogen.

Du använder kommandot chmod för att ställ in var och en av dessa behörigheter. Till se vilka behörigheter som har ställts in på en fil eller katalog kan vi använda ls.

Visa och förstå filbehörigheter

Vi kan använda alternativet -l (långt format) för att låta ls lista filbehörigheterna för filer och kataloger.

ls -l

På varje rad identifierar det första tecknet vilken typ av post som listas. Om det är ett bindestreck (-) är det en fil. Om det är bokstaven d är det en katalog.

De följande nio tecknen representerar inställningarna för de tre uppsättningarna med behörigheter.

De första tre tecknen visar behörigheterna för användaren som äger filen (användarbehörigheter).
De mittersta tre tecknen visar behörigheterna för medlemmar i filens grupp (gruppbehörigheter).
De sista tre tecknen visar behörigheterna för alla som inte tillhör de två första kategorierna (andra behörigheter).

Det finns tre tecken i varje uppsättning behörigheter. Tecknen är indikatorer för närvaron eller frånvaron av en av behörigheterna. De är antingen ett bindestreck (-) eller en bokstav. Om tecknet är ett bindestreck betyder det att tillstånd inte ges. Om tecknet är ett r, w eller ett x, har den behörigheten beviljats.

Bokstäverna representerar:

r: Läsbehörigheter. Filen kan öppnas och dess innehåll kan visas.
w: Skrivbehörigheter. Filen kan redigeras, modifieras och raderas.
x: Utför behörigheter. Om filen är ett skript eller ett program kan den köras (köras).

Till exempel:

— betyder att inga tillstånd har beviljats ​​alls.
rwx betyder att fullständiga behörigheter har beviljats. Läs-, skriv- och exekveringsindikatorerna är alla närvarande.

I vår skärmdump börjar den första raden med ett d. Den här raden hänvisar till en katalog som heter ”arkiv”. Ägaren till katalogen är ”dave”, och namnet på gruppen som katalogen tillhör kallas också ”dave.”

De följande tre tecknen är användarbehörigheterna för denna katalog. Dessa visar att ägaren har fullständiga behörigheter. Tecknen r, w och x är alla närvarande. Detta betyder att användaren Dave har läs-, skriv- och exekveringsbehörigheter för den katalogen.

Den andra uppsättningen av tre tecken är gruppbehörigheterna, dessa är rx. Dessa visar att medlemmarna i dave-gruppen har läs- och körrättigheter för denna katalog. Det betyder att de kan lista filerna och deras innehåll i katalogen, och de kan cd (köra) till den katalogen. De har inte skrivbehörighet, så de kan inte skapa, redigera eller ta bort filer.

Den sista uppsättningen av tre karaktärer är också rx. Dessa behörigheter gäller personer som inte styrs av de två första uppsättningarna av behörigheter. Dessa personer (kallade ”andra”) har läs- och körrättigheter för denna katalog.

Så, för att sammanfatta, gruppmedlemmar och andra har läst och verkställer behörigheter. Ägaren, en användare som heter dave, har också skrivbehörighet.

För alla andra filer (förutom mh.sh-skriptfilen) har dave och medlemmar i dave-gruppen läs- och skrivegenskaper för filerna, och de andra har endast läsbehörighet.

För det speciella fallet med mh.sh-skriptfilen har ägaren dave och gruppmedlemmarna läs-, skriv- och körrättigheter, och de andra har endast läs- och exekveringsbehörigheter.

Förstå syntaxen för behörighet

För att använda chmod för att ställa in behörigheter måste vi berätta för det:

Vem: Vem anger vi behörigheter för.
Vad: Vilken förändring gör vi? Lägger vi till eller tar vi bort behörigheten?
Vilken: Vilka av behörigheterna ställer vi in?

Vi använder indikatorer för att representera dessa värden, och bildar korta ”behörighetssatser” som u+x, där ”u” betyder ”användare” (vem), ”+” betyder lägg till (vad) och ”x” betyder exekveringsbehörighet (som).

De ”vem”-värden vi kan använda är:

u: Användare, vilket betyder ägaren till filen.
g: Grupp, vilket betyder medlemmar i gruppen som filen tillhör.
o: Andra, det vill säga personer som inte styrs av u- och g-behörigheterna.
a: Alla, vilket betyder allt ovan.

Om ingen av dessa används, beter sig chmod som om ”a” hade använts.

De ”vad”-värden vi kan använda är:

-: Minustecken. Tar bort behörigheten.
+: Plustecken. Ger tillståndet. Behörigheten läggs till de befintliga behörigheterna. Om du vill ha denna behörighet och endast denna behörighetsuppsättning, använd alternativet =, som beskrivs nedan.
=: Likhetstecken. Ange en behörighet och ta bort andra.

De ”vilka” värden vi kan använda är:

r: Lästillståndet.
w: Skrivbehörigheten.
x: Exekveringsbehörigheten.

Ställa in och ändra behörigheter

Låt oss säga att vi har en fil där alla har fullständiga behörigheter för den.

ls -l new_ file.txt

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

chmod u=rw,og=r new_file.txt

Att använda operatorn ”=” innebär att vi raderar alla befintliga behörigheter och sedan ställer in de angivna.

låt oss kontrollera den nya behörigheten för denna fil:

ls -l new_file.txt

De befintliga behörigheterna har tagits bort och de nya behörigheterna har ställts in, som vi förväntade oss.

Vad sägs om att lägga till en behörighet utan att ta bort de befintliga behörighetsinställningarna? Det kan vi också lätt göra.

Låt oss säga att vi har en skriptfil som vi har redigerat färdigt. Vi måste göra det körbart för alla användare. Dess nuvarande behörigheter ser ut så här:

ls -l new_script.sh

Vi kan lägga till exekveringsbehörigheten för alla med följande kommando:

chmod a+x new_script.sh

Om vi ​​tittar på behörigheterna kommer vi att se att exekveringsbehörigheten nu ges till alla och att de befintliga behörigheterna fortfarande finns på plats.

ls -l new_script.sh

Vi kunde ha uppnått samma sak utan ”a” i ”a+x”-satsen. Följande kommando skulle ha fungerat lika bra.

chmod +x new_script.sh

Ställa in behörigheter för flera filer

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

Dessa är filerna i den aktuella katalogen:

ls -l

Låt oss säga att vi vill ta bort skrivbehörigheterna för de ”andra” användarna från filer som har tillägget ”.page”. Vi kan göra detta med följande kommando:

chmod o-r *.page

Låt oss kolla vilken effekt det har haft:

ls -l

Som vi kan se har läsbehörigheten tagits bort från ”.page”-filerna för kategorin ”andra” användare. Inga andra filer har påverkats.

Om vi ​​hade velat inkludera filer i underkataloger kunde vi ha använt alternativet -R (rekursivt).

chmod -R o-r *.page

Numerisk stenografi

Ett annat sätt att använda chmod är att ge de behörigheter du vill ge till ägaren, gruppen och andra som ett tresiffrigt nummer. Siffran längst till vänster representerar behörigheterna för ägaren. Den mellersta siffran representerar behörigheterna för gruppmedlemmarna. Siffran längst till höger representerar behörigheterna för de andra.

Siffrorna du kan använda och vad de representerar listas här:

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

Var och en av de tre behörigheterna representeras av en av bitarna i den binära motsvarigheten till decimaltalet. Så 5, som är 101 i binärt, betyder läsa och köra. 2, som är 010 i binär, skulle betyda skrivbehörighet.

Med den här metoden ställer du in de behörigheter du vill ha; du lägger inte till dessa behörigheter till de befintliga behörigheterna. Så om läs- och skrivbehörigheter redan fanns på plats skulle du behöva använda 7 (111) för att lägga till exekveringsbehörigheter. Att använda 1 (001) skulle ta bort läs- och skrivbehörigheterna och lägga till exekveringsbehörigheten.

Låt oss lägga till läsbehörigheten till ”.page”-filerna för de andra användarkategorierna. Vi måste också ställa in användar- och gruppbehörigheter, så vi måste ställa in dem till vad de redan är. Dessa användare har redan läs- och skrivbehörigheter, vilket är 6 (110). Vi vill att de ”andra” ska ha läsning och behörigheter, så de måste ställas in på 4 (100).

Följande kommando kommer att utföra detta:

chmod 664 *.page

Detta ställer in de behörigheter vi kräver för användaren, gruppmedlemmar och andra till vad vi kräver. Användarna och gruppmedlemmarna får sina behörigheter återställda till vad de redan var, och de andra har läsbehörigheten återställd.

ls -l

Avancerade alternativ

Om du läs mansidan för chmod kommer du att se att det finns några avancerade alternativ relaterade till SETUID- och SETGID-bitarna och till den begränsade borttagningen eller ”sticky”-biten.

För 99 % av fallen du behöver chmod för, kommer alternativen som beskrivs här att täcka dig.