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:
- bestandstype en -permissies
- aantal hard links
- bestandseigenaar
- bestandsgroep
- grootte
- datum van laatste wijziging
- 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
- 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.
- Maak een kopie van het bestand project
en noem dit verslag
. Zorg ervoor dat de eigenaargroep en anderen dit bestand niet kunnen
lezen.
- Maak een nieuwe gebruiker aan (zie les 1) en noem deze
gebruiker student.
Geef hem het wachtwoord student.
- 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?
- Kan student het bestand verslag
lezen? Wat moet
je doen om ervoor te zorgen dat student
het bestand verslag
mag lezen en bewerken?
- 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?