Ungültiges AuthExternal-Schlüsselwort (pwauth)

8

Ich versuche, die Basisauthentifizierung auf meinem Apache2-Server mithilfe von AuthExternal und pwauth einzurichten. Verwenden Sie daher die Systembenutzer, um die Authentifizierung durchzuführen, und nicht die Datenbank eines anderen Benutzers.

Ich konnte alles nahtlos installieren und aktivieren. Apache2 (2.4.12-2ubuntu2), libapache2-mod-authnz-external (3.3.2-0.1) und pwauth (2.3.11-0.1). Es läuft alles auf meiner Ubuntu 15.10 Desktop Edition und Linux 4.2.0-30-generic. Eigentlich nichts Besonderes, alle Standard-Willy-Repo-Installationen.

Apache2 läuft und das AuthExternal-Modul ist korrekt geladen, zumindest soweit ich das beurteilen kann:

me@bla:~$ systemctl status apache2.service | grep Active
  Active: active (running) since Thu 2016-02-25 13:41:02 CET; 33s ago
me@bla:~$ apache2ctl -M | grep external
  authnz_external_module (shared)

Ich habe die zu verwendenden Module sowie das Derictory definiert, auf das die Authentifizierung in der VHost-Konfigurationsdatei angewendet werden soll. Siehe meine /etc/apache2/sites-enabled/000-default.conf unten:

<IfModule mod_authnz_external.c>
    AddExternalAuth pwauth /usr/sbin/pwauth
    SetExternalAuthMethod pwauth pipe
</IfModule>

<VirtualHost *:80>

    ServerAdmin webmaster@localhost 
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/html/sec>
        AuthType Basic
        AuthName "Restricted Area"
        AuthBasicProvider external
        AuthExternal pwauth
        Require user pat 
    </Directory>
</VirtualHost>

Wenn ich jetzt versuche, loclahost / sec in einem Browser zu öffnen, werde ich aufgefordert, mich anzumelden. Ich gebe pat als Benutzer und sein Passwort an und warte, bis die Magie eintritt. Leider erhalte ich eher einen internen Serverfehler als den erwarteten index.html 'Hello World' ....

Also habe ich die Apache2-Fehlerprotokolle überprüft und dort 'Ungültiges AuthExternal-Schlüsselwort (pwauth)' gefunden. Nach einigem Graben wurde mir klar, dass dieser Fehler von AuthExternal ausgelöst wird, weil das angegebene pwauth nicht gefunden werden kann. Also habe ich das überprüft, indem ich gelaufen bin:

sudo -u www-data which pwauth

Das gab den gleichen Pfad zurück, der in der obigen Konfigurationsdatei angegeben wurde, so dass ausgeschlossen werden kann ....

Ich habe dann versucht, AuthExternal in ein Shell-Skript umzuleiten, um das Modul unabhängig von pwauth zu testen. Das Skript hängt einfach eine Zeichenfolge an eine Datei an, damit ich sehen kann, ob sie von AuthExternal aufgerufen wird oder nicht. Ich habe 'chmod u + s a + x' für die Datei ausgeführt, damit sie mit Root-Rechten ausgeführt werden kann, da pwauth dies für den Zugriff auf passwd benötigt, und habe es erneut versucht. Ich habe das auch ohne U + S versucht, da es hier nicht benötigt wird, aber das lief nicht besser. Dieser Test hat mich zu der Annahme gebracht, dass mit meinem Apache2 etwas nicht stimmt und nicht mit pwauth.

Ich habe das alles mit Cromium und Firefox getestet, nicht dass es in seinem Fall wichtig wäre, aber weißt du ... man kann nie sicher genug sein, oder? Ich habe auch alle Variationen ausprobiert, die mir in Bezug auf die Position der Richtlinien einfielen. Alles direkt in der appache2.conf, im Verzeichnis in appache2.conf und in der Moduleinbeziehung in ./conf-enable/security.conf, in den Modulen in security und im Verzeichnis im vhost usw. Keine dieser Variationen hat geholfen, einige gemacht es ist aber am schlimmsten ...

Ich habe dann viel gegoogelt ... Aber ich konnte nur Informationen zu diesem Thema aus der httpd.conf-Ära finden, die nicht mehr wirklich zutreffen. Auch wenn es noch einige gültige und nützliche Hinweise enthält ... Darüber hinaus verwenden die meisten, wenn nicht alle dieser Threads einen .htaccess-Ansatz. Was ich durch die Verwendung der Directory-Direktiven vermeiden möchte, um den durch .htaccess verursachten Leistungsmangel zu vermeiden.

Jedenfalls habe ich keine Ahnung, wo ich suchen oder was ich versuchen soll. Um ehrlich zu sein, drehe ich mich im Kreis und würde mich über Hinweise, Ideen oder Lösungen freuen, um mich weiter zu bringen.

Klopfen
quelle

Antworten:

7

Es stellt sich heraus, dass AddExternalAuth und SetExternalAuthMethod in der VirtualHost-Deklaration platziert werden müssen. Daher funktioniert die folgende Konfiguration einwandfrei:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost 
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    AddExternalAuth pwauth /usr/sbin/pwauth
    SetExternalAuthMethod pwauth pipe

    <Directory /var/www/html/sec>
        AuthType Basic
        AuthName "Restricted Area"
        AuthBasicProvider external
        AuthExternal pwauth 
        Require user pat
    </Directory>
</VirtualHost>

Ich verstehe immer noch nicht, warum das Szenario, in dem die Deklaration global und damit direkt in apache2.conf erfolgt, nicht funktioniert. Trotzdem ist das ursprüngliche Problem gelöst ....

Klopfen
quelle
Sieht aus wie AddExternalAuthund SetExternalAuthMethodist innerhalb eines VirtualHostBlocks in Apache 2.4 nicht zulässig . Ich habe diese innerhalb eines <IfModule mod_authnz_external.c>Blocks nach "apache2.conf" verschoben .
Adambean
0

Die Dinge scheinen zwischen Apache-Versionen anders zu sein. Für apache2.4 führte mich der GitHub für mod-auth-external auf den richtigen Weg.

  1. Beim apache2.confErstellen der Authentifizierungsmethode (hier: checkEtcPasswd):

    <IfModule mod_authnz_external.c>
        DefineExternalAuth checkEtcPasswd pipe /usr/sbin/pwauth
        # AddExternalAuth pwauth /usr/sbin/pwauth
        # SetExternalAuthMethod pwauth pipe
    </IfModule>
    
  2. Verweisen Sie diesen Authentifikator im Block:

    AuthType Basic
    AuthName "Your AuthName"
    AuthBasicProvider external
    AuthExternal checkEtcPasswd
    Require valid-user
    

Das ist es. Einfach, wenn Sie es wissen ...

Sebastianus
quelle