Verzeichnisse und Dateien mit Passwort schützen

Schutz via Controlpanel

Onlime bietet dir einen einfach zu bedienenden Verzeichnisschutz-Manger via Controlpanelopen in new window, Menüpunkt Verzeichnisschutz.

Richte als erstes eine Passwort-Liste ein mittels "Neues Profil anlegen":

Beim Hinzufügen eines weiteren Benutzers zur selben Passwort-Liste, kannst du die bereits bestehende Passwort-Liste auswählen:

Klicke nun oben im Abschnitt Geschützte Verzeichnisse auf "+ Verzeichnis schützen". Du kannst nun das Verzeichnis auswählen und eine Passwort-Liste ("Berechtigungs-Profil") zuweisen:

👏 That's it! Das Verzeichnis ist nun geschützt und nur die eingerichteten Benutzer haben Zugang darauf:

Schutz via .htaccess

TIPP

Dies ist die Anleitung für das manuelle Einrichten eines Verzeichnisschutzes via .htaccess. Alternativ kannst du jedoch auch einfach unseren Verzeichnisschutz-Manager via Controlpanel verwenden. Das Resultat ist dasselbe!

.htaccess-Dateien sind verzeichnisspezifisch. Speichere die .htaccess-Datei also in demjenigen Verzeichnis ab, in dem die zu schützenden Daten liegen. Du kannst wahlweise das ganze Verzeichnis mit all seinen Unterverzeichnissen oder nur bestimmte Dateien oder Dateitypen schützen. Du kannst den Passwortschutz ausserdem wahlweise für einzelne Benutzer oder für ganze Benutzergruppen einrichten. Auch Kombinationen beider Formen sind möglich.

Damit der Verzeichnisschutz mit Passwort funktioniert, genügt die .htaccess-Datei alleine allerdings nicht. Du brauchst zusätzlich eine Datei, in der die Benutzernamen und die zugehörigen Passwörter stehen. Falls du mit Benutzergruppen arbeitest, benötigst du außerdem noch eine Datei, in der die Benutzergruppen definiert werden. Auch diese beiden anderen Dateien werden mit einem beliebigen Texteditor erstellt.

Eine ausführliche Anleitung zum Verzeichnisschutz via .htaccess findest du unter SELFHTML: Webserver/htaccessopen in new window

Einfacher Verzeichnisschutz

Um einen einfachen Passwortschutz anzulegen, benötigst du zwei Dateien, .htaccess (muss exakt so heissen!) und .htpasswd. In .htaccess wird der Verzeichnisschutz definiert und auf die zugehörige Passwortdatei .htpasswd verwiesen.

.htaccess Beispieldatei:

AuthName "password protected"
AuthType Basic
AuthUserFile /var/www/web33/public_html/www/secure/.htpasswd
Require valid-user

Mittels AuthUserFile definierst du den vollständigen Dateipfad zur Passwortdatei.

ACHTUNG!

.htaccess unterstützt keine relativen Dateipfade! Gibt stets die kompletten absoluten Pfade an (inkl. /var/www/webXX/), selbst wenn sich deine .htpasswd-Datei im selben Verzeichnis befindet wie die .htaccess.

Die Passwortdatei enthält pro Zeile die Paare Benutzername:Passwort, wobei das Passwort verschlüsselt (resp. "hashed") ist. Die Verschlüsselung eines Passworts kannst du mit Hilfe eines .htpasswd-Generatorsopen in new window erreichen.

.htpasswd Beispieldatei:

test:$apr1$qxlaPHX7$WYfiEFsffWLGuKA1EHJkT0
hans:$apr1$04uedr9o$D/PqUdv/IXjhiWeKlhT5n1
anne:$apr1$Vz7Sgwm6$snqU165a7kQIFGIiLHmNF.
kurtli:$apr1$CtRgWBbV$4NlQ3YnuCj0jKs0BWdsO40

Lade die beiden Dateien mittels FTP in das zu schützende Verzeichnis. Das Verzeichnis und sämtliche darunterliegenden Dateien sind nun passwortgeschützt.

