Dateien und Berechtigungen

Autor: Christian Sommer (doc); Codeschnipsel (pcwacht)

Grundlagen

Jede Datei und jedes Verzeichnis hat unter Unix verschiedene Zugriffsrechte für verschieden Gruppen und ist einem Benutzer zugeordnet.

Dateieigentümer

Jeder, der auf einen Server zugreift, egal ob lokal direkt am Server oder aus der Ferne über FTP, benötigt auf dem Server einen Benutzeraccount mit zugehörigem Kennwort. Jeder Benutzeraccount wiederum ist einer Gruppe zugeordnet. Beispiele für Gruppen, die oft auf einem Webserver zu finden sind, wären ftp-user, root, wwwrun-user.


Entscheidend ist nun: Alle Prozesse wie auch alle Programme, die auf einem System gestartet werden, müssen unter einem bestimmten Benutzer ausgeführt werden. So greift auch der Webserver unter 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 veranlasst hat.

Dateiberechtigungen und Gruppen

Linux Dateisysteme unterscheiden 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 Skripten, 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 stellt keinen wirklichen Wert dar, sondern sagt aus, dass es sich um eine Oktalzahl handelt).

Beispiele

777 - Lesen, Schreiben und 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 jeden 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.

Probleme mit Dateiberechtigungen

Bei der Installation von WebsiteBaker 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 WebsiteBaker 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 wird es dann geben, 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 und Seiten sollten über das WebsiteBaker Backend installiert oder gelöscht werden. Nachträgliche Änderungen oder das Verschieben von Ordnern und Dateien mittels FTP Programm führt letztendlich fast immer zu Problemen.

Dateiberechtigungen prüfen

Sind Probleme mit Dateiberechtigungen aufgetaucht, kann Ihnen das nachfolgende Skript helfen, den Fehler zu lokalisieren. Das Skript wurde von PCWacht vom WebsiteBaker Entwicklungsteam entwickelt und prüft die Dateiberechtigungen aller in WB vorhanden Ordnern und Dateien. Das Skript wurde erfolgreich mit einer Standardinstallation von WebsiteBaker getestet.

Erstellen Sie eine neue Seite vom Typ "Code" und geben den unten stehenden PHP Code ein. Das Skript untersucht die Ordner /templates, /pages, /languages und /media Ihrer WB Installation.

function check_dir($path) {
   sprintf("checking: ".$path."");
   $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.'';
           } else {
              echo '#### Not ok! :'.$file.'';
           }
         }
      }
   }
   closedir($dh);
}
 
check_dir('../temp');
check_dir('../templates');
check_dir('../pages');
check_dir('../languages');
check_dir('../media');

PHP basierte Dateimanager

PHP basierte Dateimanager erlauben das Ändern von Dateiberechtigungen oder Textinhalten all jener 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 heruntergeladen werden kann. Diese Datei muss einfach per FTP ins WB Wurzelverzeichnis kopiert (dorthin, wo auch die Datei config.php zu finden ist) und im Browser aufgerufen werden: http://www.domain.de/webadmin.php.

Warnung:
Webadmin enthält weder Beschränkungen auf den Dateizugriff und noch einen Zugangsschutz. Das Skript sollte also sofort nach Gebrauch wieder per FTP vom Server entfernt werden. Ansonsten gibt man jedem, der mit Suchmaschinen umgehen kann, vollen Zugriff - nicht nur auf die Dateien im WB Wurzelverzeichnis - sondern auf alle Dateien und Ordner auf dem Webserver!

Kopieren Sie Webadmin sicherheitshalber am besten in ein eigenes Verzeichnis innerhalb des WB Wurzelverzeichnisses und schützen dieses 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.