ispCP - Board - Support
mod_auth_mysql und ISP+Etch - Printable Version

+- ispCP - Board - Support (http://www.isp-control.net/forum)
+-- Forum: ispCP Omega International Area (/forum-22.html)
+--- Forum: German Corner (/forum-26.html)
+--- Thread: mod_auth_mysql und ISP+Etch (/thread-2947.html)



mod_auth_mysql und ISP+Etch - winex - 04-06-2008 07:34 PM

Hallo,

ist vielleicht etwas Offtopic, jedoch habe ich ein Problem und hoffe das ich hier hilfe finde.

Zur Sachlage:

Server läuft unter Debian Etch, mit ISP RC4.

Jetzt sollte ich von einen Kunden ein in PHP programiertes Serviceportal hosten. Dieser nutzt für die Authentifizierung die PHP funktion "$_SERVER['PHP_AUTH_USER]" in Verbindung mit MySql Abfrage.

Ich bin kein PHP Profi, jedoch ging ich nach meinen Informtionsstand "google" Wink davon aus, das es an den fehlenden Apache2 "mod_auth_mysql" in etch lag.

So habe ich diesen nachträglich kompiliert anhand dieser Anleitung:

http://www.marderhund.org/blog/index.php/archives/2007/12/27/debian-etch-apache2-mysql-authentication/

Das Problem bliebt jedoch weiterhin. Es erscheint zwar das Login Fenster, jedoch bewirkt die Eingabe des Login nix, stattdessen kommt das Login Fenster immer wieder.

In den Logs erscheint darüber nix.

Kann mir vielleicht jemand helfen?


RE: mod_auth_mysql und ISP+Etch - joximu - 04-06-2008 08:12 PM

es liegt daran, dass php via fastcgi gestartet wird.

das sollte in google helfen.

Ich habe bei mir die fastcgi_ispcp.conf ein wenig angepasst:
Code:
FastCgiConfig -minProcesses 1 \
                      -maxProcesses 400 \
                      -maxClassProcesses 5 \
                      -multiThreshold 80 \
                      -killInterval 60 \
                      -startDelay 5 \
                      -idle-timeout 300\
                      -pass-header Authorization

dieses -pass-header .... ist wichtig.
Danach muss man aber die PHP Applikation ein wenig anpassen, weil nun user und passwort in einer Variablen übergeben wird - mit base64 codierung oder so...
weiter bin ich nicht gekommen, hatte grad keine Zeit dazu...

/J


RE: mod_auth_mysql und ISP+Etch - winex - 04-06-2008 08:25 PM

Danke für den Tip, hier noch das stück PHP-Code das für die Authentifikation zuständig ist.

Quote:// ---------------------------
// A U T H E N T I C A T I O N
// ---------------------------

function authenticate($admin="N", $bereich="all")

{
if(!isset($_SERVER['PHP_AUTH_USER']))
{
requireLogin("Sie müssen sich einloggen, um diese Seite zu erreichen");

} else {
$user = addSlashes(strip_tags(trim($_SERVER['PHP_AUTH_USER'])));
$pass = addSlashes(strip_tags(trim($_SERVER['PHP_AUTH_PW'])));

if($login = checkLogin($user, md5($pass)))

{
if($login["admin"] == "Y")

$login["str_admin"] = "Admin - ";

// Überprüfe den Adminstatus des Mitarbeiters

if($admin == "Y" && $login["admin"] == "N")

{
requireLogin("Sie müssen Adminstatus besitzen, um diese Seite zu betreten");


// Überprüfe den Arbeitsbereich des Mitarbeiters

} else if($login["admin"] == "N" && $bereich != "all" && $bereich != $login["bereich"]) {

requireLogin("Sie müssen ein Mitarbeiter aus dem Bereich $bereich sein, um diese Seite zu betreten");

// Falls Zugang gewährt, gib die Mitarbeiterdaten zurück
} else {
return $login;

}
} else {

// Falls die Mitarbeiterdaten in der Datenbank nicht gefunden werden konnten
requireLogin("Die angegebenen Daten sind ungültig");

}
}
}



RE: mod_auth_mysql und ISP+Etch - Cube - 04-06-2008 08:31 PM

$_SERVER['PHP_AUTH_USER'] hat doch nichts mit MySQL zu tun, sondern speichert den Namen des gerade über die HTTP Authentifizierung angemeldeten Users.
Diese Variable funktioniert unter php über fastcgi nicht (worüber ich mich auch schon geärgert habe, wie so über vieles was unter fastcgi nicht geht).

Es gibt zwei Möglichkeiten:
- entweder du aktivierst -pass-header HTTP_AUTHORIZATION in der fastcgi-Config und greifst dann auf die Daten über $_SERVER['Authorization'] zu (wie schon joximu schrieb)
- oder du verwendest $_SERVER['REDIRECT_REMOTE_USER'] - damit kannst du aber nur PHP_AUTH_USER ersetzen, an das Passwort (PHP_AUTH_PW) kommst du auf diese Weise nicht ran.


RE: mod_auth_mysql und ISP+Etch - joximu - 04-06-2008 10:40 PM

die Variable $_SERVER["Authorization"]) enthält sowas wie

string(18) "Basic Zm9vOmJhcg=="

das muss dann den String 'Zm9vOmJhcg==' mit base64 decodieren und erhälst 'foo:bar' als Antwort - und da ist foo der User und bar das Kennwort...

Das ganze klappt zumindest, wenn der Basic Algorithmus in der HTTP-Auth methode gesetzt ist zB: header('WWW-Authenticate: Basic realm="...."');

/J


RE: mod_auth_mysql und ISP+Etch - winex - 04-06-2008 10:48 PM

Wie müsste dann der php-code oben aussehen damit das klappt?


RE: mod_auth_mysql und ISP+Etch - joximu - 04-06-2008 11:17 PM

wenn ich das fertig gemacht hätte, hätte ich ihn gleich gepostet, aber so musst du vielleicht selbst etwas überlegen...

das könnte ein Ansatz sein

Code:
$aAuth = explode(' ', $_SERVER['Authorization']);
if (($aAuth[0] == 'Basic') && (base64_decode($aAuth[1], true) == 'user:pass')) {

echo 'ich bin drin';

}

wäre noch zu vervollständigen..., du kannst das Ergebnis von base64_decode natürlich nochmals mit explode ':' aufteilen, dann hast du eingegebener User und Kennwort getrennt.

Gruss
J


RE: mod_auth_mysql und ISP+Etch - winex - 04-06-2008 11:32 PM

Danke, werde mich mal versuchen. Wink

Übrigens suche ich für mein Business schon eine weile einen fähigen Helfer.
Bin hier in der Region Nürnberg. Wink


RE: mod_auth_mysql und ISP+Etch - Zothos - 04-07-2008 07:55 PM

@joxi -idle-timout muss zum fastcgi-server! nicht zur config Tongue


RE: mod_auth_mysql und ISP+Etch - joximu - 04-07-2008 09:18 PM

danke zothos - war halt mal früher so... werd ich dann irgendwann mal ändern... es ging ja um das -pass-header... :-)