htaccess-Schutz: wo einstellen?

veröffentlicht von gngn am Mo., 16.08.2021 - 10:15

Gängige Praxis, nicht nur bei uns: Test-Systeme, auf denen die Kundin neue Features testen kann, ohne dass gleich das Live-System aktualisiert wird. Das soll dann aber nicht für die ganze Welte erreichbar sein... wir verwenden apache als Webserver, dort ist die wohl häufigste Lösung der sogenannte htaccess-Schutz, im einfachsten Fall etwas so:

AuthType Basic
AuthName "Unser Test-System"
AuthUserFile /path/outside/of/webroot/.htpasswd
Require valid-user

Wie viele andere Systeme liefert Drupal eine eigene .htaccess-Datei, in der etliche andere Dinge eingestellt sind  (der Begriff htaccess-Schutz ist daher nicht wirklich korrekt, hat sich aber eingebürgert). Naheliegend ist dann einfach die entsprechenden apache-Anweisungen in diese mitgelieferte .hatccess einzufügen - damit handele ich mir aber neue Probleme ein:

  • Gerade Core-Security-Updates ändern gerne mal die .htaccess.
  • Wenn ich aber selber vorher schon Änderungen vorgenommen habe , muss ich jetzt anfangen zu mergen (und kann nur hoffen, das meine Änderungen kommentiert sind und am besten am Anfang der Datei stehen...)

Aus unserer Sicht ist es daher sinnvoll, die aktuelle .htaccess-Version unverändert in der Versionsverwaltung zu haben (siehe /blog/security-review-htaccess-und-was-gehoert-ins-git).
Wohin dann aber mit den Anweisungen für den Zugriffsschutz? Unsere Antwort: direkt in die Apache-vhost-Datei (üblicherweise in /etc/apache2/sites-available und ver-sym-links in /etc/apache2/sites-enabled). Die sieht normalerweise etwa so aus:

<VirtualHost 172.16.17.121:80>
        ServerName hilo-ext.dev12.computer-manufaktur.net
        DocumentRoot /path/to/webserver/root
        <Directory "/path/to/webserver/root">
                AllowOverride All
                Options FollowSymlinks
                Require all granted
                RewriteEngine on
                RewriteBase /path/to/webserver/root
        </Directory>

</VirtualHost>

Für den Zugriffsschutz fügen wir eine neue Direktive Location innerhalb von VirtualHost (nicht innerhalb von Directory) ein:

<VirtualHost ...>
        ...
        <Directory ...>
                ...
        </Directory>
        <Location />
                AuthType Basic
                AuthName "Unser Test-System"
                AuthUserFile /path/outside/of/webroot/.htpasswd
                Require valid-user
        </Location>
</VirtualHost>

Der "/" bei " "<Location />" sorgt dafür, dass die Einschränkung bei allen Aufrufen greift (siehe https://httpd.apache.org/docs/2.4/mod/core.html#location).

Danach apache config testen (guter Stil bei Änderungen an der vhost-Datei):
# apache2ctl configtest

und dann Apache neu starten:
# apache2ctl restart

Et voila.

---

Nachtrag: eine Alternative zu htaccess-Schutz bietet das Drupal Modul shield (https://www.drupal.org/project/shield).

 

Tags

Neuen Kommentar hinzufügen