View text
| Info | |
|---|---|
| Author | ilias |
| Date added | 2006-06-10 |
| Last modified | 2006-06-10 |
Linux: file permissions en usergroups
Linux: file permissions en usergroups
Deze tekst is vooral bedoeld voor mensen die ofwel al ervaring hebben met linux,
maar kan ook handig zijn voor mensen die bvb. een site op een linux host
beheren.
1. Users en usergroups
Op een linux-systeem zijn er steeds meerdere gebruikersaccounts. Zelfs op een
systeem met maar 1 eindgebruiker zijn er verschillende, hoewel de eindgebruiker
gewoonlijk maar van 2 accounts gebruikmaakt: zijn eigen account en het root
account. Het systeem zelf, daarentegen, zal wel v/d andere users gebruikmaken,
hierbij denk ik onderandere aan sys (staat in voor devices-beheer), daemon
(zorgt voor alles wat in /usr/sbin staat) en man (die u alle nodige informatie
verschaft).
Elke user is deel van een aantal usergroups, kortweg groups.
Groups dienen om het beheer van bestanden makkelijker te maken en om op een
makkelijke manier aan te geven wie wat mag op een systeem. Als je bvb. wilt dat
een bepaalde user kan printen, voeg je hem toe aan de print group. (logisch,
neen? ;))
Alle info over wie tot welke group behoort, staat in /etc/group hoewel dat van
distributie tot distributie kan verschillen.
Om een group toe te voegen gebruik je het addgroup commando; bvb "addgroup test"
maakt een nieuwe group "test" aan. Hetzelfde resultaat kan bereikt worden met
"adduser --group test".
Om een bestaande gebruiker aan een bestaande group toe te voegen, gebruik je
"adduser user group", bvb. "adduser ilias print" voegt mij aan de print-group
toe.
Adduser en addgroup kunnen enkel door root worden gebruikt.
2. Permissions
Elk bestand, elk programma, elke map op linux heeft bepaalde permissions. Die
permissions geven aan wat de eigenaar (owner) van het bestand mag, wat de group
mag en wat de rest mag. Elk bestand heeft dus ook een owner en een group. Die
group klinkt misschien raar, maar het is uitzonderlijk handig om bvb. een een
ftp-server op te zetten: iedereen die deel is van de ftp-group krijgt dan bvb.
read/write.
De owner van een bestand of map is standaard dat van degene die het heeft
aangemaakt, maar kan verandert worden door root met het chown (change owner)
commando:
stel dat ik de owner van de map "testmap" en alle onderliggende mappen en
bestanden wil veranderen in "ilias", maar bij symlinks enkel de owner v/d
symlink, niet van het gerefereed bestand; dan gebruik ik (als root):
chown -hR ilias testmap
Om de group van een bestand of map aan te passen gebruik ik het chgrp (change
group) commando:
stel dat ik, net als in het vorige voorbeeld, de group van een map en alle
onderliggende mappen en bestanden, symlinks NIET volgen, wil veranderen in
testgrp:
chgrp -hR testgrp testmap
Als ik in 1 keer owner en group wil aanpassen, kan dat ook met chown door "chown
group:user file".
Voor de volledige manual van chown en chgrp; zie "man 1 chown" respectievelijk
"man 1 chgrp".
Nu, je bestand heeft een owner en een group.. Hoe bepaal je nu wat ze mogen?
Het antwoord is simpel; gebruik chmod om de permissies te veranderen.
Om te weten te komen welke permissie een bestand heeft, gebruik je ls -l.
Er zijn 3 dingen die iemand met een bestand zou kunnen doen:
-het lezen (read)
-erin schrijven/wijzigingen aanbrengen (write)
-en het uitvoeren (execute)
Omdat er wel meerdere mensen aan bestanden kunnen, is het dus belangrijk om te
definiëren wie wat mag; maar voor je dat kan moet je weten wie er is. Je zou nu
per user kunnen instellen wat hij mag (zoals dit gebeurt met acl's, access control
lists) maar voor de gewone gebruiker is dit meestal niet nodig. Het is
simpeler om de mensen in 3 te verdelen:
-owner : de eigenaar van het bestand, meestal degene die het heeft gemaakt
-group : een group die bepaalde dingen met het bestand zou moeten kunnen doen
-other : de rest
Permissies zijn er in 2 schrijfwijzes: de octale en de uitgebreide schrijfwijze.
A) octale schrijfwijze voor permissies:
Een permissie in octale schrijfwijze is bijna altijd een getal dat bestaat uit 3
digits, elke maximum 7; bvb. 755, 600,..
Elk van die 3 digits is de permissie voor een bepaald soort users:
digit #1 staat voor de owner
digit #2 staat voor de group
en #3 bepaalt wat de rest (other) mag.
Elk van die digits is eigenlijk een optelsom, met als grootst mogelijke uitkomst
7 en als kleinste 0.
Read-toegang is 4
write 2
en execute 1
Als een v/d digits nu bvb read/write maar geen execute mag hebben; wordt de som
4 + 2 = 6
Voorbeeld:
De owner heeft read/write/execute
De group heeft read/write
De rest heeft enkel read
owner = digit #1 = 4 + 2 + 1 = 7
group = digit #2 = 4 + 2 = 6
other = digit #3 = 4 = 4
stel dat het bestand "testbestand" heet, dan wordt het commando:
chmod 764 testbestand
B) uitgebreide schrijfwijze:
de uitgebreide of symbolische schrijfwijze is de nog steeds vaker voorkomende
maar tegelijkertijd ook veel langere schrijfwijze.
Hierbij wordt de permissie afgebeeld als een rij lettertekens van 10 tekens
lang.
Die rij moet eigenlijk bekenen worden als 1 teken + 3 groepjes van 3 tekens.
teken #1: bepaald wat voor een bestand het is:
mogelijkheden:
- : een gewoon bestand
d : een map
b : een block device; oftewel bestand dat een device voorsteld waarmee wordt
gecommuniceerd in blocks, en dus ni character per character, bvb een cdromdrive
c : een character device; een bestand dat een device voorsteld en waarmee moet
worden gecommuniceerd per character, bvb een seriele modem
l : een symbolic link
p : een named pipe (zie http://en.wikipedia.org/wiki/Named_pipe voor meer info)
s : een domein-socket; waarmee interprocedure calls kunnen gemaakt worden binnen
de lokale computer
tekens #2, #3 en #4: bepalen wat de owner mag:
#2: bepaald read-permissie: r als het mag; - als het niet mag
#3: bepaald schrijfpermissie: w als het mag; - als het niet mag
#4: bepaald uitvoerpermissie: x als het mag; - als het niet mag
tekens #5 t.e.m. 7 bepalen op dezelfde manier wat de group mag;
tekens #8 t.e.m. #10 bepalen op dezelfde manier wat de rest mag.
Voorbeelden:
drwxrw-r-- : een map waarbij de owner read/write/execute heeft, de group
read/write en other enkel read
-rwxrwxrwx : een normaal bestand waarbij owner, group en other read/write en
execute hebben
Dit kun je ook gebruiken bij chmod; bvb
chmod -rwxrwxrwx bestand
voor de volledige manual van chmod: man 1 chmod
C) Additionele permissies: permissies die men niet vaak gebruikt maar zeker wel
nut hebben
Stel, je wilt dat een gewone gebruiker het ping commando kan gebruiken zonder
tot de root group te behoren..
Ja, voor ping zou je root moeten hebben zonder additionele permissies; aangezien
ping moet control packets moet versturen en ernaar luisteren via een
netwerk-interface.
Met additionele permissies kan je dat bereiken.
Er zijn 3 additionele permissies:
owner:setuid: als een bestand dit meekrijgt, krijgt de user die het uitvoert
tijdens het uitvoeren en enkel binnen dat proces de rechten van de owner van het
bestand in kwestie. Als het op een map wordt gebruikt, dan krijgen alle
bestanden die in die map worden gemaakt de owner van de map als owner
group:setgid: zelfde, alleen krijgt men hierbij de rechten van de group en bij
mappen de group van de map
other:sticky: wordt vooral op mappen gebruikt, en betekend dat de bestanden erin
enkel kunnen worden verwijdert of hernoemd door de eigenaar van het bestand, de
eigenaar van de map of de root user, wie er ook write-permissie heeft.
a) additionele permissies en symbolische schrijfwijze
setuid (enkel owner): s(als de execute-bit aan moet) of S(als hij niet aan moet)
setgid (enkel group): s(als de execute-bit aan moet) of S(als hij niet aan moet)
sticky (enkel other): t(als de execute-bit aan moet) of T(als hij niet aan moet)
de additionele permissies vervangen de execute bit maar door hoofdlettergebruik
wordt wel aangegeven of die aan of uit moet.
vb:
-rwsr-x--x: een regelmatig gebruikte permissie voor programma's als ping.
Hierbij krijgt de owner read/write/execute, de group read en execute en de rest
enkel execute en iedereen krijgt setuid.
b) additionele permissies en octale schrijfwijze
Bij de octale schrijfwijze voegt met simpelweg 1 digit toe, voor de normale
digits.
Deze kan berekend worden op een gelijkaardige manier:
setuid = 4
setgid = 2
sticky = 1
de -rwsr-x--x uit het vorige voorbeeld wordt dus 4751.
D) extra
Nu weet je dus hoe je voor bestanden kunt instellen wat de owner, group en other
mogen.. Maar er zijn natuurlijk scenario's in te denken waarbij je voor
verschillende mensen apart de permissies moet kunnen instellen, of voor
verschillende groepen.. Ook daar bestaat een oplossing voor: ACL's.. Daar volgt
nog wel eens een tekst op..
__
Ik hoop dat je er iets van kan leren.
Dit werk, hoewel ik niet denk da iemand het de moeite waard zou vinden, mag op
andere sites worden geplaatst, mag worden gewijzigd, maar deze disclaimer mag
niet worden gewijzigd, en het moet steeds onder mijn naam verschijnen. Hoewel ik
er niet veel tegen kan doen als je dat niet doet.
whatever
Ilias (ilias@idlemonkeys.net)