Bestandsrechten op je VPS lezen en goed zetten
Elk bestand en elke map op je VPS heeft een eigenaar, een groep en rechten. Staan ze te ruim, dan kan een gehackte website of dienst overal in schrijven. Staan ze te streng, dan krijg je fouten als "Permission denied" of een 403 op je website. Hier lees je hoe je rechten leest en goed zet. Heb je een hostingpakket met DirectAdmin, kijk dan bij Forbidden (403): You don't have permission to access / on this server.
Rechten lezen met ls -l
ls -l /var/www/example.com -rw-r--r-- 1 anna www-data 1520 index.html -rw-r----- 1 anna www-data 412 config.php drwxr-xr-x 2 anna www-data 4096 images drwxrwxr-x 2 www-data www-data 4096 uploads
Het eerste teken is het soort: - is een bestand, d een map, l een snelkoppeling. Daarna volgen drie groepjes van drie tekens: wat de eigenaar mag, wat de groep mag en wat iedereen anders mag. Daarna staan de eigenaar (anna) en de groep (www-data).
| Letter | Bij een bestand | Bij een map |
|---|---|---|
r | Lezen | De namen in de map opvragen |
w | Wijzigen | Bestanden aanmaken, hernoemen en verwijderen |
x | Uitvoeren als programma | De map binnengaan en bestanden erin openen |
Let op twee dingen. Zonder x op een map kom je niet bij de bestanden erin, ook al zijn die leesbaar. En wie w heeft op een map, kan er bestanden in verwijderen, ook als ze van een ander zijn.
Rechten als getal
Vaak schrijf je rechten als drie cijfers: r telt 4, w 2 en x 1, opgeteld per groepje.
| Getal | Rechten | Gebruik |
|---|---|---|
| 644 | rw-r--r-- | Gewoon bestand, bijvoorbeeld een webpagina of afbeelding |
| 755 | rwxr-xr-x | Map, of een programma dat iedereen mag gebruiken |
| 640 | rw-r----- | Configuratie met een wachtwoord, leesbaar voor de webserver via de groep |
| 600 | rw------- | Geheim bestand, zoals authorized_keys, een privésleutel of een .env-bestand |
| 700 | rwx------ | Privémap, zoals ~/.ssh |
Rechten en eigenaar wijzigen
chmod 640 /var/www/example.com/config.php chmod g+w /var/www/example.com/uploads sudo chown anna:www-data /var/www/example.com/config.php
chmod wijzigt de rechten, met een getal of met letters (u, g, o voor eigenaar, groep en overig, met + of -). chown eigenaar:groep wijzigt eigenaar en groep; dat mag alleen root, dus met sudo.
Voor een hele map is chmod -R 644 een bekende fout: alle submappen verliezen dan hun x en worden onbruikbaar. Zet mappen en bestanden apart met find:
sudo find /var/www/example.com -type d -exec chmod 755 {} +
sudo find /var/www/example.com -type f -exec chmod 644 {} +
De webserver via de groep
Op Debian en Ubuntu draaien nginx en PHP-FPM standaard onder de gebruiker www-data. Een nette indeling: jij bent eigenaar van de bestanden, de groep is www-data. De webserver mag dan lezen via de groep, en schrijven alleen in de map waar dat echt moet, zoals uploads (chmod g+w of eigenaar www-data op alleen die map). Geef de webserver geen schrijfrecht op je PHP-bestanden.
777. Dan mag iedereen op de server het bestand of de map lezen, wijzigen en uitvoeren. Gaat er ooit één website of dienst mis, dan kan de inbreker overal in schrijven waar 777 op staat. Het echte probleem is bijna altijd de eigenaar of de groep: los dat op in plaats van alles open te zetten.Rechten voor SSH
De SSH-server controleert de rechten van je sleutels. Mogen anderen in je .ssh-map of je thuismap schrijven, dan negeert hij je sleutel en krijg je weer een wachtwoordvraag, zonder duidelijke foutmelding. Zet het zo:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Heb je de map als root voor een andere gebruiker gemaakt, zet dan ook de eigenaar goed, zoals in Een eigen gebruiker met sudo. Op AlmaLinux en Rocky Linux kan ook SELinux een bestand weigeren dat de juiste rechten heeft; bij een handgemaakte .ssh-map helpt restorecon -Rv ~/.ssh.
s in plaats van een x, zoals bij /usr/bin/passwd? Dat is het setuid-bit: het programma draait dan met de rechten van de eigenaar. Een paar systeemprogramma's hebben dat nodig, maar zet het nooit zelf op een script. Een onverwacht setuid-bestand kan wijzen op een inbraak, zie Gehackt? De eerste stappen.Meer leren? Volg de gratis cursus VPS en Linux-serverbeheer, les 3.1 Gebruikers, groepen en bestandsrechten.