TIPP SECURITY:

Wir empfehlen dir, die.htpasswd Datei(en) innerhalb deines/files-Verzeichnis abzulegen und nicht im Webroot /public_html/www (siehe Verzeichnisstruktur).

Unser Webserver verhindert zwar das Herunterladen von .htaccess und .htpasswd Dateien. Trotzdem ist es sicherheitstechnisch sinnvoller, ein kritische Datei wie .htpasswd nicht im Webroot abzulegen.

Du kannst die Passwort-Hashes für die .htpasswd-Datei selbst erzeugen mittels dem Unix-commands htpasswd. Beim erstmaligen Aufruf erzeugst du die Datei mittels Angabe des -c (create) Parameters:

$ htpasswd -c .htpasswd username

Danach ergänze zusätzliche Benutzer wie folgt:

$ htpasswd .htpasswd anotheruser

Moderne Betriebssysteme legen die Passwort-Hashes als MD5 ab. Für zusätzliche Sicherheit empfehlen wir dir, Bcrypt als hashing Algorithmus zu verwenden mit der Option htpasswd -B:

$ htpasswd -B .htpasswd.demo user2

Anstatt die Zeile in eine Datei zu schreiben, kannst du mit -n die Ausgabe auch direkt anzeigen lassen (stdout) und mit -b (batch mode) gleich das Passwort mitgeben:

$ htpasswd -nbB myUser myPassword
myUser:$2y$05$tAp/p8LlRFTU3l4AdLRgo.a.ZwtG8fk.Oil/2aexpJrc8kFchv/z6

Beachte dazu auch die Dokumentation unter Apache: Password Formatsopen in new window

Apache Module mod_dbd

Onlime unterstützt auf seinem Shared Webhosting Angebot (limeBASICopen in new window/limePROopen in new window) lediglich den Einfachen Verzeichnisschutz. Benötigst du eine Authentifizierung via MySQL-Datenbank, musst du diese selbst Applikations-seitig (z.B. mit deinem Lieblings-PHP-Framework Laravelopen in new window) umsetzen.

Für unsere limeDEDICATEDopen in new window Kunden mit eigenem Dedizierten Webserver bieten wir jedoch auch die Option, in Apache das Modul mod_dbdopen in new window zu aktivieren. Damit kannst du die Benutzernamen & Passwörter bequem in einer MySQL-Datenbank verwalten und trotzdem den herkömmlichen Passwort-Schutz via .htaccess verwenden.

Der Datenbank-Zugang wird in der Modul-Konfiguration authn_dbd.conf definiert:

<IfModule mod_dbd.c>
    DBDriver mysql
    DBDParams "host=localhost dbname=MYDATABASE user=MYUSER pass=MYPASS"
    DBDMin  4
    DBDKeep 8
    DBDMax  20
    DBDExptime 300
</IfModule>

.htaccess Beispieldatei:

AuthType Basic
AuthName "password protected"
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT `password` FROM `logins` WHERE `username` = %s AND `active` = 1"
Require valid-user

In diesem Beispiel werden die Passwörter als MD5 Hashes in der Datenbank eingetragen. Eine mögliche MySQL-Tabellenstruktur sieht so aus:

CREATE TABLE `logins` (
  `id` INT NOT NULL auto_increment,
  `username` VARCHAR(255) NOT NULL,
  `password` CHAR(32) default NULL,
  PRIMARY KEY  (`id`),
) TYPE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

Eintrag eines Testusers "test" mit Passwort "1234":

INSERT INTO `htaccess` (`username`, `password`) VALUES('test', MD5('1234'));

Empfohlen wird jedoch, dass du den Passwort-Hash via PHP aus deiner Applikation generierst, mit nativer PHP-Funktion password_hash($password)open in new window oder in Laravel mittels Hash::make($password)open in new window – beide verwenden standardmässig den sicheren Bcrypt hashing Algorithmus. mod_dbdopen in new window ist so schlau, unterstützt und erkennt dieses Hashing anhand des vorangestellten $2y$ Prefix.

Zuletzt aktualisiert: