![]() |
![]() |
In dit hoofdstuk leert de student hoe toegang tot bestanden en directories (en dus services) onder linux geregeld worden. We leren wat eigenaar, groep, en anderen betekent voor bestanden. Vervolgens leren we wat read, write, en execute toegang betekent. De beide eigenschappen gecombineerd vormt de op bestand gebaseerde veiligheid voor linux. We gaan ook wat dieper in op de set-user-id, set-group-id, en de sticky bits. en bespreken we een aantal instellingen die hierop van invloed zijn. Tot slot werpen we een blik op linux bestand attributen en bespreken we hoe we deze kunnen gebruiken.
Wat leren we in dit hoofdstuk ?
Op een linux systeem staan directories en bestanden die meestal voor meerdere gebruikers toegankelijk zijn. Sommige bestanden mogen door iedereen gebruikt worden, anderen zijn alleen bedoeld voor een selecte groep gebruikers. De toegang tot deze bestanden en directory's wordt geregeld door middel van machtigingen en toegangs rechten, die aan gebruikers en groepen worden gegeven.
Er zijn drie types eigenaars van een bestand gedefinieerd:
Er zijn drie soorten toegangs rechten gedefinieerd. Het effect van deze toegangs rechten is verschillend voor bestanden en directory's. De volgende tabel geeft een overzicht:
toegangs recht | afkorting | bestand | directory |
---|---|---|---|
read access | r | lezen, bekijken van de inhoud | raadplegen van de inhoud (bv. ls) |
write access | w | Wijzigen van de inhoud creatie van het bestand |
Verplaatsen van bestanden Verwijderen van bestanden |
execute | x | Opstarten van programma bestand | selecteren (met cd erin gaan staan) als de read permissie niet gegeven is moet de naam op voorhand gekend zijn |
Dus linux bestand permissies zijn eigenlijk 9 bits informatie (zijnde 3x types * 3x users),
waarbij iedere bit slechts 2 toestanden kent, namelijk aan of uit.
Eenvoudig gesteld kan voor ieder bestand worden aangegeven wie
het mag lezen of schrijven.
Voor scripts of binaire bestanden kan bovendien aangeduid worden wie het mag uitvoeren.
Voor elk bestand en elke directory zijn de machtigingen toegekend volgens bovenstaand schema.
Met behulp van de opdracht ls -l kan men de machtigingen per bestand zien.
De afbeelding toont de listing ls -l.
De machtigingen zijn te zien in het eerste veld van iedere lijn.
De bestand machtigingen worden in de zogenaamde lange directory listing weergegeven door middel van 10 karakters,
waarbij het eerste karakter een aanduiding is van het bestand type. De volgende 9 karakters zijn drie
groepen van toegangsrechten, voor owner, group, others en de toegangs rechten zelf als 'rwx' in de aangegeven volgorde.
Indien een recht niet is gegeven wordt de letter vervangen door een min-teken '-'.
Voorbeelden:
0 | - | type bestand | -=bestand, d=directory, l=link |
---|---|---|---|
1 | r | user - read | de eigenaar heeft lees rechten |
2 | w | user - write | de eigenaar heeft schrijf rechten |
3 | x | user - execute | de eigenaar heeft execute rechten |
4 | r | group - read | de groep heeft lees rechten |
5 | - | group - - | de groep heeft geen schrijf rechten |
6 | - | group - - | de groep heeft geen execute rechten |
7 | r | others - read | de anderen hebben lees rechten |
8 | - | others - - | de anderen hebben geen schrijf rechten |
9 | - | others - - | de anderen hebben geen execute rechten |
De eerste notatie die bestaat is een notatie bij middel van letters.
De volgende letters zijn gedefinieerd:
drwxr-xr-x |
|
---|---|
drwxrwxrwx |
|
-rwxr-xr-x |
|
Indien een numerieke voorstelling is gebruikt (zoals bijvoorbeeld in de 'chmod' opdracht),
dan is dit met behulp van de octale notatie.
Octaal betekend de waarden 0-7, en een 8-tallige basis.
Het octale gedeelte is gebruikt voor een vereenvoudigde voorstelling van de read,write,execute patronen samen.
Of met andere woorden 1 octaal digit komt overeen met de 3 instellingen samen.
(de maximum waarde van 3-bits is 7, dus 8-tallig).
Respectievelijk worden de toegangs rechten voor eigenaar, groep, en de anderen voorgesteld als de laatste
3 digits van het numerieke bestand rechten formaat.
Bijvoorbeeld het patroon "0644". De 2'de digit (6) staat voor de rechten van de eigenaar,
de 3'de digit (4) voor de rechten van de groep, en de 4'de digit (4) voor de rechten van de anderen.
Octal | tekst equivalent | binaire waarde | betekenis |
---|---|---|---|
0 | --- | 000 | geen rechten |
1 | --x | 001 | uitvoeren rechten |
2 | -w- | 010 | schrijf rechten |
3 | -wx | 011 | schrijf, uitvoeren rechten |
4 | r-- | 100 | lees rechten |
5 | r-x | 101 | lees, uitvoeren rechten |
6 | rw- | 110 | lees, schrijf rechten |
7 | rwx | 111 | lees, schrijf, uitvoeren rechten |
Men kan stellen dat, 1 staat voor uitvoeren, 2 voor schrijven, en 4 voor lezen. Teneinde een patroon in te stellen kan men simpelweg de waarden optellen. Bijvoorbeeld om lees en schrijf rechten te bekomen kan men 4 (read) en 2 (write) samen tellen met als resultaat 6. Wil men bovendien uitvoeren rechten, dan kan men er 1 (execute) bij optellen met als resultaat 7.
644 |
|
---|---|
755 |
|
In het schrijven van programmeer code, vooral in C betekend een leidende 0, dat het getal in het octale formaat is geschreven. In feite kan het ook weggelaten worden, de volgende 3 digits zijn de toegangsrechten voor de owner, group, en others.
Er zijn gevallen waarbij men 4 non-zero digits tegenkomt. In deze gevallen heeft de eerste digit een betekenis. In een dergelijk geval moet de eerste digit geïnterpreteerd worden als SUID, SGID, en sticky bit. Hierover later meer.
Toegangs rechten voor bestanden en directories hebben een verschillende betekenis vanuit het gebruikers standpunt.
De volgende tabel toont de verschillen:
Toegangs recht | bestand | directory |
---|---|---|
read (lees) | de bestand inhoud kan gelezen worden | de directory lijst kan gelezen worden |
write (schrijf) | de bestand inhoud kan geschreven (gewijzigd) worden | de directory inhoud kan geschreven (gewijzigd) worden wat hetzelfde is als bestanden toevoegen, verwijderen |
execute (uitvoeren) | het bestand kan uitgevoerd worden | de directory kan geselecteerd worden als de huidige directory |
Een web server kent de rechten voor de web-server gebruiker,
typisch de gebruiker "nobody",
toe aan de geconnecteerde web client,
alsof "nobody" aan de web server is geconnecteerd.
De gebruiker "nobody" behoort niet tot de groep waardoor deze de rechten van others erft.
De volgende tabel toont de typische rechten instellingen voor web server bestanden (vanuit het administrators standpunt).
voor gewone bestanden | meestal 644 | "nobody" moet het bestand kunnen lezen, dus 4 voor others en group de admin moet het bestand kunnen schrijven en lezen, dus 6 |
---|---|---|
voor scripts | 755 | "nobody" moet kunnen lezen en uitvoeren, dus 5 voor others en group de admin moet kunnen lezen, schrijven, en uitvoeren, dus 7 |
Behalve de hierboven besproken toegangsrechten, zijn er ook nog een 3-tal bits gedefinieerd als extra
bestand informatie. Deze bits zijn, STICKY bit, SUID of set-user-ID, SGID of set-group-ID.
In het kort is de betekenis als volgt:
SUID of setuid | wijzig gebruikers id tijdens uitvoeren | Wanneer het bestand wordt uitgevoerd door een gebruiker, zal het process dezelfde rechten hebben als de eigenaar van het bestand (niet noodzakelijk dezelfde) |
---|---|---|
SGID of setgid | wijzig group id tijdens uitvoeren |
Wanneer het bestand wordt uitgevoerd door een gebruiker, zal het process
dezelfde rechten hebben als de groep van het bestand (niet noodzakelijk dezelfde) Voor directories : wanneer een nieuw bestand wordt toegevoegd erft dit bestand de groep van de directory (en niet de groep van de gebruiker die het bestand maakt) |
Sticky bit | stick process in memory na uitvoering |
Dit was vroeger de betekenis. Momenteel heeft dit bit geen gebruik. sommige distributies gebruiken het bit wel, meestal om te beletten dat een gebruiker bestanden kan verwijderen in een directory waar hij toegang heeft, maar waarvan eigenaar niet de gebruiker is. |
Octal digit | Binaire waarde | Betekenis |
---|---|---|
0 | 000 | SUID, SGID, STICKY clear |
1 | 001 | STICKY set |
2 | 010 | SGID set |
3 | 011 | SGID en STICKY set |
4 | 100 | SUID set |
5 | 101 | SUID en STICKY set |
6 | 110 | SUID en SGID set |
7 | 111 | SUID en SGID en STICKY set |
SUID | Indien gezet, wijzigt de 'x' in de eigenaars rechten naar 's' indien de eigenaar uitvoeren rechten heeft naar 'S' indien de eigenaar geen uitvoeren rechten heeft.
|
---|---|
SGID | Indien gezet, vervangt de 'x' in de group rechten naar 's' indien de groep uitvoeren rechten heeft naar 'S' indien de groep geen uitvoeren rechten heeft
|
Sticky | Indien gezet, vervangt de 'x' in de others rechten naar 't' indien de others uitvoeren rechten heeft naar 'T' indien de others geen uitvoeren rechten heeft
|
Het sticky bit bepaalt dat een process in het geheugen bewaard blijft nadat het is uitgevoerd.
Dit is obsolete, een overblijfsel van vroeger.
Het sticky bit (t of T) toegepast op een directory bepaalt dat de gebruiker alleen bestanden
mag verwijderen waarvan hij de eigenaar is, of waarop hij nadrukkelijk schrijf toegang heeft.
Het is dus niet voldoende om schrijf toegang tot de directory zelf te hebben om bestanden te kunnen
verwijderen. De gebruiker root zou deze permissie kunnen gebruiken op home-directory's van gebruikers
zodat hij daar configuratie bestanden kan plaatsen die niet door de gebruiker verwijderd kunnen worden.
Op de meeste distributies echter is deze sticky bit niet geïmplementeerd. De enige wijze om te weten
of dit toegangsrecht gebruikt kan worden is door het uit te proberen.
Het user-bit of SUID (s of S) bepaalt dat een programma dat wordt uitgevoerd de rechten heeft van de eigenaar van het programma en niet de rechten van de gebruiker die het programma uitvoert. Deze techniek wordt nogal eens gebruikt om een gewone gebruiker toe te laten een systeem-service op te starten. Echter aangezien in veel gevallen de gebruiker root de eigenaar is van programma bestanden moet men hier uiterst voorzichtig mee om gaan. Men wil niet per ongeluk een gewone gebruiker root rechten geven. Toch zijn er veel systeem opdrachten die van deze permissie gebruik maken. Zo stelt SUID de eindgebruiker in staat om zijn gewijzigd wachtwoord weg te schrijven in /etc/shadow, een bestand dat normaal gezien alleen door root benaderd kan worden.
Het set-group-ID bit SGID (s of S) doet iets soortgelijks als het SUID bit,
maar dan voor de groep die eigenaar is.
Als het SGID wordt ingesteld op een directory,
betekend dit dat de bestanden die in de directory worden aangemaakt,
de groep die eigenaar is,
wordt ingesteld op de groep die eigenaar is van de directory.
Ook voor deze permissie geldt dat wanneer toegepast,
ze met voorzichtigheid moet toegepast worden.
Programma bestanden waar het SUID en het SGID zijn ingesteld vormen een mogelijk risico voor de veiligheid van het systeem.
Omdat ze speciale permissies geven tijdens het uitvoeren,
kan men er beter voor zorgen dat ze helemaal niet op het systeem voorkomen.
Ook is het zeker de moeite waard om de gebruiker root,
periodiek met bijvoorbeeld 'find' het systeem te laten scannen op het voorkomen van deze permissie.
Als een hacker erin slaagt om toegang tot het systeem te krijgen is het voor hem interessant
om een paar bestanden met SUID of SGID ingesteld op het systeem te hebben.
Denk maar aan het effect dat zo iets zou hebben indien het betreffende programma een (weinig gebruikte) shell zou zijn.
Toegangs rechten kunnen ingesteld worden via de command line met de opdracht 'chmod'. Het grafische programma 'konqueror' vergelijkbaar met windows file manager, heeft ook een dialoog waarmee men toegangsrechten kan instellen. De volgende paragrafen geven in detail de werkwijze.
Om op de console toegangs rechten in te stellen kan men gebruik maken van de opdracht
chmod.
De eigenaar en de gebruiker 'root' kunnen deze opdracht gebruiken.
De opdracht 'chmod' kan gebruikt worden in twee modi om de verschillende toegangsrechten uit te drukken.
Het getal is een octale waarde van 4 of 3 digits. Iedere digit representeert een groep van 3 bits als volgt:
Deze waarden kunnen bij elkaar opgeteld worden,
zo betekend een waarde 3 dat zowel execute als write worden ingesteld,
3 is immers de som van 1 en 2.
Indien met een getal van 4 digits hanteert dan wordt het eerste digit beschouwd als de instellingen voor
STICKY, SGID,en SUID, de volgende digits respectievelijk voor de eigenaar, group, en de others.
Als men een getal van 3 digits hanteert dan wordt het eerste digit beschouwd als de instellingen
voor de eigenaar, vervolgens de group en dan de others.
De volgende tabel toont een overzicht van alle (enkelvoudige) getallen die in absolute modus gebruikt kunnen worden.
1000 | 2000 | 3000 | 4000 | 5000 | 6000 | 7000 | |
---|---|---|---|---|---|---|---|
STICKY, SGID,SUID | s | g | s & g | u | s & u | g & u | s & g & u |
0100 | 0200 | 0300 | 0400 | 0500 | 0600 | 0700 | |
owner | x | w | x & w | r | x & r | w & r | x & w & r |
0010 | 0020 | 0030 | 0040 | 0050 | 0060 | 0070 | |
group | x | w | x & w | r | x & r | w & r | x & w & r |
0001 | 0002 | 0003 | 0004 | 0005 | 0006 | 0007 | |
others | x | w | x & w | r | x & r | w & r | x & w & r |
Als men toegangs rechten wil gaan instellen met 'chmod' in absolute modus, ga dan uit van de volgende principes:
Naast de absolute modus kent 'chmod' ook nog een relatieve modus.
Het voordeel van deze relatieve modus is dat men ook zonder de betekenis van de getallen te kennen,
toegangs rechten kan instellen. Daarnaast is het handig om snel een permissie in te stellen op een bepaald bestand:
zo kan men met chmod +x blah het bestand
'blah' in een handomdraai als een uitvoerbaar bestand markeren.
Het nadeel van de relatieve modus is dat hij minder duidelijk is dan de absolute
(alhoewel smaak hier ook om de hoek komt kijken). Denk hierbij aan chmod u=rwx,g-x,o+w.
Als men de relative modus gebruikt moet men de volgende dingen instellen :
Voorbeelden relative werking van 'chmod'
Opdracht | Resultaat |
---|---|
ls > test | -rw-r--r-- 1 linux linux 5 2007-10-12 19:40 test |
chmod u+rwx test | -rwxr--r-- 1 linux linux 5 2007-10-12 19:40 test |
chmod g+rwx test | -rwxrwxr-- 1 linux linux 5 2007-10-12 19:40 test |
chmod o+rwx test | -rwxrwxrwx 1 linux linux 5 2007-10-12 19:40 test |
chmod u-x test | -rw-rwxrwx 1 linux linux 5 2007-10-12 19:40 test |
chmod g-x test | -rw-rw-rwx 1 linux linux 5 2007-10-12 19:40 test |
chmod o-x test | -rw-rw-rw- 1 linux linux 5 2007-10-12 19:40 test |
chmod u-rw test | ----rw--rw- 1 linux linux 5 2007-10-12 19:40 test |
chmod o-rw test | ----rw---- 1 linux linux 5 2007-10-12 19:40 test |
chmod u=rwx,g=rx,o=rw test | -rwxr-xrw- 1 linux linux 5 2007-10-12 19:40 test |
Met behulp van de bestand browser 'konqueror' kan men eveneens toegangs rechten van een bestand wijzigen.
Selecteer bestand eigenschappen (properties) via de linker muistoets
De volgende screen shots spreken voor zichzelf.
Men kan ook de eigenaar en de groep van het bestand wijzigen.
Uiteraard moet ook 'konqueror' de huidige instellingen respecteren, men kan geen
bestand eigenschappen wijzigen als men er geen toestemming voor heeft.
Als men een bestand aanmaakt wordt voor dit bestand altijd een aantal standaard toegangs rechten
ingesteld zonder dat men daarvoor iets hoeft te doen.
Hiervoor wordt de 'umask' instelling gebruikt.
Dit is een standaard instelling die vanuit de opstartprocedure van de shell voor iedere gebruiker
geactiveerd wordt met behulp van de opdracht
umask.
Het is dus mogelijk om met 'umask' per gebruiker afwijkende instellingen te doen.
Ook de opdracht 'umask' heeft een getal als argument.
Het vervelende hier is echter dat het umask getal precies de omgekeerde betekenis heeft
van het absolute getal gebruikt in de opdracht chmod.
De umask-instelling 7 betekent dus niet dat alle rechten worden toegekend,
maar juist dat er geen rechten worden toegekend.
Men kan de waarde van de umask interpreteren door het af te trekken van het getal 777.
De waarde van de huidige instelling kan men uitlezen met behulp van 'umask' zonder argument.
Omdat de werking van 'umask' redelijk complex kan zijn geeft de volgende tabel een overzicht
umask waarde | bestanden | directories |
---|---|---|
0 | read en write | alles |
1 | read en write | read en write |
2 | read | read en execute |
3 | read | read |
4 | write | write en execute |
5 | write | write |
6 | niets | execute |
7 | niets | niets |
Als men de opdracht umask vanaf de opdracht regel gebruikt,
brengt men en instelling aan die voor alle bestanden die men maakt van kracht is totdat men weer uitlogt.
Omdat de 'umask' instelling weer verloren gaat bij het verlaten van de shell,
zal men de 'umask' instelling doen vanuit een opstart bestand van de shell.
Wil men dit voor alle gebruikers van het systeem,
dan moet dit gebeuren door de systeem administrator, in het bestand /etc/profile.
Wil een individuele gebruiker dat doen , dan gebeurd dit in ~/.bashrc of gelijkaardig.
De standaard waarde die aan de opdacht 'umask' gegeven wordt, staat meestal ingesteld op 022.
Dit heeft als betekenis:
eigenaar | patroon | commentaar |
---|---|---|
gebruiker (user) | rwx | de eigenaar van het bestand mag lezen, schrijven een nieuwe directory mag geselecteerd worden |
groep (group) | r-x | de groep van het bestand mag lezen een nieuwe directory mag geselecteerd worden |
anderen (others) | r-x | alle anderen mogen het bestand lezen en de nieuwe directory selecteren |
Bij een bestand worden de uitvoeren rechten nooit toegekend.
Wanneer men een uitvoerbaar bestand aanmaakt dient men zelf de execute rechten in te stellen.
Een geavanceerde eigenschap van linux, die niet altijd gebruikt wordt, is bestand systeem attributen.
Dat wil zeggen , ieder bestand beschikt over een aantal attributen die afzonderlijk al dan niet kunnen worden
ingesteld.
Hiermee kan men een beetje extra bescherming meegeven met een bestand. Het mooie van attributen is
dat ze voor iedere gebruiker gelden.
Afhankelijk van het attribuut kan alleen de eigenaar, de root gebruiker, of de kernel (dus niemand)
de attributen instellen.
Attributen worden ondersteund op de belangrijkste bestand systemen, ext2, ext3, en Reiser.
Om attributen in te stellen maakt men gebruik van de opdracht
chattr.
De bestand attributen zijn een reeks bits die als volgt worden ingesteld :
Om een overzicht te krijgen van attributen die momenteel staan ingesteld gebruik de opdracht
lsattr.
De belangrijkste attributen zijn:
In dit hoofdstuk hebben we de bestand toegangs rechten besproken. We hebben geleerd om toegangs rechten te verlenen aan verschillende types eigenaars van bestanden. Daarna hebben we via de speciale bestand permissies STICKY, SUID, en SGID geleerd het standaard gedrag tijdens het aanmaken van bestanden te wijzigen. We hebben ook gezien hoe we bestand toegangs rechten moeten instellen, via de command line en via de grafische interface. Ook hebben we geleerd hoe de bestand toegangs rechten automatisch worden ingesteld. Als laatste hebben we gezien dat er behalve de standaard bestand rechten er ook nog bestand attributen bestaan.
![]() |
![]() |
Last modified: do jan 9 16:18:06 CET 2014 |