Gå til innhold

Forklaring: Hva er CHMOD? Hvorfor? Når?


Anbefalte innlegg

Som webhotelleverandør ser jeg at CHMOD er noe som er misforstått så til de grader og blir brukt som en feilsøkingsmetode. Resultatet av dette er et kunden gir andre tilgang til sine filer med fulle rettigher.

 

Hva er CHMOD?

CHMOD er en forkortelse for Change Mode, og er en kommando for å endre filrettigheter eller "file mode" for en spesifik fil eller katalog. For ettertiden vil jeg kalle det som mange kaller "CHMOD-verdi" for rettighetsverdi. Rettighetsverdien kan bli vist i flere forskjellige varianter. Den mest vanlige for PHP-programmerere er som tresifret oktalverdi, altså f.eks 755. Jeg går ikke inn på den firesifrede versjonen siden den ikke gir noen mening innen PHP.

 

Hva defineres av rettighetsverdien?

Verdien er delt opp i tre deler, som hver representeres av et oktalt siffer (et oktalt siffer er et tall mellom 0 - 7, ref. det oktale tallsystemet/8-tallsystemet).

 

Det første sifferet definerer rettighetene til brukerkontoen som eier filen eller katalogen.

 

Det andre siffreret definerer rettighetene til gruppen som eier filen.

 

Det tredje sifferet definerer rettighetene til alle de andre.

 

Heretter vil jeg representere hver av disse som en "brukergruppe". Jeg kommer tilbake til hva tallet forteller.

 

Hvem er eier av filen, og hva er gruppe?

Når du oppretter en fil via din FTP-konto blir din brukerkonto, samt gruppen du som standard er medlem av eier av filen. Din konto representeres av ditt brukernavn.

 

Gruppen som også blir eier av filen er i de fleste tilfeller også deg selv, og representeres av en grupep med samme navn som ditt brukernavn. Du er det eneste medlem i denne gruppen, så somoftest kan du se helt bortfra gruppeverdien. Noen webhoteller opererer med en gruppe for alle kontoer i systemet. Dvs at de rettighetene som du setter på gruppeverdien gir rettighetene ALLE kontoer på serveren får. I alle tilfeller anbefales det å la denne være 0 eller ingen tilgang.

 

Hva representerer tallene?

Hvert siffer definerer rettighetene til de tidligere nevnte brukergruppene, henholdsvis eier, gruppen og alle andre.

 

Hvert siffer er en verdi som blir sammensatt ved addisjon av følgende verdier:

 

1 => Gir execute-rettigheter. Dette brukes på script (ikke PHP-script) som skal kunne kjøres. Denne er viktig ved kjøring av f.eks CGI-script. De som skal kunne kjøre scriptet må ha denne rettigheten. Denne definerer også rettighet til å åpne katalogen dersom elementet rettigheten er satt på er en katalog. De som ikke har execute-rettigheter til en katalog får ikke i det hele tatt lov til å åpne den, eller åpne eller lese innholdet i noen av underkatalogene/-filene.

 

2 => Gir skriverettigheter. Dersom dette settes på en fil betyr det at den aktuelle brukergruppen kan skrive til filen, endre den, eller slette den. I det hele tatt lov til å gjøre alt som innebærer å endre den. Dersom det settes på en katalog betyr det at brukergruppen kan opprette filer i katalogen, men ikke nødvendigvis endre på innhold som er i den fra før, siden de elementene vil ha egne rettighetsverdier.

 

4 => Gir leserettigheter. Dersom dette settes på en fil får brukergruppen rettigheter til å lese innholdet i filen. Dersom det settes på en katalog gis brukergruppen tilgang til å liste innholdet i katalogen. Dersom denne ikke settes på katalogen kan brukergruppen åpne den, men kan ikke liste innholdet i den.

 

Legger man sammen 1 + 2 + 4 får man 7, som er alle rettigheter. Følgende verdier kan elementetet settes til:

 

1 => Kun kjøretilgang.

2 => Kun skrivetilgang.

3 => Kjøretilgang og skrivetilgang.

4 => Kun lesetilgang.

5 => Lesetilgang og kjøretilgang

6 => Lesetilgang og skrivetilgang.

7 => Lesetilgang, skrivetilgang og kjøretilgang, altså alle rettigheter.

 

Som nevnt har alle brukergrupper sin egen verdi, altså vil 754 betyr at

1) Bruker/eier har alle rettigheter

2) Gruppen har kun lese og kjøretilgang.

3) Alle andre har kun lesetilgang.

 

Når skal CHMOD brukes?

