apache:htaccess

Zugriffsschutz mit Apache (.htaccess)

.htaccess ist eine einfache Möglichkeit ganze Ordner mit einem einfach Passwortschutz zu versehen. Darüber hinaus können auch spezielle Einstellungen für Ordner konfiguriert werden.

:!: Die Konfiguration durch .htaccess-Datei muss in der Apache-Konfiguration aktiviert sein (standardmäßig ist „AllowOverride None“ aktiviert):

<Directory />
        AllowOverride AuthConfig
</Directory>
  • Diese Datei in den zu schützenden Ordner legen!
    # .htaccess-Datei für ein Web-Verzeichnis
    
    AuthType Basic
    AuthName "Geheimer Bereich"
    AuthUserFile .htpasswd
    Require user NAME
  • oder zentral in der Apache-Konfiguration innerhalb eines virtuelles Host (statt „/“ kann auch ein einzelnes Unterverzeichnis angegeben werden: „/geheim“):
    <Location / >
        AuthType Basic
        AuthName "Geheimer Bereich"
        AuthUserFile /etc/apache2/htusers
        Require valid-user
    </Location>

Passwörter verschlüsselt mit Bcrypt ablegen:

Datei anlegen mit erstem Benutzer „BENUTZERNAME“:

htpasswd -c -B /Pfad/.htpasswd BENUTZERNAME
# Die Datei würde so aussehen, bei Passwort 123:
BENUTZERNAME:$2y$05$7dj5wXAYbPs4hIg/c0Pm5eB8o/za6cpshdRJjRVbL2AChzhnb2VTq

Anschließend weitere Benutzer hinzufügen:

htpasswd -s /Pfad/.htpasswd BENUTZERNAME

FIXME md5-hashes sind nicht sicher, es sollte eine alternative benutzt werden!

apt-get install libapache-mod-auth-mysql
AuthName "Bitte Benutzername und Passwort eingeben"
AuthMySQL On
AuthMySQL_Host localhost
AuthMySQL_User DB_BENUTZERNAME
AuthMySQL_Password DB_PASSWORT
AuthMySQL_DB DATENBAK
AuthMySQL_Password_Table TABELLE_MIT_USERN
AuthMySQL_Username_Field FELD_MIT_BENUTZERNAMEN
AuthMySQL_Password_Field FELD_MIT_PASSWOERTERN
AuthMySQL_Encryption_Types Plaintext
AuthMySQL_Encrypted_Passwords Off
AuthType Basic
require valid-user

Besser wäre es allerdings nur die md5-Hashes abzuspeichern:

AuthMySQL_Encryption_Types PHP_MD5
AuthMySQL_Encrypted_Passwords On

- Passwort-Feld vom Typ varchar(32) - Neue Benutzer so in die Datenbank eintragen:

Insert into TABELLE_MIT_USERN (FELD_MIT_BENUTZERNAMEN, FELD_MIT_PASSWOERTERN ) Values ('User1', md5('geheim'));