Beetje Coderen

Les 4

Gebruikers en rechten

Wie mag wat: gebruikers, groepen, chmod, chown en sudo.

⏱ 45–60 minuten leestijd + oefenen

🎯 Na deze les kun je

  • rechten lezen in ls -l
  • rechten wijzigen met chmod en chown
  • sudo verantwoord gebruiken

Linux is vanaf het begin gebouwd voor meerdere gebruikers op één computer. Een webserver mag de websitebestanden lezen, maar niet je wachtwoorden. Een collega mag je projectmap bewerken, maar een willekeurige andere gebruiker niet. Dat regelt Linux met gebruikers, groepen en rechten op elk bestand. Wie een server beheert, komt rechtenproblemen dagelijks tegen: "Permission denied" is een van de meest voorkomende foutmeldingen. In deze les leer je die lezen en oplossen, en leer je verantwoord omgaan met beheerrechten.

Gebruikers en groepen

Elke gebruiker heeft een naam en een nummer (UID), en hoort bij een of meer groepen (GID). Met id zie je wie je bent:

$ id
uid=1000(student) gid=1000(student) groups=1000(student),27(sudo),1001(webteam)
  • student is lid van zijn eigen groep student, van sudo (mag beheerderscommando's uitvoeren) en van webteam.
  • Gebruikers staan in /etc/passwd, groepen in /etc/group. Bekijk ze gerust met less; wachtwoorden staan er niet in (die staan versleuteld in /etc/shadow, alleen leesbaar voor root).
  • Veel gebruikers zijn geen mensen maar diensten, zoals www-data voor de webserver. Zo draait elke dienst met zo min mogelijk rechten.

Er is één bijzondere gebruiker: root (UID 0). Root mag alles, ook alles kapotmaken.

Rechten lezen in ls -l

$ ls -l
-rw-r--r-- 1 student student  320 Oct 12 10:15 notities.txt
-rwxr-xr-x 1 student student  812 Oct 12 10:16 backup.sh
drwxrws--- 2 student webteam 4096 Oct 12 10:17 project

Het eerste blok van tien tekens lees je zo:

 d   rwx   rws   ---
 β”‚    β”‚     β”‚     └── rechten voor anderen (others)
 β”‚    β”‚     └──────── rechten voor de groep (group)
 β”‚    └────────────── rechten voor de eigenaar (user)
 └─────────────────── soort: - = bestand, d = map, l = link

Daarna volgen het aantal links, de eigenaar, de groep, de grootte, de datum en de naam.

Recht Bij een bestand Bij een map
r (read) inhoud lezen de lijst met namen zien (ls)
w (write) inhoud wijzigen bestanden erin maken, hernoemen, verwijderen
x (execute) uitvoeren als programma de map binnengaan (cd) en bestanden erin openen

Let op het verschil bij mappen. Of je een bestand mag verwijderen, hangt af van de w op de map, niet op het bestand. En zonder x op een map kom je er niet in, zelfs als je r hebt.

Linux controleert in volgorde: ben je de eigenaar, dan gelden de eigenaarsrechten. Anders: zit je in de groep, dan gelden de groepsrechten. Anders gelden de rechten voor anderen.

Octale notatie

Rechten worden vaak als getal geschreven. Elk recht heeft een waarde, en per groep tel je ze op:

r w x
4 2 1
Rechten Optelling Getal
rwx 4+2+1 7
rw- 4+2 6
r-x 4+1 5
r-- 4 4
--- 0 0

Drie cijfers achter elkaar zijn eigenaar, groep en anderen. Veelgebruikte combinaties:

Getal Rechten Gebruikt voor
644 rw-r--r-- gewone bestanden: jij schrijft, iedereen leest
600 rw------- privΓ©bestanden, zoals SSH-sleutels (les 10)
755 rwxr-xr-x scripts en gewone mappen
700 rwx------ privΓ©mappen
770 rwxrwx--- gedeelde map voor een groep

chmod: rechten wijzigen

chmod 644 notities.txt          # octaal
chmod 755 backup.sh
chmod u+x backup.sh             # symbolisch: eigenaar krijgt x erbij
chmod g-w,o= notities.txt       # groep verliest w, anderen krijgen niets
chmod -R g+w project            # recursief voor een hele map

In de symbolische vorm is u de eigenaar (user), g de groep, o de anderen en a iedereen. + geeft erbij, - haalt weg, = zet precies. stat -c '%a %A' bestand toont de rechten als getal en als tekst naast elkaar.

chown: eigenaar en groep wijzigen

sudo chown sam rapport.txt              # nieuwe eigenaar
sudo chown sam:webteam rapport.txt      # eigenaar en groep
sudo chgrp webteam rapport.txt          # alleen de groep
sudo chown -R www-data:www-data /var/www/site

Een bestand aan iemand anders geven mag alleen root, vandaar de sudo.

Sudo en root

Inloggen als root is riskant: elke tikfout heeft volledige rechten. Daarom werk je als gewone gebruiker en zet je sudo (superuser do) alleen voor een commando dat beheerrechten nodig heeft:

$ cat /etc/shadow
cat: /etc/shadow: Permission denied
$ sudo cat /etc/shadow
[sudo] password for student:

sudo vraagt jouw wachtwoord, en werkt alleen als je in de groep sudo (op Debian/Ubuntu) of wheel (op Fedora/RHEL) zit. Elk sudo-commando wordt gelogd.

Regels voor verantwoord gebruik:

  • Gebruik sudo alleen als het commando zonder faalt en je begrijpt waarom het rechten nodig heeft.
  • Los "Permission denied" niet op met chmod 777. Dat geeft iedereen alle rechten, ook kwaadwillenden. Zoek uit wie toegang nodig heeft en geef precies dat.
  • Werk niet langdurig in een root-shell (sudo -i). Doe je klus en exit.

sudo rm -rf met een tikfout kan een heel systeem wissen. Hoe meer rechten, hoe zorgvuldiger je typt. Lees een sudo-commando altijd nog één keer voor je op Enter drukt.

Een gedeelde map voor een groep

Een veelvoorkomende taak: een map waarin een team samen werkt.

sudo groupadd webteam                    # groep maken
sudo usermod -aG webteam sam             # sam toevoegen (let op -a!)
sudo usermod -aG webteam noor
sudo mkdir /srv/website
sudo chown root:webteam /srv/website
sudo chmod 2770 /srv/website
  • usermod -aG voegt een groep toe. Zonder -a vervang je alle andere groepen van de gebruiker; een klassieke fout.
  • Groepslidmaatschap geldt pas na opnieuw inloggen.
  • De 2 vooraan in 2770 is het setgid-bit: nieuwe bestanden in deze map krijgen automatisch de groep webteam, in plaats van de persoonlijke groep van wie ze maakt. In ls -l zie je dat als een s op de plek van de groeps-x: drwxrws---.

Oefenen

Oefening 1. Lees: -rw-r----- 1 sam webteam 2048 Oct 12 begroting.xlsx. Wie mag wat? Wat is het octale getal?

Modelantwoord oefening 1

Sam (eigenaar) mag lezen en schrijven; leden van webteam mogen lezen; anderen niets. Octaal: 640.

Oefening 2. Je script backup.sh geeft Permission denied bij ./backup.sh. ls -l toont -rw-r--r--. Wat doe je?

Modelantwoord oefening 2

Het bestand mist het x-recht. chmod u+x backup.sh (of chmod 755 backup.sh als anderen het ook mogen uitvoeren). Geen sudo nodig: je bent zelf de eigenaar.

Oefening 3. Een collega stelt voor om een probleem met de webserver op te lossen met sudo chmod -R 777 /var/www. Waarom is dat een slecht idee, en wat is beter?

Modelantwoord oefening 3

777 geeft elke gebruiker en elk proces op het systeem schrijfrechten op de hele website. Wordt één dienst gehackt, dan kan de aanvaller je site aanpassen. Beter: zoek uit welke gebruiker toegang nodig heeft (bijvoorbeeld www-data alleen lezen), en geef precies dat, zoals chown -R root:www-data /var/www/site met mappen op 750 en bestanden op 640.

Lab: een gedeelde projectmap

  1. Start het lab: docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les4. Je bent student en mag sudo gebruiken; de gebruikers sam en noor bestaan al.
  2. Maak de groep webteam en voeg sam en noor toe (niet jezelf).
  3. Maak /srv/project met groep webteam, rechten 2770.
  4. Maak in /srv/project een bestand README.txt dat iedereen in de groep kan lezen en bewerken (660).
  5. Zet in je thuismap het bestand geheim.txt op 600.
  6. Test: sudo -u sam touch /srv/project/test.txt moet lukken, en het nieuwe bestand moet groep webteam hebben. sudo -u noor cat ~/geheim.txt moet mislukken.
  7. Controleer met beetje check les4.

Samenvatting

  • Elke gebruiker heeft een UID en groepen; id laat ze zien. Root (UID 0) mag alles.
  • ls -l toont rechten voor eigenaar, groep en anderen: r lezen, w schrijven, x uitvoeren of binnengaan.
  • Octaal: r=4, w=2, x=1. Veelgebruikt: 644, 600, 755, 700, 770.
  • chmod wijzigt rechten, chown eigenaar en groep.
  • Gebruik sudo per commando en met beleid; los rechtenproblemen nooit op met 777.

In les 5 leer je bestanden bewerken in de terminal met nano en vim, en veilig configuratiebestanden aanpassen.

Lab

Een gedeelde projectmap voor een groep inrichten

πŸ’» Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):

$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les4

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker. Voor dit lab is er geen live lab in de browser.

Klaar? Controleer je werk met:

$ beetje check les4

πŸ“ Quiz: gebruikers en rechten

6 vragen Β· 70% nodig om te slagen

1. Wat betekent `-rwxr-x---`?
2. Welk octaal getal hoort bij `rw-r--r--`?
3. Welk recht op een map heb je nodig om er met cd in te gaan?
4. Wat doet `sudo usermod -G webteam sam` (zonder -a)?
5. Waarom is `chmod 777` geen goede oplossing voor 'Permission denied'?
6. Wat bepaalt of je een bestand mag verwijderen?