Bestandspermissies in Linux
1. Wat zijn bestandspermissies
Bestandspermissies geven aan wat een persoon, of groep personen, met een bestand mag.
Het begrip bestand moet hier ruim worden opgevat, want alles in Linux wordt behandeld als een bestand. Zo is ook een directory een bestand en ook een device-driver is een bestand. Zelfs hardware als een seriële poort of printerpoort wordt benaderd als een bestand. Dat betekent dat ook de toegang tot en daarmee het gebruik van veel hardware via bestandspermissies wordt geregeld. Iets om rekening mee te houden als je bijvoorbeeld niet kan schrijven naar een usb-stick.
Behalve de term bestandspermissies wordt ook vaak de term rechten gebruikt. Men spreekt dan van de rechten die iemand heeft op een bestand.
2. Notatie van bestandspermissies
Bestandspermissies worden getoond met het commando "ls". Een voorbeeld daarvan met de directory-listing die dat zou kunnen opleveren is:
ls -l
-rw-r--r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
Merk op dat er staat: "boudewijn zwoegers".
De eerste naam is de naam van de eigenaar van het bestand. Hier dus "boudewijn".
De tweede naam is de naam van een groep. Hier dus "zwoegers".
Een veel voorkomende combinatie is bijvoorbeeld "root root", of (waarschijnlijk minder voorkomend) "trambel users"...
Waar het hier echter om gaat, zijn de eerste 10 tekens: -rwxr-xr-x, waarbij ook de lege plaatsen, aangegeven met een streepje "-", belangrijk zijn.
Ze moeten min of meer los van elkaar, in 4 kleinere sets worden gelezen. De eerste set bestaat uit één teken en de daarna volgende drie sets bestaan elk uit drie tekens. Ons voorbeeld -rw-r--r-- moet in gedachten dus als volgt worden gesplitst:
| - | soort bestand, in dit geval een "gewoon" bestand |
rw- | rechten voor de eigenaar van het bestand (boudewijn) |
r-- | rechten voor de aangegeven groep (zwoegers) |
r-- | rechten voor alle overige gebruikers |
Het is belangrijk om te begrijpen dat ze per set moeten worden gelezen. De eerste set (rw-) heeft dus niets te maken met de tweede set (r--).
Uit bovenstaande gegevens kan onder andere het volgende worden afgeleid (verderop volgt meer uitleg hierover):
Wat zijn de groepsrechten: "r", of "lezen".
En over welke groep gaat het hier: "zwoegers".
Wat mogen de overige gebruikers: "r", of "lezen".
Wie is de eigenaar: "boudewijn".
En wat mag hij met dit bestand: "lezen en schrijven".
2.1 Het bestandstype op de eerste positie
Het eerste teken geeft aan om wat voor soort bestand het gaat. Dit zijn aanduidingen voor het systeem en je kan er dus niet uit opmaken of het een foto is of een spreadsheet.
ls -l
drw-r--r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 duitsland
-rw-r--r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 bestemmingen.ods
De meeste bestanden hebben één van de aanduidingen uit het voorbeeld hierboven:
d = directory, dus in dit geval is "duitsland" een subdirectory van de actieve directory.
- = bestand, een gewoon bestand, zonder speciale betekenis.
Verder kan je nog tegenkomen:
b = block device, een apparaat waar data in blokken wordt verwerkt, bijvoorbeeld een harde schijf.
c = character device, een apparaat waar data karakter na karakter wordt verwerkt, bijvoorbeeld de seriële poort.
l = link, een verwijzing naar een ander bestand.
2.2 Drie sets met permissies
Zoals hierboven al aangegeven volgen na de bestandssoort drie gelijksoortige sets, met elk drie tekens, waarmee de rechten worden aangegeven voor:
- user (eigenaar)
- group (groep)
- others (overigen)
De Engelse aanduidingen worden hier getoond omdat de eerste letters, respectievelijk u, g en o, belangrijk zijn bij het wijzigen van rechten.
Merk op dat eigenaar niet wordt vertaald met owner, kennelijk omdat de beginletter "o" al wordt gebruikt bij "others". Onthoud dus: user, group, others en maak niet de fout te denken dat "o" staat voor owner.
Elk groepje bestaat uit de volgende drie letters in de aangegeven volgorde: rwx. Als een recht niet van toepassing is, staat er op die plaats een streepje "-".
- r = read, recht om het bestand te openen en te lezen,
- w = write, recht om het bestand te schrijven, verwijderen, cre�en,
- x = execute, recht om het bestand uit te voeren (een programma, of script uitvoeren, of de directory te activeren)
Het aangegeven recht geldt voor de gebruiker, of groep gebruikers, die bij de set hoort waar het teken in voorkomt. Voor ons voorbeeld betekent dat:
1e set = rw- hoort bij "boudewijn", dus die mag alles.
2e set = r-- hoort bij "zwoegers", dus iedereen die tot de groep "zwoegers" behoort, mag het bestand lezen en uitvoeren.
3e set = r-- hoort bij alle overige gebruikers, die bij het bestand kunnen komen.
Let hierboven op de tekst: "die bij het bestand kunnen komen". Het kan namelijk best zo zijn dat de toegang tot de directory waar dit bestand staat, is geblokkeerd voor "overige gebruikers". Het maakt dan niet uit hoe de rechten op het bestand staan, want ze kunnen er toch niet bij.
Natuurlijk geldt dat ook voor de groep "zwoegers". Het zou best kunnen dat ze helemaal niet in deze directory kunnen komen.
Je controleert dat door de rechten in de bovenliggende directory te bekijken:
cd ..
ls -l
cd -
In het voorbeeld hierboven gaan we naar de bovenliggende directory, we bekijken daar de directorylisting en vervolgens gaan we weer terug naar de directory waar we vandaan kwamen.
Een snellere methode, waarbij je niet 2x van directory hoeft te wisselen:
ls -l ..
Je vraagt hiermee de rechten op van de bovenliggende directory (die wordt aangegeven met "..").
In de filelisting wordt een recht dat niet is toegewezen, aangegeven met een streepje "-". De volgorde is dus altijd "rwx", of "r-x", of "--x", maar bijvoorbeeld nooit "rx-".
3. Rechten wijzigen
Het wijzigen van bestandspermissies gebeurt met het commando chmod. Echter, om permissies te kunnen wijzigen, moet je zelf schrijfrechten op het bestand hebben.
Het commando chmod kan op twee manieren worden gebruikt. Het verschil is dat de ene manier met cijfers werkt en de andere met letters. De laatste methode is het makkelijkst en staat hieronder beschreven.
We gebruiken in de komende voorbeelden weer het oorspronkelijke bestand:
ls -l
-rw-r--r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
3.1 Rechten toekennen
Stel dat we de groep "zwoegers" schrijfrechten willen geven. We gebruiken chmod dan als volgt:
chmod g+w eenbestand
Let op de spaties die, zoals altijd, tussen het commando en de opties staan. De eerste optie is "g+w" en betekent:
- g wijst op "group", want we willen de rechten van de groep wijzigen.
- + wil zeggen dat we een recht gaan toevoegen
- w betekent "write", het recht om te schrijven.
De tweede optie is "eenbestand" en is gewoon de bestandsnaam.
In gewoon Nederlands staat er:
Aan de aangegeven groep (in dit geval "zwoegers"), willen we schrijfrechten toekennen op het bestand "eenbestand".
Na uitvoering van dit commando kunnen we weer met ls -l zien wat het effect ervan is:
ls -l
-rw-rw-r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
De tweede set met permissies (3 tekens) is dus veranderd van "r--" in "rw-" en daarmee is aangetoond dat schrijfrechten zijn toegevoegd.
Als we iedereen schrijfrechten willen toekennen, dan hoeven we niet aan te geven over welke groep het gaat en kunnen we gewoon dit doen:
chmod +w eenbestand
Op de eerste positie staat niets en daardoor heeft de opdracht betrekking op zowel user, group als others.
Geldige aanduidingen op de eerste positie zijn u(ser), (g)roup, of o(thers):
chmod u+w eenbestand
chmod g+w eenbestand
chmod o+w eenbestand
3.2 Rechten intrekken
Stel, we willen de "zwoegers" het schrijfrecht weer ontnemen.
Heel simpel, want in het commando hoeven we alleen maar de "+" te veranderen in een "-".
chmod g-w eenbestand
Controleer weer met ls -l wat het effect is:
ls -l
-rw-r--r-- 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
3.3 Nog meer voorbeelden
Om rechten van de "user" (weet je nog: de eigenaar die wel owner is, maar user wordt genoemd...) te wijzigen doe je bijvoorbeeld:
chmod u-w eenbestand
Daarmee ontneem je de eigenaar van het bestand de schrijfrechten. Het is niet zo waarschijnlijk dat je dat ooit doet...
Rechten van "others" wijzig je bijvoorbeeld met:
chmod o+w eenbestand
Dit maakt het onmogelijk een foto te wijzigen of verwijderen:
chmod -w uniekefoto.jpg
Dit maakt het alleen voor overige gebruikers onmogelijk om de foto te wijzigen of verwijderen:
chmod o-w minderuniek.jpg
3.4 Het uitvoerbaar maken van een bestand
Wanneer je een script (een verzameling opdrachten) schrijft, of download, dan kan dat script aanvankelijk helemaal niets. Pas als je het script uitvoerbaar hebt gemaakt door het x-recht toe te voegen, kan het worden uitgevoerd.
Dit is één van de redenen dat virussen in de vorm van scripts geen kans hebben in Linux, want je moet ze expliciet uitvoerbaar maken. Dat gaat zo:
chmod +x eenbestand
Controleer dat deze opdracht het bestand uitvoerbaar heeft gemaakt voor alle gebruikers:
ls -l
-rwxr-xr-x 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
3.5 Uitgebreide betekenis van het x-recht (eXecute)
De betekenis van de "x" moet worden uitgelegd aan de hand van het type bestand.
Voor een normaal bestand betekent het dat het een uitvoerbaar bestand is, dus een script of een programma.
Voor een directory betekent het dat de gebruiker of groep waarin de "x" voorkomt, het recht heeft om de directory te openen:
ls -l
-rwxr-xr-x 1 boudewijn zwoegers 2 2006-09-12 20:04 eenbestand
drwxr-xr-- 1 boudewijn zwoegers 2 2006-09-12 20:04 eendirectory
Op de eerste uitgevoerde regel hierboven staat op de eerste positie een streepje "-", waarmee wordt aangegeven dat "eenbestand" een gewoon bestand is en geen directory of iets dergelijks. De "x" in de drie groepen geeft aan dat iedereen het bestand (script of programma) kan uitvoeren.
De tweede uitgevoerde regel heeft op de eerste positie een "d". Dat wil zeggen dat het een directory is. In dat geval betekent een "x" dat de directory kan worden geopend door de gebruiker of groep waarin deze "x" voorkomt.
In dit geval mogen alleen user "boudewijn" (rwx) en group "zwoegers" (r-x) dat. Alle overige gebruikers mogen dat niet, want in de laatste set permissies (r--) ontbreekt de "x".
4. Meer informatie
Op de commandline kan je meer informatie krijgen over het commando "ls" met:
man ls
Daarmee roep je de manpage van het commando op.
En natuurlijk vergeet je niet met Google naar meer informatie te zoeken...
rev. 8 / 2009-12-23
© 2006-2009 cybertux.nl / boudewijn gailliaert