Udviklere

Sådan læser du chmod-rettigheder (oktal og symbolsk forklaret)

8 min læsning

Chmod 755 betyder, at filens ejer må læse, skrive og eksekvere den, mens gruppen og alle andre kun må læse og eksekvere, ikke ændre den. Hvert af de tre cifre i et chmod-tal dækker en brugerklasse, ejer, gruppe, andre, og hvert ciffer er bygget op af tre bits: læse, skrive, eksekvere.

Sådan opbygges ét oktal-ciffer

Der findes tre rettighedsbits for hver brugerklasse: læse (værdi 4), skrive (værdi 2), eksekvere (værdi 1). Læg de bits sammen, der er slået til, og du får klassens ciffer, 0 til 7.

  • 4 = kun læse
  • 6 = læse + skrive (4 + 2)
  • 5 = læse + eksekvere (4 + 1)
  • 7 = læse + skrive + eksekvere (4 + 2 + 1)
  • 0 = intet

En chmod-kommando angiver tre af disse cifre i træk, altid i samme rækkefølge: ejer, gruppe, andre. chmod 750 fil opdeles i 7 til ejeren (læse, skrive, eksekvere), 5 til gruppen (læse, eksekvere), 0 til andre (intet). Ingen udenadslære nødvendig, læg bare de bits sammen, der gælder for hver klasse.

Eksempler du støder på i praksis

KommandoOktalSymbolskTypisk brug
chmod 600 fil600rw-------SSH-privatnøgle (id_rsa), .env-fil / hemmeligheder
chmod 644 fil644rw-r—r—Almindelig fil (HTML, konfiguration, log), ejeren redigerer, alle læser
chmod 700 mappe700rwx------Privat mappe kun ejeren kan gå ind i
chmod 755 script.sh755rwxr-xr-xOffentligt script eller mappe, ejeren redigerer, alle kan køre/gå ind i
chmod 775 mappe775rwxrwxr-xDelt team-mappe, ejer og gruppe kan skrive
chmod 777 fil777rwxrwxrwxAlle kan læse, skrive, eksekvere, undgå det, sikkerhedsrisiko

Regn selv efter på en hvilken som helst række: 755 giver ejeren 4+2+1 = 7 (rwx), gruppen 4+0+1 = 5 (r-x), andre 4+0+1 = 5 (r-x), hvilket giver præcis rwxr-xr-x. Mønstret gælder for hver eneste række i tabellen.

Et detalje, som mange snubler over ved mapper specifikt: en mappe kræver sin eksekverings-bit for at man kan gå ind i den med cd, og sin læse-bit for at man kan liste indholdet med ls. En mappe, der er læsbar men ikke eksekverbar (fx 644 på en mappe), lader nogle værktøjer vise filnavnene indeni, men du kan hverken gå ind med cd eller køre stat på filerne, for det er netop eksekverings-bitten, der styrer, om man kan traversere en mappe. Læse og eksekvere har med andre ord forskellige roller på en mappe end på en almindelig fil.

To forskellige ting, der begge kaldes “symbolsk”

Her er det, mange forklaringer roder sammen, for chmod har to helt forskellige ting, som begge kaldes “symbolsk”:

Visningsstrengen fra ls -l, som rwxr-xr-x. Det er det, du ser, når du lister filer, og det er et øjebliksbillede af de aktuelle rettigheder, ti tegn: et filtype-flag efterfulgt af tre grupper af rwx for ejer, gruppe, andre. Det er en beskrivelse, ikke en kommando.

Chmods egen symbolske tilstand, som bruges til at ændre rettigheder i forhold til dem, der allerede er sat. I stedet for at angive hele det tre-cifrede tal, målretter du en klasse og en bit:

  • chmod u+x file.sh tilføjer eksekvering for ejeren (user) alene, gruppe og andre rører den ikke
  • chmod go-w fil fjerner skriverettighed fra gruppe og andre, ejeren beholder sin
  • chmod a+r fil gør filen læsbar for hele verden (all klasser)

Forskellen har betydning i praksis: oktal-tilstand (chmod 755) sætter altid en absolut, komplet rettighedstilstand og overskriver, hvad der lå der før. Symbolsk tilstand (chmod u+x) foretager en relativ justering af de rettigheder, der allerede findes, uden at røre resten. Brug symbolsk tilstand, når du vil vende én bit uden at skulle regne hele det tre-cifrede tal ud i hovedet.

Prøv med dine egne rettigheder

LæsSkrivKør
Ejer
Gruppe
Andre
Chmod-beregner
Gratis, ingen tilmelding, virker på alle enheder.
Åbn hele værktøjet

Hvorfor nye filer som standard bliver 644 og nye mapper 755

Ingen kører chmod på hver eneste fil, de opretter, alligevel ender nye filer næsten altid på 644 og nye mapper på 755. Det er umask, der virker i baggrunden, ikke tilfældigheder.

Nye filer starter fra en base på 666 (rw-rw-rw-, ingen eksekverings-bit som standard, af sikkerhedshensyn, man ønsker ikke, at hver ny fil pludselig kan eksekveres). Nye mapper starter fra 777 (rwxrwxrwx). Shellets umask-værdi trækkes derefter fra denne base. Standard-umask på de fleste Linux-systemer er 022, så:

  • 666 − 022 = 644 for en helt ny fil
  • 777 − 022 = 755 for en helt ny mappe

