Bestanden en Permissies

Auteur: Christian Sommer (doc); Code snippet (pcwacht)

Heel wat discussies in het WB forum zijn gerelateerd aan problemen die veroorzaakt worden door bestandspermissies op een Linux/Unix gebaseerd Operating Systeem. Dit hoofdstuk bevat de beginselen van bestandspermissies en behandeld manieren om problemen met bestandspermissies te voorkomen.

Beginselen

Alle bestanden of folders op Linux/Unix gebaseerde operating systemen behoren bij een specifieke gebruiker of groep. Dit mechanisme wordt gebruikt om de toegang tot bestanden of folders te beperken.

Bestandseigenaar

Om een bestand op een server te kunnen benaderen, heeft men een gebruikers-account nodig op die server. Over het algemeen is het gebruikers-account beschermd met een wachtwoord en is de gebruiker toegewezen aan een bepaalde groep. De volgende groepen vindt men vaak op webservers: ftp-user, root, wwwrun-user. Alle acties en programma's (bijv. FTP) die worden uitgevoerd, mogen alleen uitgevoerd worden met de permissie van een bepaalde gebruiker.

Opmerking:
Bestanden die ge-uploaded zijn naar de webserver met FTP worden over het algemeen toegewezen aan de groep: ftp-user. Bestanden die worden gecreëerd via een PHP script worden over het algemeen toegewezen aan de groep wwwrun-user. Afhankelijk van de instellingen van uw server kunnen bestanden die door een PHP script werden aangemaakt niet door een FTP-programma gewijzigd of verwijderd worden en omgekeerd. 

Bestandspermissies en groepen

Elk bestand hoort bij een specifieke gebruiker en groep. Toegang tot de bestanden wordt onderhouden door de gebruiker (eigenaar), groep, en zgn. anderen (wereld). De term anderen wordt gebruikt om te refereren naar iemand die niet eigenaar is van het bestand noch een lid is van de groep waar dit bestand toebehoort. Als men spreekt over het wijzigen van permissies voor "anderen", wordt over het algemeen gerefereerd naar de wereld-uitvoeren, -lezen of -schrijven bit aangezien iedereen in de wereld dan de mogelijkheid heeft iets te wijzigen.

De permissies die kunnen worden bepaald voor een gebruiker (eigenaar), groep of anderen staan in onderstaande tabel. 

Permissie Waarde
geen 0
uitvoeren 1
schrijven 2
lezen 4

Tabel 1 - Permissies

Als U wilt dat de eigenaar de mogelijkheid heeft om een bestand te kunnen lezen, schrijven (inclusief verwijderen) en uitvoeren, terwijl anderen alleen het bestand mogen lezen, dient men de volgende waarden te gebruiken: Gebruiker (eigenaar) = 1 + 2 + 4 = 7, Groep = 4, Anderen = 4. De standaard volgorde van vermelding is Eigenaar, Groep, Anderen en dus kan men dit combineren tot 0744. De "0" die vooraf gaat verteld de computer dat het nummer gebaseerd is op het Octale Numeriek systeem.   

Voorbeelden

777 - Lees-, Schrijf- en Uitvoer-permissies voor de gebruiker (eigenaar), groep en anderen (Opmerking: laagste beveiligingsniveau, iedereen kan dit bestand wijzigen of verwijderen)

755 - Lees-, Schrijf-, en Uitvoer-permissies voor de gebruiker. Alle anderen kunnen het bestand lezen en uitvoeren, maar niet wijzigen of verwijderen.

Onthoud:
Elke bestand of folder vereist de permissies voor: eigenaar, groep en anderen. De bestandspermissies worden bepaald door de waarden uit Tabel 1.

Problemen met bestandspermissies

Terwijl U de vereiste installatiebestanden voor Website Baker kopiëert (FTP) naar uw server, zullen alle bestanden en folders toegewezen worden aan het account: ftp-user.

Pagina's die worden toegevoegd via de WB backend, alsmede Add-Ons (modules, templates, taalbestanden), worden uitgevoerd door PHP scripts en worden om die reden toegekend aan het account: wwwrun-user.

Afhankelijk van uw serverinstellingen, kunt U in problemen terecht komen als U probeert om bestanden te verplaatsen of verwijderen met een FTP-programma (ftp-user) die oorspronkelijk aangemaakt zijn door Website Baker zelf (wwwrun-user) en vice versa.

Om dit soort problemen te voorkomen dient men template bestanden die geïnstalleerd zijn via de WB backend, alleen te wijzigen met behulp van het beheer tool Template Edit. Als U een bestand toevoegt aan de template folder met behulp van FTP, kunt U wellicht dat template niet meer verwijzeren via de WB backend, omdat het betreffende bestand toegewezen is aan de gebruiker ftp-user.

Aanbeveling:
Gebruik ten alle tijde de WB backend om Extra's te installeren, zoals Modules, Templates of Taalbestanden. Pagina's dienen ten alle tijde toegevoegd of verwijderd te worden via het WB backend menu: Pagina's. Vroeg of laat kunt U probelemen verwachten als U bestanden gaat verwisselen die zijn toegewezen aan ftp-user en wwwrun-user.

Check bestandspermissies

PCWacht van het Website Baker Development Team heeft een klein stukje PHP code gemaakt (ook wel "snippet" genoemd) dat kan worden toegevoegd aan een standalone PHP pagina ("pages" folder van WB) ofwel als een WB-Code pagina. Deze pagina laat zien of the permissies OK zijn. Dit zal alleen werken in een standaard WB installatie.

Maak simpelweg een nieuwe pagina aan van het type Code en plak daarin de volgende code. De code checkt de folders: /templates, /pages, /languages and /media van uw WB installatie.

function check_dir($path) {
echo "<h1>checking: ".$path."</h1>";
$dh = opendir($path);
while (($file = readdir($dh)) !== false) {
if ($file<>'.' && $file<>'..') {
if (is_dir($path.'/'.$file)) {
check_dir($path.'/'.$file);
} else {
if (is_writable($path.'/'.$file)) {
echo 'Green :'.$file.'<br>';
} else {
echo '#### Not ok! :'.$file.'<br>';
}
}
}
}
closedir($dh);
}

check_dir('../temp');
check_dir('../templates');
check_dir('../pages');
check_dir('../languages');
check_dir('../media');

PHP gebaseerde file managers

Als U bestandspermissies dient te wijzigen of tekstbestanden wilt aanpassen die niet toegankelijk zijn via FTP, kunt U een van de PHP gebaseerde file managers proberen die op het WWW beschikbaar zijn.

Een krachtige file manager is het script Webadmin van Daniel Wacker. Download simpelweg het enkele bestand vanaf de project pagina van de auteur en upload deze via FTP naar de root van uw WB installatie (waar het bestand config.php staat). Het script wordt opgestart met behulp van uw browser:  http://www.domain.com/webadmin.php

Waarschuwing:
Webadmin heeft geen beperkingen of mogelijkheden om gebruikers te autoriseren. U dient voorzichtig te zijn in verband met veiligheid. Het script dient verwijderd te worden als U klaar bent. Mocht U dat niet doen, dan bestaat de mogelijkheid voor iedereen om volledige toegang te verkrijgen tot al uw bestanden en folders.

De beste methode is het uploaden van Webadmin naar een folder in de WB root directory en deze folder te beschermen door middel van het .htaccess en .htpasswd mechanisme van de Apache webserver.

Een andere goede PHP gebaseerde file manager met gebruikers-autentificatie (bestaat uit meer bestanden) is QuiXplorer by Felix C. Stegerman.