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:
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 "-". 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: