Beveiliging van bestanden

Eigenschappen tonen

Om alle eigenschappen van een bestand te tonen, incluis de toegangsrechten, gebruiken we het ls commando als volgt:

Handeling met de muis.

ubuntu@ubuntu:~$ ls -la /etc/passwd
-rw-r--r--  1 ubuntu ubuntu 0 2006-05-31 12:56 bestand1

We zien dan tien kolommen. Let wel: het eerste karakter van de eerste kolom wordt hier als aparte kolom beschouwd. De kolommen hebben de volgende betekenis:

  1. eerste karakter van de eerste kolom: bestandstype. De voornaamste zijn d (directory of map) en - (gewoon bestand).

  2. tweede tot en met tiende karakter: drie groepen van drie karakters die de bestandspermissies voorstellen.

  3. tweede kolom: aantal (hard)links naar het bestand.

  4. derde kolom: loginnaam van de eigenaar van het bestand.

  5. vierde kolom: groepnaam van de eigenaar van het bestand.

  6. vijfde kolom: grootte in bytes van het bestand. Gebruik ls -lah voor een weergave van de grootte in kilobyte, megabyte of gigabyte.

  7. zesde tot achtste kolom: datum van de laatste verandering.

  8. negende kolom: de naam van het bestand

[Opmerking]Volledige info

De volledige verklaring van het bovenstaande vind je in info coreutils ls. De man pagina van ls heeft slechts een kort overzicht van de opties.

Wanneer de opgegeven bestandsnaam de naam van een map is, zal voor elk bestand in de map bovenstaande informatie getoond worden. Je krijgt ook de informatie voor de huidige map (die waarvan je de info opvraagt) en de moedermap, de map die de opgevraagde map bevat.

Hoe werkt beveiliging van bestanden?

Grafische weergave

Het beveiligingssysteem van Linux is gebaseerd op dat van UNIX en is op zijn minst even rigide - in sommige gevallen is het zelfs nog strenger. Op een Linuxsysteem behoort elk bestand toe aan een zekere gebruiker en een zekere groep. Deze kenmerken bepalen wie toegang heeft tot het bestand, en wat voor toegang het betreft: lezen, schrijven of uitvoeren. Dit is in zekere mate vergelijkbaar met de eigenschappen van bestanden op MS Windows. Ook met onze Ubuntu kunnen we grafisch de eigenschappen van bestanden opvragen:

Handeling met de muis.

  • Selekteer Bestandsbeheer uit ApplicationsHulpmiddelen.

  • Door met de rechtermuisknop op de naam van een bestand te klikken, komt er een menu tevoorschijn.

  • Kies hier Properties.

  • Selekteer het tabblad Permissions.

Figuur 3.2. Beveiliging van bestanden

Windows-achtig zicht op bestandseigenschappen.

Elk bestand heeft drie soorten toegangsrechten:

  1. Rechten voor de eigenaar van het bestand;

  2. Rechten voor leden van de groep die eigenaar is van het bestand;

  3. Rechten voor gebruikers die noch eigenaar zijn, noch in de groepeigenaar zitten.

Voor elke groep kunnen er drie rechten toegekend worden:

  • Lezen (r van read): je mag de inhoud van het bestand zien.

  • Schrijven (w van write): je mag de inhoud van het bestand veranderen.

  • Uitvoeren (x van execute): indien het een programma betreft, mag je het opstarten. Let wel: voor dit recht is leesrecht een vereiste. Het uitvoerrecht op een map wil zeggen dat je in de map mag gaan.

Tekstuele weergave

Deze drie groepen worden wel eens voorgesteld door de karakters “u” (user), “g” (group) en “o” (others).

De drie groepen worden in de uitgebreide info van ls -l weergegeven in de eerste kolom, tweede tot en met tiende karakter. Je ziet ze in de grafische eigenschappen (zie bovenstaande figuur) ook in “Text view”, bijvoorbeeld voor ons testbestand bestand1 hierboven “-rw-r--r--”. Het eerste streepje duidt erom dat het hier om een gewoon bestand gaat, en dus geen directory of ander speciaal bestandstype. Verder zien we:

  1. Tweede tot en met vierde karakter: “rw-”: toegansrechten voor de eigenaar van het bestand: lezen en schrijven wel, uitvoeren niet (streepje).

  2. Vijfde tot en met zevende karakter: “r--”: toegansrechten voor alle gebruikers in de groep “ubuntu”: lezen wel, schrijven en uitvoeren niet (streepjes).

  3. Achtste tot en met tiende karakter: “r--”: toegansrechten voor alle gebruikers die niet in de vorige categorieëen vallen: lezen wel, schrijven en uitvoeren niet (streepjes).

