Les 3 Gebruikers, groepen en permissies.

Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd
Inhoud: filepermissies en eigenaars, gebruikers en groepen

Intro

Files hebben een aantal specifieke eigenschappen. Deze worden zichtbaar met het ls -l commando. Enkele eigenschappen die we hier gaan behandelen zijn de bestandspermissies en het concept van eigenaar en eigenaargroep van een bestand. Gebruikers en groepen samen met de permissies van een bestand bepalen wie wat mag doen met een bestand.

Het Linux permissiesysteem hangt op een aantal grondbegrippen. Elke gebruiker is lid van een of meer groepen. Voor elk bestand is vastgelegd wie de eigenaargebruiker en de eigenaargroep is. Er is voor elk bestand vastgelegd wat de gebruiker , een groep en anderen mogen doen in de permissies van dat bestand. Er zijn 3 permissies en die bepalen of de gebruiker, groep of anderen dit bestand mogen lezen , schrijven of uitvoeren.

De uitgebreide lijst

De permissies van bestanden worden zichtbaar bemaakt met het ls commando met de  optie -l. Voer het volgende commando uit:
$ ls -l 
De uitvoer hiervan kan er ongeveer zo uitzien:
totaal 80
drwx------ 3 paul paul 4096 mrt 20 2004 Desktop/
drwxr-xr-x 2 paul paul 4096 okt 24 18:05 Documents/
drwxrwxr-x 5 paul paul 4096 okt 10 21:46 GNUstep/
-rwxrwxr-x 1 paul paul 82 okt 24 18:03 helloworld.py*
-rw-r--r-- 1 paul paul 0 okt 24 18:11 lijst.txt
drwxr-xr-x 2 paul paul 4096 okt 24 17:54 LinuxISO.org_bestanden/
-rw-rw-r-- 1 paul paul 21421 okt 24 17:54 LinuxISO.org.html
-rw-r--r-- 1 paul paul 33 okt 24 17:54 notities.txt
-rw-r--r-- 1 paul paul 21767 okt 24 18:02 Schermafdruk.png
drwx------ 3 paul paul 4096 okt 24 15:52 tmp/
drwxr-xr-x 2 paul paul 4096 okt 10 21:56 zooi/
Hier zijn diverse eigenschappen  van de bestanden zichtbaar in afzonderlijke kolommen. Achtereenvolgens zijn dat:
  1. bestandstype en -permissies
  2. aantal hard links
  3. bestandseigenaar
  4. bestandsgroep
  5. grootte
  6. datum van laatste wijziging
  7. naam
De eerste kolom bestaat uit 10 tekens, en is eigenlijk te splitsen in twee delen. De eerste letter bevat het bestandstype, en het tweede deel met de 9 resterende letters toont de eigenlijke bestandspermissies.

Bestandstype

De eerste letter van de bestandspermissies laat het bestandstype zien. Voor normale bestanden is er geen speciale aanduiding en er staat geen letter voor, zichtbaar met de '-'. Speciale bestanden worden hier aangeduid met een letter:
d : directory
l : link
c : character device
b : block device
p : pipe
s : socket

Om een voorbeeld te zien van de verschillende typen, vraag een lijst op van de devices in de map /dev ...
ls -l /dev
Een directory of map wordt door Linux ook gezien als een speciaal type bestand.  In zijn algemeenheid is elke hoeveelheid informatie opgslagen in het bestandssysteem van Linux en dus ook te beschouwen als een bestand. Het besturingssysteem zal om deze informatie op te zoeken, ook een bestand moeten openen. Dit geldt ook voor vormen van vluchtige informatie. De socket (=netwerkeindpunt) en pipe zijn  voorbeelden van vluchtige informatie. Deze dingen worden niet bewaard op de harde schijf nadat de computer wordt uitgeschakeld. Het zijn daarom speciale bestanden.

Opdracht : Bekijk de permissies van de bestanden in de map /dev  . Welk commando gebruik je daarvoor? Kijk welke bestandstypen je kunt herkennen.

Eigenaar en groep