Først og fremst: CHMOD er ikke en feilsøkingsmetode. Dvs. at det skal ikke bare testes forskjellige verdier dersom ting ikke fungerer som forventet.

 

Det første man er nødt til å vite er hvordan rettighetene er for den kjørende PHP-prosessen. Gamlere oppsett av PHP (kjent som mod_php4/mod_php5) gjør at brukeren kjøres under en egen bruker. Denne brukeren er typisk kalt "www-data", "nobody", "apache" osv. Felles for alle er at dette er ikke brukerens eget brukernavn. Dvs. at alle filprosesseringer mot brukerens egne filer går under brukergruppen alle brukere, altså det siste tallet i rettighetsverdien. Nyere oppsett baserer seg på at brukeren selv eier prosessen som kjører PHP, og da er det fileierens rettigheter som har noe å si.

 

For å finne ut av hvilken modus PHP kjøres i kan du bruke følgende metoder:

 

Last opp følgende fil, og CHMOD den til 644:

<?php
 if (!is_writeable($_SERVER['SCRIPT_FILENAME'])) {
echo "Server kjører mod_php. Du har ikke tilgang til PHP-prosessen. (modus 1)";
 } else {
echo "PHP kjører med samme rettigheter som din bruker (modus 2 eller 3)";
 }
?>

Svaret du får ut er ganske selvforklarende, men dersom du får siste svar, altså "PHP kjører med samme rettigheter som din bruker", så er det fortsatt to forskjellige oppsett. For å finne ut av dette CHMODer du filen til 400. Får du i det hele tatt kjørt filen, så kjører serveren modus 3 (forklarer senere hva det betyr). Får du ikke kjørt filen kjører serveren modus 2 (mest sansynlig).

 

Da skal du vite om din server kjører modus 1, 2 eller 3, så er det forklaringen hva det betyr.

 

Modus 1: PHP har rettighetene til "alle". Dette er et ganske usikkert oppsett. Det betyr at det er siste verdien i rettighetsverdien som bestemmer hvilke tilgangsrettigheter PHP får på filen du prøver aksessere. Det betyr at filer som PHP skal skrive til må være CHMODet til eksempelvis 604, og kataloger PHP skal opprette filer i skal ha 705 I noen tilfeller dersom det ikke fungerer setter du midterste verdien til det samme som den siste verdien, eksempelvis 644 og 755. Dette gjelder dersom PHP-prosessen kjører med samme gruppeeier som filen.

 

Modus 2: PHP har samme rettigheter som brukerkontoen din har. Dette er et relativt sikkert oppsett i motsetning til forrige. Det betyr at fler som PHP skal skrive til skal ha rettigheter 600 og kataloger 700. I denne modusen kan du legge dine MySQL-passord i en egen fil som du CHMODer til 600 for ekstra sikkerhet.

 

Modus 3: Sikreste oppsettet. CHMOD alt som har med PHP å gjøre, inkludert scriptene selv til 600, og katalogene de liger i til 700.

 

I alle tilfeller skal ALDRI siste verdien på et PHP-script eller katalogen et PHP-script ligge i inneholde skriverettighet (2). PHP-script skal i modus 1 og 2 ha 604, eller i noen tilfeller på modus 1; 644.

Lenke til kommentar
Videoannonse
Annonse

Når en katalog CHMODes til 777, så betyr det i praksis følgende:

- Alle kan åpne katalogen.

- Alle kan liste innholdet i katalogen.

- Alle kan opprette filer i katalogen.

 

Det definerer ikke rettighetene til innholdet i katalogen. Innholdet i katalogen defineres av egne verdier.

 

Hvis man ser på "modus 1" hvor PHP kjøres under en egen bruker på serveren, så dersom man skal opprette filer i en katalog med PHP, så chmoder man den til 777. Det som skjer da er at man gir PHP-brukeren, siden den er inkludert i "alle", tilgang til å opprette filer i katalogen. Når en prosess oppretter filer i katalogen, så blir eieren av prosessen også eier av filene prosessen oppretter (unntak: setuid og setgid, men det har jeg ikke dekt i denne forklaringen, da det er irrelevant, se helt bortfra det). Så dersom PHP kjørerer under brukeren www-data, så blir filene PHP opprettet eid av www-data. Standardrettighetene (konfigurerbart via "umask") til filer opprettet av PHP er 644, og for kataloger 755. Når www-data eier filen, så er det rettighetene til eieren som definerer hvorvidt PHP kan endre filen, og siden rettighetene til eier er 6 (les + skriv), og PHP kjører som eieren av filen, så får også PHP rettigheter til å redigere på filene.

Endret av jonepet
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...