Det er hele mekanismen bag de to mest almindelige rettighedsværdier i tabellen ovenfor. Hvis dit system giver noget andet end 644 og 755 på nyoprettede filer, så tjek umask i dit shell, den er næsten helt sikkert sat til en ikke-standard værdi.

Almindelige fejl og sikkerhedsvinklen

chmod 777 er et advarselstegn, ikke en løsning. At sætte en fil eller mappe til 777 giver enhver bruger på systemet, også en angriber, der har fået blot det mindste fodfæste, ret til at læse, skrive og udskifte den. En usikker filupload kombineret med en 777-uploadmappe er en klassisk vej til, at en webapplikation ender som en webshell. Sikkerhedsscannere brugt i WordPress- og hosting-audits flager rutinemæssigt 777 som et kritisk fund med det samme. Løsningen er næsten altid 755 til eksekverbare filer og mapper, 644 til almindelige filer, og strammet yderligere til 750 eller 640, når der findes en betroet gruppe, der skal have skriveadgang, men ikke resten af verden.

SSH nægter at bruge en for åben privatnøgle. ssh-keygen opretter privatnøgler med 600 som standard, og OpenSSH håndhæver det aktivt: hvis din id_rsa ender med at være læsbar for gruppen eller for andre, nægter SSH at bruge den og skriver noget i retning af “UNPROTECTED PRIVATE KEY FILE!” sammen med “Permissions 0644 for ‘id_rsa’ are too open.” Det er ikke en kosmetisk advarsel, det er en hård spærring, og det er den mest almindelige grund til, at en SSH-nøgle “stopper med at virke” efter at være blevet kopieret mellem maskiner eller hentet fra en backup, for kopiering nulstiller ofte rettighederne til noget mere åbent end 600.

Ærlig afgrænsning: setuid, setgid og sticky bit

Chmod-beregneren ovenfor dækker det almindelige tre-cifrede sæt af ejer/gruppe/andre, som håndterer langt de fleste virkelige tilfælde. Det, den ikke modellerer, er et valgfrit fjerde, indledende ciffer til særlige rettighedsbits: setuid (4000), setgid (2000) og sticky bit (1000), kombineret i tilstande som chmod 4755 eller chmod 1777.

Kort fortalt: setuid kører en binærfil med dens ejers rettigheder frem for den kaldendes egne (det klassiske eksempel er /usr/bin/passwd, som har brug for forhøjede rettigheder til at opdatere systemets adgangskodefil), og sticky bit på en mappe, alle kan skrive til, som /tmp, forhindrer én bruger i at slette eller omdøbe filer, en anden bruger ejer der, selvom alle kan skrive til selve mappen.

Ofte stillede spørgsmål

Hvad betyder chmod 755? Ejeren får læse, skrive og eksekvere (7 = 4+2+1). Gruppen og alle andre får kun læse og eksekvere, ikke skrive (5 = 4+0+1 hver). I symbolsk form er det rwxr-xr-x, standardrettigheden for et script eller en offentlig mappe: ejeren kan redigere det, alle andre kan køre det eller gå ind i det.

Hvad er forskellen på chmod 644 og 755? 644 fjerner eksekverings-bitten helt (rw-r—r—), hvilket er korrekt for almindelige filer som HTML, konfigurationsfiler eller logs, der aldrig skal køre som et program. 755 beholder eksekvering for hver klasse (rwxr-xr-x), hvilket er, hvad et script eller en mappe har brug for, da mapper kræver eksekvering for overhovedet at kunne åbnes. Brug 644 til data, 755 til alt, der skal køre eller traverseres.

Hvorfor betyder chmod 600 noget for SSH-nøgler? Fordi OpenSSH tjekker rettighedsbits på en privatnøgle, før den bruges, og nægter at fortsætte, hvis nøglen kan læses af gruppen eller af andre. 600 (rw-------) betyder, at kun filens ejer kan læse eller skrive den, hvilket er præcis, hvad en privatnøgle skal have: ingen andre på systemet bør overhovedet kunne se dens indhold.

Er chmod 777 nogensinde det rigtige svar? Stort set aldrig i produktion. Den giver fuld læse-, skrive- og eksekveringsret til enhver bruger på systemet, hvilket er en almindelig grundårsag til, at filuploads bliver overskrevet med ondsindet kode. Hvis noget tilsyneladende kræver 777 for at virke, ligger det egentlige problem som regel i en fejlmatchet fil-ejer eller -gruppe, som kan rettes med chown, ikke en grund til at åbne rettighederne for alle.

Hvad er forskellen på rwxr-xr-x og chmod u+x? rwxr-xr-x er visningsstrengen fra ls -l, et øjebliksbillede af den nuværende, komplette rettighedstilstand. chmod u+x er en kommando, der bruger chmods symbolske tilstand til at lave en relativ ændring, den tilføjer eksekvering til ejeren uden at røre resten. Den ene beskriver, hvor rettighederne står lige nu; den anden er én måde at ændre dem på.

ChmodUnix-rettighederLinuxFilrettigheder
Chmod-beregner
Prøv det nu selv med hele værktøjet.
Prøv nu