Autor: Christian Sommer (doc); Codeschnippsel (pcwacht)
Da im Forum immer wieder Fragen zum Thema Dateiberechtigungen auftauchen, soll an dieser Stelle ein kurzer Einblick in die Grundlagen der Dateirechte unter Linux gegeben werden.
Jede Datei und jedes Verzeichnis hat unter Unix verschiedene Zugriffsrechte für verschieden Gruppen und ist einem Benutzer zugeordnet.
Jeder, der auf einen Server zugreift, egal ob lokal direkt am Server oder aus der Ferne über FTP, benötigt einen Benutzeraccount auf dem Server. Dazu gehört natürlich auch ein Kennwort. Jeder Benutzeraccounts ist einer Gruppe zugeordnet. Beispiele für Gruppen, die oft auf einem Webserver zu finden sind, wären ftp-user, root, wwwrun-user.
Wichtig ist also: Alles was auf einem System gemacht wird und jedes Programm, welches gestartet wird, wird unter einem bestimmten Benutzer ausgeführt. Auch der Webserver greift mit einem Benutzeraccount auf Dateien zu und auch Ihre FTP-Zugangsdaten sind nichts anderes als Benutzerkonten des Webservers.
Hinweis:
Dateien die per FTP auf den Webserver geladen werden, erhalten als Dateieigentümer Ihren FTP-Account (ftp-user). Gleichzeitig werden diese Dateien auch der Gruppe zugewiesen, in welcher sich Ihr FTP-Account befindet.
Erstellt hingegen ein PHP Skript eine Datei, ist der Dateieigentümer und die Gruppe das PHP Skript (wwwrun-user), welches die Datei erstellt hat. Sie können diese Datei dann nicht ohne weiters mit dem FTP Programm löschen oder umbenennen. Wird eine Datei neu erzeugt, so ist ihr Eigentümer immer derjenige, der die Aktion veranlasste.
Linux Dateisysteme unterscheiden die drei Gruppen Besitzer (owner), Gruppe (group) und Alle anderen (world). Für alle diese Gruppen können unter Linux individuelle Dateiberechtigungen vergeben werden. Grundsätzlich gibt es die Optionen "Lesen", "Schreiben", "Ausführen". Die Berechtigung "Ausführen" ist auf einem Webserver meist nicht von Interesse (zumindest nicht bei PHP Scripten, da diese vom Webserver nur eingelesen werden).
Diese Berechtigungen können nun für den Besitzer, die Gruppe und für Sonstige (also alle anderen) festgelegt werden. Die Berechtigungen werden meist als Nummern geschrieben. Dabei bedeutet:
| Berechtigung | Wert |
| keine Berechtigung | 0 |
| darf ausführen | 1 |
| darf schreiben | 2 |
| darf lesen | 4 |
Tabelle 1 - Werte der Dateiberechtigungen
Möchten wir also z.B. festlegen, dass eine Datei vom Besitzer gelesen, überschrieben (auch gelöscht) und ausgeführt werden darf, alle anderen diese Datei aber nur lesen dürfen, würde dies bedeuten: Eigentümer = 1 + 2 + 4 = 7, Gruppe = 4, Sonstige = 4. Da die Rechte immer in dieser Reihenfolge geschrieben werden ist die übliche Schreibweise hierfür 0744 (die "0" am Anfang sagt aus, dass es sich um "octale" Zahlen handelt und stellt keinen wirklichen Wert dar).
777 - Lesen, Schreiben and Ausführen der Datei für Besitzer, Gruppe und alle anderen möglich (Achtung: niedrigste Sicherheitsstufe, jeder kann die Datei verändern!)
755 - Lesen, Schreiben und Ausführen sind nur dem Besitzer der Datei erlaubt. Alle anderen dürfen die Datei nur lesen und ausführen, aber nicht verändern (schreiben/löschen).
Zusammenfassung:
Für jede Datei oder Ordner werden also immer drei Zahlen benötigt (owner, group, world). Die Dateiberechtigung der drei Gruppen wird durch einfache Addition der in Tabelle 1 dargestellten Zahlen festgelegt.
Bei der Installation von Website Baker werden alle Dateien per FTP auf den Webserver geladen. Als Eigentümer und Gruppe wird automatisch der ftp-user zugewiesen.
Seiten, die über die Seitenverwaltung von WB erstellt werden, sowie alle Erweiterungen, Designvorlagen oder Sprachdateien, die über das Administrationspanel von Website Baker installiert wurden, werden von PHP Skripten erstellt und sind somit dem wwwrun-user zugewiesen (Besitzer und Gruppe).
Soweit so gut. Zu Problemen kann es immer dann kommen, wenn bestehende Dateien mittels FTP verschoben oder umbenannt werden sollen. Dateien, die von PHP Skripten erzeugt wurden lassen sich unter Umständen nicht verschieben, da das FTP Programm (ftp-user) keine Berechtigung hat, von PHP generierte Dateien (wwwrun-user) zu verschieben. Laden Sie z.B. die index.php Datei Ihres Templates herunter, um diese lokal zu ändern und spielen diese anschliessend per FTP zurück, wird deren Berechtigung von wwwrun-user auf ftp-user geändert. Probleme gibt es dann, wenn ein PHP Skript versucht diese Datei zu ändern oder zu löschen (z.B. beim deinstallieren des Templates über das Backend von WB).
Empfehlung:
Installieren Sie Dateien mit den dafür vorgesehenen Funktionen von WB. Erweiterungen, Module, Sprachdateien, Seiten sollten über das Website Baker backend installiert oder gelöscht werden. Nachträgliche Änderungen oder das verschieben von Ordnern und Dateien mittels FTP Programm führt fast immer irgendwann zu Problemen.
Sollten doch einmal Probleme mit Dateiberechtigungen auftauchen, kann das nachfolgende Skript Ihnen helfen, den Fehler zu lokalisieren. Das Skript wurde von PCWacht vom Website Baker Entwicklungsteam entwickelt und prüft die Dateiberechtigungen aller in WB vorhanden Ordner und Dateien. Das Skript wurde erfolgreich mit einer Standardinstallation von Website Baker getestet.
Erstellen Sie eine neue Seite vom Typ: Code und geben Sie nachfolgenden PHP Code ein. Das Skript untersucht die Ordner: /templates, /pages, /languages und /media Ihrer WB Installation.
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');
Dieser Code dient der Fehlersuche auf Linux/Unix basierten Webservern. Das Skript ist nicht für Windows basierten Webserver wie IIS konzepiert.
PHP basierte Dateimanager erlauben das ändern von Dateiberechtigungen oder Textdateien von Dateien, die nicht über FTP angesprochen werden können. Eine einfache Websuche fördert zahlreiche brauchbare PHP basierte Dateimanager zu Tage.
Ein mächtiger Dateimanager ist Webadmin von Daniel Wacker. Er besteht aus einer einzigen Datei, welche von der Projektseite des Autors herunter geladen werden kann. Diese Datei muss einfach per FTP ins WB Wurzelverzeichnis kopieren (dort wo auch die Datei config.php zu finden ist) und im Browser aufrufen: http://www.domain.de/webadmin.php.
Warnung:
Webadmin enthält keinerlei Beschränkungen auf den Dateizugriff und keinerlei Zugangsschutz. Das Skript sollte also sofort nach Gebrauch wieder per FTP entfertn werden. Ansonsten gibt man jedem der mit Suchmaschinen umgehen kann vollen Zugriff auf alle Dateien und Ordner (nicht auf die Dateien im WB Wurzelverzeichnis beschränkt) auf dem Webserver!!!
Kopiere Webadmin am besten in ein eigenes Verzeichnis innerhalb des WB Wurzelverzeichnises und schütze dieses Verzeichnis dann mittels .htaccess und .htpasswd Schutzmechanismen des Apache Webservers.
Eine gute alternative zu Webadmin ist der Dateimanager QuiXplorer von Felix C. Stegerman. Dieser Dateimanager bringt eine rudimentäre Zugriffsbeschränkung mit, besteht aber aus mehreren Dateien.
Copyright (c) 2007 Website Baker Hilfe Team
Text und Bilder dieser Seite unterliegen den Bestimmungen der Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Lizenz. Sie dürfen den Inhalt für nicht kommerzielle Zwecke vervielfältigen und verbreiten, solange dieser unverändert übernommen wird, der Copyright Hinweis bestehen bleibt und ein Link zu http://websitebaker.org angegeben wird.