Chmod

Uit Linuxdocs.nl
Ga naar: navigatie, zoeken

Rechten toekennen met chmod en chown

Door: Michaell Bakker
Aangevuld door: Laurens Vonder
versie: 10-09-2009, 10-04-2010
Website: www.linuxdocs.nl


Inleiding:

Zoals ieder besturingssysteem dat gericht is op Multi-user. Is het noodzakelijk voor de beveiliging dat je rechten kan toekennen aan iedere gebruiker en/of groep.
Zo kun je de handelingen van gebruikers of zelfs van complete groepen gebruikers beperken tot bepaalde acties per map of bestand.

Zo kunnen we voorkomen dat de ene gebruiker mag lezen en schijven van 1 bepaalde map, maar dat de andere map alleen gelezen mag worden of zelf helemaal niet geopend mag worden.

Deze rechten zijn cruciaal en dan met name belangrijk voor servers.

Rechten die je zult opgeven via de manier van deze handleiding zullen boven alle andere machtigingen gaan die eventueel via andere programma's, zoals samba.
Dit betekend, dat als je b.v. in samba opgeeft dat een gebruiken mag schijven vaan een bepaalde map op de server, terwijl de rechten op het bestandssysteem dit niet toestaan, de opdracht toch geweigerd zal worden.

Definities:

Onder Linux kennen we een aantal basis kenmerken die van belang zijn bij beveiliging:

  • Gebruikers: Iedereen die toegang wilt tot een server heeft een gebruikers account nodig. Deze word meestal door de beheerder van de server voor je verzonnen. Meestal krijg je er ook een wachtwoord bij.
  • Groepen: Een groep is zoals de naam het feitelijk al weggeeft een verzameling van gebruikers. Elke gebruiker moet in een groep zitten en een groep zal minimaal 1 gebruiker bevatten. We gebruiken groepen om eenvoudig en snel rechten toe te kunnen kennen aan een x aantal gebruikers.
  • Server: Dit is de computer zelf. Ook de computer speelt een rol in beveiliging. Zo kun je gebruikers afkomstig van een ander netwerk/computer ook aparte machtigingen geven. Deze accounts zijn te herkennen aan het "at" teken ( @ ). Een voorbeeld is: pietje@server2.michaell.lan. Dit geeft aan dat gebruiker pietje afkomstig is van de computer server2.michaell.lan. Deze gebruikers zul je echter bij kleine netwerken niet vaak aantreffen en zal ik daarom in deze handleiding niet op in gaan.

Gebruikers en groepen aanmaken:

Een gebruiker onder Linux aanmaken is zeer eenvoudig. Het enigste wat je nodig hebt is een Terminal venster.
Om een gebruiker aan te maken geef je als root de opdracht:

[root@localhost ~]# useradd gebruiker1
[root@localhost ~]# passwd gebruiker1
Password: _

Standaard komt elke gebruiker die je aanmaakt in een groep terecht met de naam van de gebruiker.
In bovenstaand voorbeeld word er voor gebruiker1 de groep gebruiker1 gemaakt waar deze gebruiker nu deel van uitmaakt.

Ook kunnen we zelf groepen maken. Dit gaat als volgt:

[root@localhost ~]# groupadd klanten

Bovenstaand voorbeeld zal nu de lege groep klanten aanmaken.
Om een nieuwe gebruiker aan te maken en in deze groep te zetten geven we de opdracht:

[root@localhost ~]# useradd -g klanten gebruiker1
[root@localhost ~]# passwd gebruiker1
Password: _

In bovenstaand voorbeeld maken we de gebruiker gebruiker1 aan en zetten we deze in de groep klanten.

Rechten toekennen met de opdrachten chown en chmod:

In bovenstaand voorbeeld hebben we een gebruiker aangemaakt en een groep.
Standaard kan deze gebruiker alleen schijven in zijn thuismap /home/gebruiker1. Voor de overige delen van het systeem kan de gebruiker alleen lezen en tot sommige bestanden en mappen krijgt hij geen eens toegang

Dit standaard UNIX gedrag is vrij veilig, maar het kan zijn dat we een speciale map hebben gemaakt buiten de thuismap van de gebruikers waar gebruikers gezamenlijk toegang tot moeten hebben, zodat deze bij hun werk kunnen komen en bestanden kunnen uitwisselen.
Voor dit doel hebben we 2 opdrachten nodig:

  • chmod: Hiermee kunnen we permissies opgeven aan bestanden en mappen.
  • chown: Hiermee kunnen we bestanden en mappen van eigenaar veranderen.

Let op: het is niet mogelijk om rechten toe te kennen op FATx partities. Het FAT bestandssysteem heeft namelijk geen ondersteuning hiervoor.

In dit voorbeeld gaan we in de / een map maken genaamd werkmap. Hierin maken we 2 andere mappen genaamd: gebruiker1 en gebruiker2.
De bedoeling is de map werkmap toegankelijk te maken met lees en schijf rechten en de map gebruiker1 alleen te beschrijven is door gebruiker1 en de map gebruiker2 alleen door gebruiker2 te beschrijven is.

Tevens maken we nog een mapje aan sjabloon, waar beide gebruikers alleen van kunnen lezen.

Dit gaat als volgt:

(1: Eerst maken we de mappen aan als root:

[root@localhost ~]# mkdir /werkmap
[root@localhost ~]# mkdir /werkmap/gebruiker1
[root@localhost ~]# mkdir /werkmap/gebruiker2
[root@localhost ~]# mkdir /werkmap/sjabloon

(2: Vervolgens veranderen we de gebruikerx mappen van eigenaar en groep. Omdat ze door root zijn aangemaakt zijn de mappen nu allemaal standaard van root.
Dit gaat zo:

[root@localhost ~]# chown gebruiker1:klanten /werkmap/gebruiker1
[root@localhost ~]# chown gebruiker2:klanten /werkmap/gebruiker2

(3: De overige mappen laten we de eigenaar root staan, maar we geven deze mappen wel aan de groep klanten.

[root@localhost ~]# chgrp klanten /werkmap
[root@localhost ~]# chgrp klanten /werkmap/sjabloon

(4: Vervolgens geven we iedere gebruiker in de groep klanten volledig beheer over de map /werkmap. De rest mag alleen lezen:

[root@localhost ~]# chmod 474 /werkmap

(5: Vervolgens hebben de gebruikers hun eigen mappen waar alleen de bijbehorende gebruiker in kan schijven. De andere mag er alleen uit lezen:

[root@localhost ~]# chmod 744 /werkmap/gebruiker1
[root@localhost ~]# chmod 744 /werkmap/gebruiker1

(6: En vervolgens mag iedereen alleen lezen uit de map sjabloon:

[root@localhost ~]# chmod 444 /werkmap/sjabloon

Bovenstaande voorbeelden zijn ook met een stuk minder opdrachten uit te voeren, maar het gaat hier om de oefening.

Nu kan ik me best voorstellen dat je de chmod xyz niet volledig snapt. Hier gaat ons volgende hoofdstukje over:

Alle chmod permissies op een rijtje:

De chmod opdracht bestaat uit de volgende syntaxis:

chmod 1234 <opties> map-of-bestand

Dit komt op het volgende neer:

  1. Dit zijn speciale machtigingen. Zo kunnen we bijvoorbeeld tegen een bestand zeggen dat we er wel naar mogen schijven, maar niet mogen wissen. over het algemeen geven we het eerste cijfer niet op.
  2. Dit betreft de eigenaar het betreffende bestand of map.
  3. Dit betreft de groep van het betreffende bestand of map.
  4. Dit betreft alle overige gebruikers en groepen.

De volgende tabel verteld wat alle chmod functies inhouden:

chmod | Gebruiker mag:        | Groep mag:            | De rest mag:
========================================================================
000   | toegang geweigerd     | Toegang geweigerd     | Toegang geweigerd
100   | Alleen uitvoeren      | Toegang geweigerd     | Toegang geweigerd
200   | Alleen schijven       | Toegang geweigerd     | Toegang geweigerd
300   | Schijven en uitvoeren | Toegang geweigerd     | Toegang geweigerd
400   | Alleen lezen          | Toegang geweigerd     | Toegang geweigerd
500   | Lezen en uitvoeren    | Toegang geweigerd     | Toegang geweigerd
600   | Lezen en schijven     | Toegang geweigerd     | Toegang geweigerd
700   | Volledig beheer       | Toegang geweigerd     | Toegang geweigerd
010   | Toegang geweigerd     | Alleen uitvoeren      | Toegang geweigerd
020   | Toegang geweigerd     | Alleen schijven       | Toegang geweigerd
030   | Toegang geweigerd     | Schrijven en uitvoeren| Toegang geweigerd
040   | Toegang geweigerd     | Alleen lezen          | Toegang geweigerd
050   | Toegang geweigerd     | Lezen en uitvoeren    | Toegang geweigerd
060   | Toegang geweigerd     | Lezen en schijven     | Toegang geweigerd
070   | Toegang geweigerd     | Volledig beheer       | Toegang geweigerd
001   | Toegang geweigerd     | Toegang geweigerd     | Alleen uitvoeren
002   | Toegang geweigerd     | Toegang geweigerd     | Alleen schijven
003   | Toegang geweigerd     | Toegang geweigerd     | Schijven en uitvoeren
004   | Toegang geweigerd     | Toegang geweigerd     | Alleen lezen
005   | Toegang geweigerd     | Toegang geweigerd     | Lezen en uitvoeren
006   | Toegang geweigerd     | Toegang geweigerd     | Lezen en schijven
007   | Toegang geweigerd     | Toegang geweigerd     | Volledig beheer

Volledig beheer = lezen, schijven en uitvoeren.
De gebruiker root is almachtig. Deze kun je niet beperken met chmod.

Test: Als ik chmod 754 /mnt/hd1 geeft. Welke machtigingen geef ik dan?

Gedeelde mappen en bestanden met een bepaalde gebruikersgroep

Bij gewone bestanden geven we een octaal bedrag in dat de rechten bepaalt zoals hierboven beschreven. Willen we nu dat bestanden op een externe schijf, usb stick, etc. bij het beschrijven de zelfde gebruikersnaam en groepsnaam behouden als de naam van die groep is en dat nieuwe bestanden ook deze identiteit overnemen zonder dat anderen die die gedeelde map ook gebruiken geen toegang hebben? Dat kan als volgt: we voeren een vierde getal toe bij het chmodden:

Volledig lees-en-schrijftoegang van alle bestanden voor alle gebruikers binnen deze gebruikersgroep:

chmod 6770 mapnaam -R

Volledig lees-en-schrijftoegang van alle nieuwe bestanden en mappen, lees-toegang voor alle bestanden van andere gebruikers binnen deze gebruikersgroep:

chmod 2770 mapnaam -R

Hierbij betekent in de vierde digit 4=SetUID, 2=SetGID, 1=Sticky waarbij net als bij de andere octale rechtentoekenning de getallen bij elkaar opgeteld dienen te worden.

Recursief chmodden

Soms is het handig de bestanden enkel lees/schrijfbaar te hebben, maar de mappen wel benaderbaar (uitvoerbaar). Dit kan gedaan worden door onderstaande actie:

chmod 6770 mapnaam
find $DIRNAME -type f -exec chmod 640 {} \;



How-TO's | Hoofdpagina | Linux Nieuws | Externe links | Help