6min

Tags in dit artikel

, ,

Rechten voor users, groups, dirs en programma’s

Belangrijke commands: ls, chmod, chown.


Een klein voorbeeldje: thuis heb je een computer, waar vijf verschillende personen op inloggen met elk hun eigen username. Nu wil je twee mappen aanmaken: een map met mediafiles (bijv. /shared), die beschikbaar moet zijn voor alle users en een map met prive-documenten, waar niemand toegang toe mag hebben (bijv. /private). Hoe werkt het rechtensysteem van Linux om dit voor elkaar te krijgen?

In Linux behoort elk bestand toe aan een gebruiker (owner) of een groep (group). Voor elk directory, bestand of programma kan bepaald worden welke rechten de owner, group en andere gebruikers hebben om ermee te werken. Daarin kan onderscheid gemaakt worden in lezen (read), schrijven (write, maar dat houdt dus ook in dat bestanden veranderd of verwijderd kunnen worden) en uitvoeren (execute). Hiermee is het gemakkelijk om bestanden in een systeem te delen of juist volledig af te schermen van anderen, behalve de user root of iemand met superuser-rechten.

Om een beter zicht hierop te krijgen maken we gebruik van het command ls (list):

PHP Code
1
2
$ls -al
drwxrwxr-x  2 demo share   4096 okt 10 14:17 share

Met dit commando wordt er een hele rij informatie gegeven, in dit geval over de map /share. We gaan deze informatie (voor zover relevant) ontleden, te beginnen met de woorden "demo" en "share": het gaat hier om de gebruiker "demo" en de groep "share". Dit is belangrijk om te weten om te kijken welke rechten zij hebben met de directory /share. Vervolgens kijken we naar de eerste reeks tekens:

PHP Code
1
drwxrwxr-x

Deze rij informatie kan opgesplitst worden in de volgende secties:

[a][bbb][ccc][ddd]

[a] Het eerste karakter geeft aan om wat voor bestand het gaat. In dit geval dus om een directory

[bbb] De drie volgende karakters geven aan welke rechten de eigenaar van de map heeft.

[ccc] De drie daarop volgende karakters geven aan welke rechten de groep van de map heeft.

[ddd] De laatste drie karakters geven weer welke rechten alle andere gebruikers met deze map hebben.

Met de bovenstaande reeks kan dus gezegd worden dat:
De owner (eigenaar) "demo" lees-, schrijf- en uitvoerrechten heeft in deze directory
De group (groep) "share" lees-, schrijf- en uitvoerrechten heeft in deze directory
De other: alle andere gebruikers alleen lees- en uitvoerrechten hebben in deze directory.

Met andere woorden: voor een map, die toegang moet geven aan andere gebruikers, voldoet deze map al prima. Dit kunnen we nu verder aanpassen aan alles wat we maar kunnen bedenken:
Wij willen bijvoorbeeld de rechten van de groep en de overige gebruikers veranderen: de gedeelde map mag alleen maar gelezen worden door de groep en de andere gebruikers hebben totaal geen rechten op lezen, schrijven of uitvoeren.
Dit kun je doen met het command chmod. Wellicht is dit al bekend, omdat dit ook bij FTP gebruikt wordt om de rechten van een map aan te passen. Om dit command te gebruiken moet je root of superuser rechten hebben.
Je kunt dit programma op verschillende manieren toepassen, maar de meest gebruikte methode staat hieronder beschrijven. Een voorbeeld van een command is #chmod 775 <directory>
De drie getallen staan voor het inmiddels bekende drietal:
  • user / owner
  • group
  • others
Het getal is de waarde, die aangeeft welke rechten een owner, group of anderen hebben:
4 = read
2 = write
1 = execute


Tel r, w en x bij elkaar op, dan zie je dat er een maximum van 7 te geven is aan "rechten". Als we het command #chmod 740 <directory> zouden geven aan de map /share, zouden de rechten als volgt verdeeld zijn:

owner: rwx. Met andere woorden: de user "demo" heeft alle rechten op de map /share
group: r. De users in de groep "share" heeft leesrechten op de map /share.
other: -. Alle andere gebruikers hebben geen rechten.
Wanneer we dit controleren met ls -l, dan zien we het volgende:

PHP Code
1
drwxr----- 2 demo share 4096 okt 10 14:17 share

De map /share is nu een gedeelde map, waarin de user "demo" alles mag, terwijl de users in de groep "share" deze map alleen mogen lezen. Alle andere groepen en users mogen niets met deze map doen.
Met het bovenstaande laat het zich raden hoe we de map /private moeten beschermen van gluurders van buitenaf; er moet voor gezorgd worden dat alleen de user (in ons geval ‘demo’) volledige toegang heeft tot de map en de rest niet:
#chmod 700 <directory> zorgt hiervoor.

Wanneer je niet alleen de map, maar ook alles wat in de map staat wilt wijzigen, dan voeg je de flag ‘-R’ (let op: een hoofdletter R) toe aan het command, bijvoorbeeld #chmod -R 500 <directory>.
In de voorbeelden hierboven gaat het slechts om een map, maar op gelijke wijze kun je ook programma’s en documenten aanpassen.

Is de bovengenoemde wijze (de zogenaamde octale notatie) te lastig, dan is het altijd ook mogelijk om met symbolen te werken. Hieronder zie je een overzicht van de meest gebruikte symbolen:

Voor wie?Welke permissies? Wat te doen?
u = user/owner
g = group
o = others
a = all
r = read
w = write
x = execute
+ = permissie toevoegen
– = permissie afnemen
= = alleen permissies instellen, die aangeven zijn (met uitzondering van de standaard ingestelde permissies).

Het gebruik is dan op de volgende wijze:
PHP Code
1
$chmod 'ugo+r' demo.txt
Met dit commando voeg je voor de ‘owner’, de ‘group’ en de ‘users’ leesrechten toe voor het bestand demo.txt.

Andere veelgebruikte voorbeelden:


– Volledige toegang voor iedereen:

PHP Code
1
2
#chmod 777 <bestandsnaam> 
#chmod 'a+rwx' <bestandsnaam>

– Volledige toegang voor de eigenaar en groep, maar anderen kunnen alleen lezen en uitvoeren:

PHP Code
1
2
#chmod 775 <bestandsnaam> 
#chmod 'ug=rwx,o=rx' <bestandsnaam>

– Volledige toegang voor de eigenaar, maar de groep en anderen kunnen alleen lezen en uitvoeren:

PHP Code
1
2
#chmod 755 <directory> 
#chmod 'u=rwx,go=rx' <directory>

– Geen toegang voor groepen en anderen. De eigenaar mag alleen lezen en uitvoeren om te voorkomen dat er per ongeluk documenten gewijzigd of verwijderd worden:

PHP Code
1
2
#chmod 500 <directory>
#chmod 'u=rx,go-rwx' <directory>

– Alleen toegang tot lezen en schrijven voor de eigenaar en de groep, maar geen toegang voor anderen:

PHP Code
1
2
#chmod 660 <bestandsnaam>
#chmod 'ug=rw,o-rwx' <bestandsnaam>

Let er op dat in de bovenstaande voorbeelden een onderscheid wordt gemaakt tussen directories en bestanden. Men moet bijvoorbeeld voorzichtig omgaan met #chmod 777 bij een directory; wanneer deze map zodanig is ingesteld, kan het al snel misbruikt worden als een opendir. Voor een bestand is het alleen nodig, wanneer echt alle gebruikers er mee mogen werken.

Veranderen van owner en group


Met het voorgaande, mag het duidelijk zijn dat het belangrijk is om goed te overwegen welke user en group de eigenaren zijn van de directories, bestanden en programma’s. Een van de meest belangrijke toepassingen voor dit systeem is bijvoorbeeld het installeren van MySQL, Apache of FTP. Deze services staan normaal gesproken open voor iedereen in een netwerk of zelf voor het hele internet. Er is maar weinig verbeeldingskracht nodig om te begrijpen wat er gebeurt, wanneer je deze services als root hebt geïnstalleerd en vervolgens je systeem op deze services gehacked worden. Kwaadwillenden kunnen dan namelijk code op je systeem uitvoeren als root. Dat moet dus te allen tijde vermeden worden.
Vandaar dat er bij veel handleidingen van handmatig geïnstalleerde services altijd een gedeelte is opgenomen, waarin staat beschreven waarom je voor die service een aparte user en group moet aanmaken.

Ook in je eigen systeem is het mogelijk om deze wijzigingen door te voeren.
Het command chown is hiervoor van belang. Zoals de naam al doet vermoeden, is het met dit command mogelijk om de owner te wijzigingen. Tegelijkertijd is het ook mogelijk om de group te wijzigen. Een paar voorbeelden:

PHP Code
1
#chown root <directory>

Dit command verandert alleen de owner van een directory (in dit geval wordt de owner veranderd naar ‘root’).

PHP Code
1
#chown demo:share <directory> 

Dit command verandert de owner en de group van een directory (in dit geval wordt de owner ‘demo’ en de group ‘share’).

PHP Code
1
#chown :root <directory>

Dit command verandert de group van een directory (in dit geval wordt de group naar ‘root’ veranderd).

Ook hier geldt dat in plaats van een directory (<directory&gt;) ook een bestandsnaam ingevuld kan worden. In het geval van een directory is de flag ‘-R’ (recursive) gemakkelijk om de gehele inhoud van die map te veranderen naar een andere owner of group.