De toegangsrechten hebben elk een waarde: 4 voor lezen, 2 voor schrijven en 1 voor uitvoeren. Als het recht niet toegekend wordt, heeft het waarde nul. Als we voor elke groep van gebruikers (eigenaar, groepseigenaar en anderen) de waarden samentellen, bekomen we drie cijfers tussen 0 en 7. Dit wordt weergegeven in “Number view”, voor ons testbestand zijn deze cijfers 6 voor de eigenaar, 4 voor de groep en 4 voor de anderen. Deze cijfers kunnen gebruikt worden om de toegangsrechten van een bestand te veranderen op de commandoregel.

Toegangsrechten veranderen

Standaardbeveiliging

Alle bestanden die aangemaakt worden op een Linuxsysteem hebben altijd toegangsbeperkingen. Bestanden die je zelf aanmaakt, zijn per definitie niet uitvoerbaar. Een van de neveneffecten van deze strikte manier van werken is dat je op Linux dus gerust een E-mail met een virus mag openen en het virus downloaden. Het zal gewoon blijven staan waar je het plaatst en verder niets doen, want het zal nooit “automagisch” uitvoerbaar worden - zou het überhaupt al werken op je systeem. Dit komt door het zogenaamde gebruikersmasker of user mask. Dat is een waarde die wordt afgetrokken van de standaard numerieke waarde van de toegangsrechten, die bepaald wordt in een van de bibliotheken op je systeem.

[Opmerking]Automagisch?

Automatisch + magisch.

Handeling met de muis.

Typ het commando umask om het gebruikersmasker te weten te komen:

ubuntu@ubuntu:~$ umask
0022
[Opmerking]Speciale toegangsrechten

We zagen reeds dat de toegangsrechten voor de gebruiker, de groep en de anderen door drie cijfers voorgesteld worden. Er is echter nog een vierde groep van toegangsrechten, met een speciale betekenis. Doorgaans worden die rechten enkel door systeembeheerders gebruikt. We mogen er als gewone gebruiker vanuit gaan dat de waarde van deze speciale rechten gelijk is aan nul. De speciale rechten komen op de eerste positie, vandaar de eerste nul in de maskerwaarde. Het zou bijgevolg dus ook juister zijn om de waarde van de rechten van het testbestand uit het voorbeeld voor te stellen als “0644”. Dit noemen we ook wel eens de octale waarde.

De standaard toegangsrechten voor een gewoon bestand worden in de bibliotheek bepaald als “0666”, dus lezen en schrijven (4+2) voor de drie groepen van gebruikers, zonder speciale rechten. Voor een map is het echter “0777”, lezen, schrijven en uitvoeren (4+2+1) voor de drie groepen, want een map moet uitvoerbaar zijn, anders kan je er niet ingaan. Van deze waarden wordt telkens de waarde van het masker afgetrokken:

Figuur 3.3. Standaard toegangsrechten

Standaard toegangsrechten

Een gewoon bestand heeft dus standaard lees- en schrijrecht voor de eigenaar, en enkel leesrecht voor de groepseigenaar en de gebruikers die niet eigenaar zijn en ook niet in de groep zitten die eigenaar is van het bestand.

Een map heeft naast deze rechten ook uitvoerrecht, anders kan je niet in de map gaan.

[Belangrijk]Testen

Je kan dit nagaan door op eender welke manier een bestand aan te maken. Gebruik het mkdir commando om de standaardrechten op een map te controleren.

[Belangrijk]Het uitvoerrecht op mappen

Probeer het volgende:

Wat gebeurt er?

  • Maak een map aan: mkdir een_map.

  • Neem voor alle gebruikersgroepen het uitvoerrrecht weg door het commando chmod a-x een_map uit te voeren.

  • Probeer cd een_map.

  • Kijk de rechten op de map na met het commando ls -ld een_map.

[Let op]Opgelet met kopiëren!

Als je bestanden kopieert, worden de toegangsrechten overgenomen. Een kopie van een uitvoerbaar bestand zal dus ook uitvoerbaar zijn.

Het chmod commando

Toegansgrechten veranderen met de grafische interface behoeft geen uitleg. Wij gaan hier bespreken hoe je op de commandoregel de rechten van bestanden kan veranderen. Waarom, vraag je je misschien af, het is toch gemakkelijker om een paar keer met de muis te klikken? Vast wel, maar als je bijvoorbeeld op een machine op het Internet bestanden moet manipuleren, of je zit bijvoorbeeld thuis en je moet iets doen op een machine van je bedrijf, zal het doorgaans moeilijk of onmogelijk zijn de grafische interface te gebruiken. Normaliter zal je wel in de mogelijkheid zijn om via een beveiligde verbinding in een terminalvenster te werken.

In een terminalvenster gebruiken we het programma chmod, wat staat voor change mode. Niemand zegt echter de volledige naam van het commando. In het Engels is in de UNIX-en Linuxwereld “to chmod” een algemeen aanvaard werkwoord, en ook in het Nederlands spreken we inmiddels van “chmodden” als we doelen op het veranderen van de toegangspremissies van bestanden of mappen.

De syntax is als volgt:

chmod [optie(s)] mode bestand

De meest gebruikte optie is -R (recursive), om alle bestanden in een map, incluis alle mappen in die map, dezelfde toegangsrechten te geven. De mode kan je bepalen door ofwel de octale waarde van de gewenste permissie op te geven, ofwel door de symbolen u, g en o en r, w en x te gebruiken.

[Belangrijk]Chmod voorbeeld: een script

Een eenvoudig voorbeeld:

Handeling met de muis.

  • Open in ApplicationsHulpmiddelen het Tekst-editor programma.

  • Schrijf daarin het volgende:

    echo "Ik leer Linux"
    
  • Sla het op in je homedirectory door FileSave as te selekteren uit het menu van dit programma.

  • Noem het bestand bijvoorbeeld “mijn_eerste_script” en bewaar door op Save te klikken.

  • Neem nu terug je terminal venster.

  • Controleer met ls of het script in je homedirectory staat. Als je je niet in je homedirectory bevindt, typ dan cd om naar die map te gaan.

  • Een programma uitvoeren dat zich niet in een map in de lijst van de PATH bevindt, doe je door ofwel het volledige pad op te geven, ofwel door een relatief pad op te geven. In dit geval wordt het dus ofwel /home/ubuntu/mijn_eerste_script ofwel ./mijn_eerste_script.

  • Denk eraan om de Bash features te gebruiken en zo weinig mogelijk zelf tekst te typen!

  • Je zal echter merken dat het bestand niet uitvoerbaar is, als je de vervolledigingsfunkties van de shell gebruikt, werkt de Tab-toets zelfs niet eens. Typ je toch manueel de naam van het bestand, dan krijg je een foutmelding:

    ubuntu@ubuntu:~$ ./mijn_eerste_script
    bash: ./mijn_eerste_script: Permission denied
    
  • Gebruiken we nu het chmod commando om het bestand uitvoerbaar te maken:

    ubuntu@ubuntu:~$ chmod 744 mijn_eerste_script
    

    Hiermee geven we aan de eigenaar van het bestand lees-, schrijf- en uitvoerrechten (4+2+1); de andere twee groepen krijgen enkel leesrechten.

  • Probeer nu opnieuw het programma uit te voeren.

Evengoed hadden we het volgende chmod commando kunnen geven:

chmod u+x mijn_eerste_script

Daarbij gaan we uit van de standaard toegansrechten 644, en we voegen het recht op uitvoeren toe aan de rechten van de eigenaar van het bestand.

Overzicht van de octale waarden

Onderstaande tabel probeert ter referentie de numerieke waarden voor toegangscontrole een betekenis te geven.

Tabel 3.2. Bestanden beveiligen met chmod

OpdrachtBetekenis
chmod 400 bestandBescherm een bestand tegen accidenteel overschrijven.
chmod 500 mapBescherm jezelf tegen per ongeluk verwijderen, hernoemen of verhuizen van bestanden of mappen in deze map.
chmod 600 bestandEen priveebestand dat enkel veranderd kan worden door de eigenaar.
chmod 644 bestandEen publiek leesbaar bestand dat enkel veranderd kan worden door de eigenaar.
chmod 660 bestandGebruikers die in dezelfde groep zitten als jij kunnen dit bestand veranderen, anderen hebben geen enkel toegangsrecht.
chmod 700 bestandEnkel de eigenaar heeft alle toegangsrechten, alle andere gebruikers hebben geen enkel recht.
chmod 755 bestandVoor bestanden die leesbaar en uitvoerbaar zijn door andere gebruikers, maar enkel door de eigenaar veranderd kunnen worden.
chmod 770 bestandStandaard mode voor bestandsdeling binnen een groep.
chmod 777 bestandIedereen mag alles.

Volledige achtergrond vind je in man chmod. Mocht je het ooit nodig hebben om bestanden van eigenaar of van groep te veranderen, lees dan ook de man pagina's van de commando's chown en chgrp.

[Tip]Permissies en find

Gebruik het find commando om bestanden met een bepaald recht te zoeken. Less de man pagina van find voor meer info over dit onderwerp.