In de derde kolom van de uitvoer van ls -l vind je de eigenaar van een bestand. De gebruiker die een bestand aanmaakt is in de regel ook altijd de eigenaar ( owner ) van het bestand en mag alle permissies wijzigen. In de vierde kolom zie je welk de groep de eigenaar is ( group owner ). De toekennen van een eigenaar-gebruiker en eigenaar-groep maakt het mogelijk om te kunnen bepalen wie wel en wie niet een bestand mag lezen, veranderen of uitvoeren. Dit wordt vastgelegd in de bestandspermissies van een bestand.

De eigenaar van een bestand veranderen

Met het commando chown en chgrp kunnen respectievelijk de eigenaar en de (eigenaar)groep van een bestand veranderen. Let op: alleen gebruiker root mag de eigenaar van een bestand veranderen. Het commando chown wordt gebruikt als volgt:
chown [optie] eigenaar[:groep] bestand
en chgrp :
chgrp [optie] groep bestand
We kunnen met chown ook beide tegelijk veranderen, dus tegelijk de eigenaar en groep veranderen van een bestand of map. Eigenlijk hebben we het chgrp commando niet eens nodig, want we kunnen alles wat we willen ook met het commando chown . We kunnen de eigenaar van het bestand scriptfile.sh veranderen als we willen als volgt:
# chown student scriptfile.sh
Zo maken het de gebruiker student eigenaar van bestand scriptfile.sh . We kunnen ook het bestand aan de groep student geven.
# chgrp student scriptfile.sh
of
# chown :student scriptfile.sh
Deze twee commando zijn equivalent. het bestand is nu zowel van de gebruiker student als de groep student . Merk op dat je meestal root moet zijn om de eigenaar van een bestand te veranderen.

De permissies

De voornaamste permissies die aan een bestand gekoppeld zijn zijn read, write en execute. Deze permissies wordt gekoppeld aan de eigenaar ( owner ) van het bestand, de eigenaargroep ( group ) en de rest van de wereld ( others ). Deze permissies kun je zien in een lange bestandenlijst die je ziet met het commando
ls -l

In de uitgebreide bestandenlijst vind je de permissies terug als 3 groep van 3 letters, pal achter het bestandstype, de eerste letter in de eerste kolom.

Deze letters kunnen "r", "w" of "x" bevatten en deze laten zien wat de eigenaar met het bestand mag doen: "r" staat voor read permission ofwel leestoegang , en bepaalt of iemand het bestand mag lezen of inzien. De "w" staat voor write permission ofwel schrijftoegang. Schrijftoegang is nodig wanneer je een nieuwe bestand aanmaakt, of een bestand bestand verandert of verwijdert. De "x" staat voor eXecute permission ofwel uitvoerrecht en bepaalt of iemand het bestand mag uitvoeren, wanneer het een uitvoerbaar bestand is, of dat iemand in een directory mag kijken, wanneer het gaat om een directory.

Het eerste groepje laat zien wat de permissies zijn voor de eigenaar. Het tweede groepje bepaalt de permissies van de eigenaargroep. Het laatste groepje permissies toont de permissies van de rest van alle gebruikers. Deze speciale groep gebruikers wordt ook wel world of others genoemd en bevat iedereen die niet de eigenaar van het bestand is en ook geen lid van de eigenaargroep.

Een voorbeeld
-rwxrwxr-x 1 paul paul 82 okt 24 18:03 helloworld.py*
Als eerste zien we in de 3e kolom dat de gebruiker paul de eigenaar van het bestand, en dat groep paul de eigenaargroep is. Verder kunnen aan de permissievlaggen zien dan de gebruiker paul rwx permissies heeft, dus dat paul dit bestanden mag inzien, wijzigen en uitvoeren. De groep paul heeft de permissies rwx dus dat wil zeggen dat iedereen die lid is van de groep paul dit bestand ook mag lezen, veranderen en uitvoeren. Verder zien we aan de r-x vlaggen dat de rest van de wereld dit bestand alleen mag lezen en uitvoeren.

Wie ben ik?

Om te kijken hoe je toegang tot een bestand wordt bepaald door de permissies is het belangrijk om te weten of je de eigenaar van een bestand bent. Meestal zie je dat aan de prompt van de shell, maar het kan ook met een commando. Je ziet wie je bent met het commando whoami
$ whoami
cursist
# whoami
root
Het who commando geeft een lijst met op het moment aangemelde gebruikers. Je kunt ook het commando who gebruiken om te zien in deze vorm:
$ who am i
paul pts/1 2006-11-07 22:38

