Op een groot deel van de webservers draait het Unix-achtige besturingssysteem Linux. Alle Unix-derivaten hebben gemeen dat aan bestanden en mappen bepaalde toegangsrechten worden toegekend. Je kunt die in Linux wijzigen met ‘chmod’, een command-line-programma dat in de terminal via het gelijknamige commando geactiveerd wordt.
Het programma ‘chmod’, afkorting van ‘change mode’, werd begin jaren zeventig geïntroduceerd met de eerste versie van de AT&T-Unix. De toepassing chmod wordt in Unix-gebaseerde besturingssystemen gebruikt om toegangsrechten toe te kennen in bestandssystemen die de klassieke Unix-bestandsrechten ondersteunen. Dit geldt meestal voor alle standaard bestandssystemen op gangbare Linux-servers. Het systeem van Unix-bestandsrechten is gebaseerd op gebruikerscategorieën en individueel toegewezen basisrechten. In dit geval ondersteunt chmod twee verschillende functies: de symbolische notatie met letters, en de toewijzing van bestandsrechten door middel van op cijfers gebaseerde, octale codes. Het wijzigen van de toegangsrechten met chmod kun je alleen doen als je eigenaar van het bestand bent óf rootgebruiker. De opdracht, die je gewoon in de terminal intypt, heeft altijd de volgende syntaxis:
$ chmod options mode file
Op het commando chmod volgt het vrijblijvende element options. Daarmee definieer je extra eigenschappen van chmod. Het element mode vertegenwoordigt een rechtenmasker dat op het volgende bestand, d.w.z. een bestand of map, moet worden toegepast. Dit masker geeft aan of een gebruikersklasse nieuwe toegangsrechten moet krijgen of dat deze rechten uit reeds toegekende rechten moeten worden verwijderd.
In Unix en Linux heeft elk bestand op een server individuele toegangsrechten. Hetzelfde geldt voor directories. De toegangsrechten worden geregeld volgens drie klassen van gebruikers:
Heeft een opdracht betrekking op alle gebruikersklassen (user, group en others)? Dan is in de symbolische notatie hiervoor de afkorting ‘a’ beschikbaar, voor ‘all’.
Het Unix-bestandssysteem heeft drie basisrechten. Elk van de bovengenoemde gebruikersaccounts kan verschillende rechten hebben die door de eigenaar van het bestand zijn toegewezen:
Denk er bij het toekennen van toegangsrechten aan dat machtigingen in Unix niet worden geërfd. Ofwel, als je een bestand in een directory aanmaakt, krijgt dat bestand niet automatisch de toegangsrechten die voor de hele directory gelden. Individuele bestandsrechten vloeien voort uit de machtiging van het programma dat het bestand heeft aangemaakt.
Om het systeem van Unix-toegangsrechten te onthouden, is het handig om te weten hoe de terminal toegangsrechten voor bestanden of mappen weergeeft. Met de opdracht ‘ls’ kan de inhoud van een map in de terminal weergegeven worden. Voor informatie over bestandsmachtigingen gebruik je (als user of rootgebruiker) het attribuut ‘-l’. Hieronder zie je de toegangsrechten voor de map ‘voorbeeldmap’:
gebruiker@computer:~$ ls –l
drwxrw-r-- 0 voorbeelduser voorbeeldgroup 0000 2016-01-01 voorbeeldmap
De tekens aan het begin zijn bijzonder belangrijk voor bestandsmachtigingen:
drwxrw-r--
Deze coderen het bestandstype en toegangsrechten voor de drie gebruikersklassen. Het beginteken geeft het type bestand aan. De string in het voorbeeld begint met een d. Het is dus het bestandstype ‘directory’. Daarna volgen drie blokken van elk drie tekens. Elk van deze drie blokken vertegenwoordigt een gebruikersklasse volgens de standaardvolgorde (user, group, others). De letters zijn afkortingen voor de symbolische notatie van de verschillende toegangsrechten:
Code: | d | rwx | rw- | r-- |
---|---|---|---|---|
Betekenis: | d = directory | user | group | other |
r = read | r = read | r = read | ||
w = write | w = write | - | ||
x = execute | - | - |
De bestandsmachtigingen voor de map ‘voorbeeldmap’ zijn daarom als volgt: de eigenaar (user) mag de map wijzigen (r), hij heeft schrijfmachtigingen (w) en het uitvoerrecht (x) waarmee hij een lijst van de bestanden in de map mag bekijken. Leden van de groep ‘voorbeeldgroep’ hebben lees- en schrijfrechten (r, w), ze mogen bestanden opslaan in de directory. Alle andere gebruikers mogen alleen bestanden en submappen in de directory openen als zij de naam kennen (r). Maar let op: de gedefinieerde toegangsrechten gelden alleen voor de map – niet voor de submappen of bestanden in die map. Voor een tekstbestand in deze map kunnen de toegangsrechten er totaal anders uitzien:
-rw------- 0 voorbeelduser voorbeeldgroup 0000 2016-01-01 voorbeeld.txt
In dit voorbeeld geeft het initiële koppelteken (-) aan dat het een gewoon bestand is en geen directory of link. De notatie rw- geeft de eigenaar zowel lees- als schrijftoegang. Aangezien dit een tekstbestand is en geen programma, wordt het uitvoeringsrecht weggelaten en met een koppelteken (-) genoteerd. Het koppelteken staat ook in de blokken die zijn toegewezen aan de gebruikersklassen ‘group’ en ‘others’. Dit betekent dat alle toegangsrechten tot het voorbeeldbestand voor deze gebruikersklassen zijn uitgesloten.
Als je de toegangsrechten tot een map of bestand wilt wijzigen voor één of alle gebruikersklassen, gebruik je in Linux ‘chmod’. Een bestandseigenaar of rootgebruiker voert deze opdracht in, inclusief het rechtenmasker (mode) en de bestandsnaam (file).
$ chmod options mode file
Het rechtenmasker kun je in een symbolische notatie of als octale code definiëren.
Als je het rechtenmasker volgens de symbolische notatie opstelt, gebruik je de volgende operatoren, die de respectievelijke gebruikersklassen koppelen aan bestandsrechten.
+ | - | = |
---|---|---|
Met de operator ‘+’ koppel je nieuwe bestandsrechten aan een gebruikersklasse. Alleen de betroffen bestandsrechten worden hierbij overschreven. | De operator ‘-‘ verwijdert een bestandsrecht van een gebruikersklasse. | Wil je bestandsrechten voor een gebruikersklasse definiëren, ongeacht de vorige rechten? Dan gebruik je hiervoor de operator ‘=’ |
Als bijvoorbeeld het nieuw geïntroduceerde bestand ‘voorbeeld.txt’ zo moet worden gewijzigd dat niet alleen de eigenaar (user), maar ook alle andere gebruikers (group, others) schrijf- en leesrechten krijgen, dan zou het chmod-commando er als volgt uitzien:
$ chmod ugo+rw voorbeeld.txt
$ chmod a+rw voorbeeld.txt
Een verwijzing naar alle gebruikersklassen zou ook mogelijk zijn:
In de terminal zou het bestand ‘voorbeeld.txt’ nu de volgende rechten tonen in plaats van de oorspronkelijke toegangsrechten:
-rw------- | a+rw | -rw-rw-rw- |
---|---|---|
Toegangsrechten voor de wijziging: | chmod-opdracht: | Toegangsrechten na de wijziging: |
user: read, write | a = all | user: read, write |
group: geen rechten | + = Toegangsrecht toevoegen | group: read, write |
other: geen rechten | r = read | other: read, write |
w = write |
De symbolische notatie is gemakkelijk te begrijpen, maar wordt wat onhandig bij frequent gebruik. Veel beheerders gebruiken daarom de octale notatie bij het toewijzen van toegangsrechten. Dit is een reeks van drie cijfers waarbij elk cijfer een gebruikersklasse van de server vertegenwoordigt. De octale notatie is ook gebaseerd op de standaardvolgorde:
Cijfer 1 | Cijfer 2 | Cijfer 3 |
---|---|---|
Hoort bij de gebruikersklasse ‘eigenaar’ (user) | Hoort bij de gebruikersklasse ‘groep’ (group) | Hoort bij de gebruikersklasse ‘overige’ (others) |
De waarde van elk cijfer bepaalt de toegangsrechten die aan de individuele gebruikerscategorieën worden toegekend. Vervolgens geldt de som van de individuele waarden die je aan de respectievelijke rechten toekent:
Toegangsrecht | Waarde |
---|---|
Lezen | 4 |
Schrijven | 2 |
Uitvoeren | 1 |
Geen rechten | 0 |
Deze toekenning leidt tot de volgende waardecombinaties:
Toegangsrecht(en) | Waarde |
---|---|
Geen | 0 |
Alleen uitvoeren | 1 |
Alleen schrijven | 2 |
Schrijven/uitvoeren | 3 |
Alleen lezen | 4 |
Lezen/uitvoeren | 5 |
Lezen/schrijven | 6 |
Alle toegangsrechten | 7 |
Voor een voorbeeld van de octale notatie gebruiken we weer het bestand ‘voorbeeld.txt’. Vóór we de toegangsrechten met chmod wijzigden, gold deze code:
-rw------- 0 voorbeelduser voorbeeldgroup 0000 2016-01-01 voorbeeld.txt
Alleen de eigenaar (user) heeft de toegangsrechten ‘read’ (r) en ‘write’ (w). Alle andere gebruikers hebben geen toegangsrechten tot het bestand. Ervan uitgaande dat de eigenaar van plan is om de ‘voorbeeldgroep’ leesrechten toe te kennen, wordt dit de octale code:
$ chmod 640 voorbeeld.txt
De eigenaar heeft dezelfde toegangsrechten als voorheen, maar nu met de waarde 6 op de eerste plaats in het rechtenmasker: 4 (lezen) + 2 (schrijven). De tweede waarde in het rechtenmasker specificeert de toegangsrechten van de groep: 4 (lezen). Andere gebruikers hebben geen rechten en zijn met een 0 gecodeerd.
Als de gebruikerscategorie ‘others’ leesrechten moet krijgen, wordt dit de octale code:
$ chmod 644 voorbeeld.txt
De 4 op de derde plaats van de octale code definieert dit leesrecht voor andere gebruikers op de server.
Bij het toekennen van toegangsrechten heb je verschillende opties, ongeacht of je een symbolische of numerieke notatie kiest. Deze opties plaats je tussen de opdracht en het rechtenmasker.
Code | Optie | Omschrijving |
---|---|---|
-R | recursive | De wijziging van toegangsrechten geldt voor alle bestanden en submappen in een map. |
-v | verbose | Na de command-line-opdracht wordt een diagnose gesteld voor alle verwerkte bestanden. |
-c | changes | Na de command-line-opdracht wordt een diagnose gesteld voor alle gewijzigde bestanden. |
-f | silent | Foutmeldingen worden niet getoond. |
Het volgende voorbeeld toont een commando waarbij de wijziging van toegangsrechten recursief verwijst naar de submappen en bestanden in de map:
$ chmod -R 744 voorbeeldmap
Voor alle bestanden en submappen in de directory ‘voorbeeldmap’ geldt het volgende: de eigenaar krijgt volledige toegangsrechten (7), groepsleden en andere gebruikers hebben alleen leestoegang (4).
Het voordeel van het Unix-bestandssysteem is zijn eenvoudige structuur. Je kunt complexe dagelijkse problemen bij het werken met een multi-user-besturingssysteem eenvoudig oplossen. Bovendien blijft het systeem intuïtief voor gebruikers en gebruiksvriendelijk voor computersystemen. Maar als je bij het instellen van toegangsrechten de terminal niet wilt gebruiken, kun je ook een bestandsbeheerder nemen. Traditionele FTP-programma's bieden hiervoor meestal een grafische interface.