Apache-Autorisierung für die zulässigen Benutzer?

7

Ich habe die Antwort auf diese Frage gelesen:

/programming/4102763/apache-basic-authentication-except-for-those-allowed

Es hat mir geholfen zu verstehen, wie man einige Benutzer (gemäß der IP) nicht authentifiziert:

<Directory /var/www/files/>
    Require valid-user
    Allow from 192.168.1.2
    Satisfy Any
    AuthUserFile /etc/apache2/basic.pwd 
    AuthName "Please enter username and password" 
    AuthType Basic  
</Directory>

Stellen Sie sich vor, ich habe diese Datenbank (anders als die für die Authentifizierung verwendete Datenbank):

User        IP 
Mark        192.168.1.2
Mike        192.168.1.3
Karl        192.168.1.4

1- Kann ich alle in der Datenbank gespeicherten IP-Adressen mithilfe einer Konfiguration in Apache zulassen? Ich möchte keine statische Lösung (die Datenbank ändert sich dynamisch).

2- Ein weiteres Problem ist, dass die Autorisierung der zulässigen IP verloren geht. Kann Apache diese Datenbank zur Autorisierung verwenden, wenn der Benutzer die Seiten ohne Authentifizierung abrufen darf? Im Detail: Wir wissen, wann Apache Benutzer authentifiziert, von dem er den Benutzernamen kennt Anmeldeinformationen für die Authentifizierung, aber mit Zulassen geht der Benutzername verloren. Ich möchte, dass Apache den Benutzernamen der IP aus derselben Tabelle extrahiert, in der die IP-Adresse extrahiert wird.

AKTUALISIEREN:

Hinweis: Ich denke, Tony Antwort könnte hilfreich sein, aber ich möchte auch andere Antworten (die mich nicht verpflichten, ein Modul zu erstellen).

Mein Ziel dieser Frage ist "Single Sign On":

  • Ich verwende freeradius , um die internen Benutzer (innerhalb des Netzwerks) zu authentifizieren, damit Apache sie nicht erneut authentifiziert.

  • Ich möchte, dass Apache externe Benutzer mithilfe von LDAP authentifiziert.

  • Meine Lösung besteht darin, die AllowRichtlinie zu verwenden, um die internen Benutzer ohne Authentifizierung zuzulassen, aber ich muss ihnen erlauben, DB zu verwenden (erstes Problem). und versuchen, Apache so zu konfigurieren, dass interne Benutzer autorisiert werden (die ich nicht authentifiziert habe) (zweites Problem)?

Hinweis: Die Autorisierung externer Benutzer ist mit LDAP sehr einfach (da Apache den Namen des Benutzers, mit dem es sich befasst, anhand der Authentifizierungsdaten kennt).

Ist meine vorgeschlagene Lösung berechtigt, das zu tun, was ich tun möchte? Wenn nicht, was schlagen Sie als Lösung vor?

Nidal
quelle

Antworten:

5

Haben Sie versucht, mod-auth external zu verwenden , können Sie Ihren benutzerdefinierten Authentifizierungsmechanismus für Apache ausführen.

Sie erhalten Zugriff auf Umgebungsvariablen wie IP, USER, PASS usw. Sie können ein Skript in einer Ihnen vertrauten Sprache schreiben und die Authentifizierungsdaten aus Ihrer Datenbank abrufen.

Das Wiki hat einige Beispiele.

Wenn Sie ein benutzerdefiniertes Authentifizierungsskript erstellen, stellen Sie sicher, dass es (sicherheitshalber) gut codiert ist.

Das Modul ist unter CentOS (mod_authnz_external) und unter Ubuntu (libapache2-mod-authnz-external) verfügbar.

Hier ist ein grundlegendes Apache-Konfigurationsbeispiel:

LoadModule authnz_external_module modules.d/mod_authnz_external.so
DefineExternalAuth my_auth  environment /tmp/auth.sh

<Location />
   AuthType Basic
   AuthName "My super special access"
   AuthBasicProvider external
   Require valid-user
   AuthExternal my_auth
</Location>

Hier ist das sehr einfache Skript, das die IP des BENUTZERS und des PASSWORTES protokolliert und die Authentifizierung nur akzeptiert, wenn der angegebene Benutzer "Tony" ist.

In diesem Beispiel wird das Skript unter /tmp/auth.sh mit gesetztem ausführbaren Bit gespeichert. Sie können tun, was Sie wollen (Filtern nach IP, Benutzername usw.).

#!/bin/bash

echo $(date) ${IP} >> /tmp/log.txt
echo $(date) ${USER} >> /tmp/log.txt
echo $(date) ${PASS} >> /tmp/log.txt

#Very basic filtering.
if [[ "${USER}" != "Tony" ]]
then
        exit 1;
fi
Tony
quelle
Vielen Dank, dies könnte hilfreich sein. Können Sie mir weitere Informationen (oder Links) geben?
Nidal
vor allem mit centos.
Nidal
1
Überprüfen Sie dies. Ich denke, es hat alle Informationen, die Sie brauchen: code.google.com/p/mod-auth-external/wiki/ConfigApache24
Tony
Nochmals vielen Dank für das hervorragende Update, aber wie kann ich dieses Skript verwenden, umfilter by IP, username, etc.
Nidal
1
Dies ist nur ein Beispiel. Sie werden wahrscheinlich Skripte in einer Skriptsprache schreiben, mit der Sie vertraut sind ... Sie möchten eine Datenbank oder zumindest eine Datei überprüfen. Das $ (Datum) hier dient nur zum Hinzufügen eines Zeitstempels zur Protokolldatei. Ich werde ein Update mit einem Beispiel für die Filterung bereitstellen.
Tony