Van welke groepen ben ik lid?

Het comando groups is  handig om te weten in welke groepen je bent
$ groups
csadmin wheel
Bovenstaande uitvoer laat zien dat ik in de groepen csadmin en in wheel zit.
Je kunt ook zien in welke groepen een andere gebruiker zit. Geef de naam van de gebruiker achter het groups commando.

Permissies veranderen : chmod

Met het commando chmod kunnen we permissies van een bestand of folder veranderen. De syntax hiervan is

chmod [optie] mode[,mode] bestand...

Een of meer opties zijn facultatief en veranderen het gedrag van chmod . De mode is de nieuw in te stellen permissies voor het gegeven bestand . Dit kan op een aantal  manieren. De makkelijke manier is om een gegeven permissie (r, w of x) te verwijderen of toe te voegen. Het verwijderen geven we aan met een min-teken - , en toevoegen doen we met een plusteken + . Enkele voorbeelden:

Om het bestand scriptfile.sh uitvoerbaar te maken, geven we de execute permissie

$ chmod +x scriptfile.sh


Je kunt ook de gebruikerscategorie aangeven waarop dit permissie moet worden veranderd. Zo kun je u voor gebruiker (user), g voor groep, en o voor anderen (other) gebruiken. Zo kun je permissies voor een afzonderlijke categorie verwijderen of toevoegen. Een voorbeeld: met het volgende commando kun je de write-permissie alleen voor de groep (g) weghalen
$ chmod g-w scriptfile.sh
Ook kun je de permissies resetten. We bedoelen daarmee dat de permissies zo ingesteld worden en geen andere permissies willen hebben. Bijvoorbeeld om het bestand alleen read en write permissie te geven :
$ chmod =rw scriptfile.sh

Let op: chmod +x bestand en chmod +w bestand geven de executepermissies en write-permissies overeenkomstig de waarde van umask .  Is umask 022, dan geeft chmod +w bestand alleen writepermissie aan de gebruiker zelf, niet aan de categorie group of other.


Numerieke modes

De permissies mogen ook opgegeven worden als een getal. Daarvoor wordt per categorie gebruiker een octaal getal gebruikt, omdat dit precies 3 bits weergeeft, als volgt:

mode
getal
rwx
7
rw-
6
r-x
5
r--
4
-wx
3
-w-
2
--x
1
---
0

Voor elke categorie gebruiker wordt een octaal getal gebruikt, en nog een octaal getal voor de extra bits met een speciale betekenis. zo kunnen we de permissies van een bestand aangeven in 4 octale getallen.

Een voorbeeld hiervan : om het bestand scriptfile.sh deze permissies te geven:
voor de gebruiker : rwx , voor de groep : rx , en voor de anderen : rx wordt gebruikt :
$ chmod 0755 scriptfile.sh
Het getal 0755 komt overeen met permissies rwxr-xr-x.
Het getal 0622 komt overeen met de permissies rw-r--r-- .

Opdrachten

  1. Maak een bestand aan en noem dit project . Geef dit bestand de permissies voor de gebruiker rwx, voor de groep rw en voor de anderen r.
  2. Maak een kopie van het bestand project en noem dit verslag . Zorg ervoor dat de eigenaargroep en anderen dit bestand niet kunnen lezen.
  3. Maak een nieuwe gebruiker aan (zie les 1) en noem deze gebruiker student. Geef hem het wachtwoord student.
  4. Meld je aan als de gebruiker student op virtuele terminal 4. Controleer of student ook het bestand project kan lezen dat in opdracht 1 is aangemaakt. (verander van directory). Wat moet je doen om te voorkomen dat student het bestand project kan lezen?
  5. Kan student het bestand verslag lezen? Wat moet je doen om ervoor te zorgen dat student het bestand verslag mag lezen en bewerken?
  6. Je bent systeembeheerder en je wilt het bestand verslag in de homedirectory van gebruiker cursist aan de gebruiker student geven . Wat doe je om dit voor elkaar te krijgen ? Hoe zorg je ervoor dat de gebruiker student er alles mee mag doen wat hij wil?