Ultimative Lösung des Problems der Nutzerrechte in /var/www/html/

Seit Jahren kämpfen Web-Developer mit dem Problem mit den Benutzerrechten in /var/www/html/. Mal schnell ein kleines PHP-Skript direkt auf der Kommandozeile zu schreiben sah bspw. immer aus wie folgend:

sudo vim phpinfo.php
sudo chown www-data:www-data phpinfo.php

Oder man hat eine weitere Gruppe erstellt, falls mehrere Nutzer (grundsätzlich ohne Root-Rechte) die Dateien bearbeiten dürfen sollten. Ich habe auch Ansätze gesehen in der die Apache-Konfiguration auf ein Verzeichnis im Home-Directory zeigt oder einfach mit symbolischen Links gearbeitet wurde.

Nun habe ich nach so vielen Jahren die ultimative Lösung entdeckt und dies möchte ich  in meinem aller ersten Blogpost mit euch teilen.

Die Lösung heißt bindfs und macht was der Name bereits vermutet, nämlich bindet ein Verzeichnis in das Dateisystem ein. Das Webverzeichnis wird in eurem Home-Verzeichnis gemountet. Man arbeitet mit den Verzeichnissen und Dateien als wäre man der Besitzer, wobei sie tatsächlich dem Web-Server gehören. Das löst sämtliche Probleme, die wir bisher hatten:

  • concurrency problem – wenn ein Entwickler eine Datei erstellt, gehört sie dem Entwickler und der Webserver funktioniert unter Umständen nicht richtig, da ihm Lese- bzw. Schreibrechte fehlen
  • impermeability problem – wenn man mehrere Web-Applikationen auf dem Server laufen hat und verhindern möchte das Entwickler A die Web-Applikation B ändern kann, musste man sich bisher noch viel mehr mit Gruppen und Untergruppen herumschlagen
  • stability problem – im Laufe der Zeit werden die Web-Applikationen immer umfangreicher, neue Entwickler kommen zu einem Projekt hinzu oder verlassen die Firma. Die Rechtevergabe wird schnell unüberschaubar und Fehler wegen fehlenden
Du fragst dich, warum man nicht einfach jedem Lese- und Schreibrechte geben sollte?

Solltest du dich das wirklich fragen, dann hoffe ich, dass man dir keine Root-Rechte erteilt für ein Produktiv-System mit sensiblen Kundendaten und hohen Kosten  bei Ausfällen.
Nämlich aus diesem Grund. Um Leute, die nicht wirklich wissen, was sie da tun, den Zugriff zu verweigern, damit sie keinen Schaden anrichten können. Und selbstverständlich aus diversen weiteren Sicherheitsgründen.
Ein ausreichendes Verständnis für Sicherheit ist auch im Leben eines Entwicklers essentiell und ich werde auch regelmäßig zu diesem Thema Beiträge veröffentlichen.

Meine Empfehlung an euch: Benutzt ein Ubuntu Linux

Ich arbeite auf Ubuntu 16.04 LTS auf meinem Notebook und mit Ubuntu 16.04 Server auf meinem Dedicated-Server, folglich ist diese und alle folgenden Anleitungen für dieses System ausgelegt. Vermutlich funktionieren diese mit anderen Linux-Distributionen ziemlich ähnlich. Wer nur sein Windows zur Verfügung hat, sollte sich Gedanken darüber machen ein Linux-System einzurichten. Dazu könnt ihr Windows und Linux im Dual-Boot benutzen, einen alten Rechner herauskramen (eventuell einen eigenen Home-Server einrichten) oder euch einen virtuellen Server für kleines Geld anmieten.
Fall ihr absolut nichts davon tun könnt, wollt oder euch nicht zutraut, so gibt es auch die Möglichkeit eine Ubuntu Bash für Windows zu installieren. Das ist kein wirkliches Ubuntu-Linux, fühlt sich jedoch sehr danach an und dies habe ich auch schon auf meinem Gaming-PC ausprobiert. In Kürze schreibe ich dazu einen Blog-Post und werden ihn hier auch verlinken.

Ubuntu Bash für Windows 10

Ich empfehle euch dringend euch mit Linux auseinanderzusetzen, denn Linux ist allgegenwärtig und ein Must-Have-Skill in eurem Lebenslauf.

Da das alles nun geklärt ist, kommen wir nun dazu, wie man bindfs einrichtet

Als erstes öffnen wir unser Terminal mit (Strg + Alt + T), installieren bindfs, erstellen einen Ordner in unserem Home-Verzeichnis und bearbeiten unsere /etc/fstab:

sudo apt install bindfs
# optional, falls ihr euch bereits im Homeverzeichnis befindent
cd
# der Ordner für eure Applikation
mkdir app1
# fstab bearbeiten mit einem Editor eurer Wahl, z.B. nano
sudo vim /etc/fstab

Ich benutze grundsätzlich vim, was nicht gerade anfängerfreundlich ist. Es ist jedoch sehr komfortabel, wenn man sich daran gewöhnt hat. Mit dem Befehl vimtutor kommt ihr auf ein nettes Tutorial zu vim. Ansonsten ersetzt ihr oben einfach vim mit nano oder eurem Lieblings-Editor.
In /etc/fstab passiert nun die Magie. Fügt folgende Zeile (ganz am Ende) hinzu und ersetzt webdev1 und app1 mit eurem Benutzernamen und euer Verzeichnis für die Applikation.

# for Web Development
bindfs#/var/www/html /home/webdev1/app1 fuse force-user=webdev1,force-group=webdev1,create-for-user=www-data,create-for-group=www-data,create-with-perms=0770,chgrp-ignore,chown-ignore,chmod-ignore 0 0 

Speichert die Datei ab und mountet den Ordner mit mount /home/webdev1/app1. Das müsst ihr nur einmal machen, denn alles was in /etc/fstab steht, wird automatisch beim Systemstart gemountet.

Nun könnt ihr in eurem eigenem Verzeichnis arbeiten ohne ständig die Rechte ändern zu müssen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.