[PHP] php authentication via /etc/passwd

Pagina: 1
Acties:
  • 231 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik ben bezig met het schrijven van een website en wil users/gebruikers toegang geven zoals ze gedefinieerd staan op het systeem. Ik weet dat dit niet de veligste methode is, maar is dit uberhaupt mogelijk?

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Al eens naar PAM (Pluggable Authentication Modules) gekeken? [google=pam php] :? Verder moet je waarschijnlijk /etc/shadow hebben; tenzij je en erg oude unix versie draait :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Spider.007 schreef op dinsdag 18 januari 2005 @ 12:52:
Verder moet je waarschijnlijk /etc/shadow hebben; tenzij je en erg oude unix versie draait :)
daarnaast heb je als het goed is geen toegang tot /etc/shadow :)

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Erkens schreef op dinsdag 18 januari 2005 @ 12:56:
[...]

daarnaast heb je als het goed is geen toegang tot /etc/shadow :)
Vandaar mijn suggestie voor PAM. Overigens is PHP natuurlijk ook gewoon te gebruiken als systeemscript taal; en zou je een eigen implementatie onder de root user kunnen laten runnen :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Spider.007 schreef op dinsdag 18 januari 2005 @ 13:05:
[...]

Vandaar mijn suggestie voor PAM. Overigens is PHP natuurlijk ook gewoon te gebruiken als systeemscript taal; en zou je een eigen implementatie onder de root user kunnen laten runnen :)
PAM zuigt imo, maargoed :P
Maar ehm je moet dan je webserver als root laten draaien om PHP root rechten te geven, lijkt me niet echt gewenst imo (tenzij je met PHP ook meteen een webserver wilt gaan schrijven 8)7 )

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Ik heb zelf ook weleens geexperimenteerd met PAM via PHP, maar ik liep tegen het probleem aan dat de webserver dan leesrechten moet hebben op /etc/shadow en daar was ik uiteraard niet zo blij mee.

Een en ander kun je uiteraard wel ondervangen met de authentication daemon van sasl (saslauthd), maar ik had het project uiteindelijk toch niet nodig en ben er verder niet op ingegaan.

@Erkens: Waarom zuigt PAM? Ik heb zelden zo'n configureerbare authentication library gezien. Het enige wat er enorm aan mist is een daemon zodat processen geen rechten nodig hebben op /etc/shadow (of wat voor backend je dan ook gebruikt) om een password te checken.

[ Voor 27% gewijzigd door Gerco op 18-01-2005 13:14 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
http://nl.php.net/manual/nl/function.posix-getpwnam.php

Is het echt nodig je webserver onder root te laten draaien?

[ Voor 44% gewijzigd door Erhnam op 18-01-2005 13:19 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Gerco schreef op dinsdag 18 januari 2005 @ 13:11:
@Erkens: Waarom zuigt PAM? Ik heb zelden zo'n configureerbare authentication library gezien. Het enige wat er enorm aan mist is een daemon zodat processen geen rechten nodig hebben op /etc/shadow (of wat voor backend je dan ook gebruikt) om een password te checken.
offtopic:
Waarom PAM zuigt? vrij simpel, kijk naar alle security risks die je ermee hebt, * Erkens is blij dat hij een slackware gebruiker is ;)

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Erhnam schreef op dinsdag 18 januari 2005 @ 13:18:
Is het echt nodig je webserver onder root te laten draaien?
Nee en zoals uitgelegd in die manual pagina krijg je daar dus NIET het password als je gebruikt maakt van shadow passwords (en als je dat niet weet, dan gebruik je shadow passwords).

Er staat daar echter ook een aanpak die wel werkt, met een los c programma wat als root draait en het password wel kan checken. Ik zou waarschijnlijk liever saslauthd met PAM of iets dergelijks gebruiken, want daarmee kan ik mn authentication backend ook overzetten naar LDAP of MySQL als ik dat leuk vind en met een los programma kan dat moeilijker.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Erkens schreef op dinsdag 18 januari 2005 @ 13:24:
offtopic:
Waarom PAM zuigt? vrij simpel, kijk naar alle security risks die je ermee hebt, * Erkens is blij dat hij een slackware gebruiker is ;)
offtopic:
Heb ik zeker onder een steen gelegen de afgelopen tijd, ik heb nog geen batterijen bugs op PAM gezien. (ze zullen er ongetwijfeld wel zijn, ik kijk gewoon niet goed genoeg)

En nu weer ontopic, anders vervuil ik teveel :)

[ Voor 8% gewijzigd door Gerco op 18-01-2005 13:28 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Wat ik verder ben tegen gekomen op mijn zoektoch is een perl scriptje wat deze handeling doet:
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl
#

open(PASSWD,"/etc/passwd");
open(SHADOW,"/etc/shadow");
open(FLATFILE,">/etc/passwd.httpd");
while(<SHADOW>){
        chop;
        ($uname,$temppass)=split(/:/);
        $pass{$uname}=$temppass;
}
while(<PASSWD>){
        chop;
        ($uname,$temppass,$uid,$gid,$fn,$homedir,$shell)=split(/:/);
        if ($temppass ne 'x'){ $pass{$uname}=$temppass; }
        if ($uid>=500) {
                print FLATFILE
"$uname:$pass{$uname}:$uid:$gid:$fn:$homedir:$shell\n";
        }
}

close(PASSWD);
close(SHADOW);
close(FLATFILE);
chmod(0400,"/etc/passwd.httpd");
chown(65534,65534,"/etc/passwd.httpd"); 

Restultaat zet hij in /etc/passwd.httpd , deze is uiteraard weer wel leesbaar

[ Voor 9% gewijzigd door gorgi_19 op 19-01-2005 09:32 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Dat is ook een aanpak die je kunt gebruiken, helaas heeft die (bijna) dezelfde nadelen als /etc/shadow leesbaar maken voor de webserver. Het kan bijvoorbeeld mogelijk zijn (door een bug in een script) om die file te downloaden en door een password cracker te halen.

Bij deze file is dat veel minder erg dan bij /etc/shadow omdat de belangrijke passwords (root) er niet instaan, maar toch lijkt het me niet fijn om je users' passwords "op straat" te leggen, ook al zijn ze encrypted.

[ Voor 4% gewijzigd door Gerco op 18-01-2005 14:04 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Okee.. Ben weer wat verder: Heb even snel een php script gebouwd om het te testen. Safe mode heb ik een directory toegevoegd, waar alleen in de juiste dir gelezen kan worden. Dit is het script:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="login.php">
Username: <input type="text" name="username" size="20">
Password: <input type="password" name="password" size="20">
<input type="submit" value="Submit" name="login">
</form>
</body>
</html>

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

$user = ($_POST['username']);
$password = ($_POST['password']);
$autharray = file("/home/httpd/vhosts/domein.nl/httpdocs/passwd.httpd");

for ($x = 0; $x < count($autharray); $x++)
{
if (eregi("^$user:", $autharray[$x]))
{
 $passwd = explode(":", $autharray[$x]);
 $salt = substr($passwd[1],0,2);
 $cryptpw = crypt($pass,$salt);
  if ($cryptpw == $passwd[1]) {
   print "succes";
  } else {
   print "fout";
}
}
}
?>

Het enige probleem is dat de output nu altijd fout is.. Ergens gaat het met het terug encrypten dus fout. Heeft er iemand een idee. PS: Ik heb het bovenstaande perl script gebruikt om de passwd en shadow file te kopieren.

[ Voor 17% gewijzigd door gorgi_19 op 19-01-2005 09:32 ]

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Okee.. Ik ben al iets verder en heb het een en ander gezocht. Weet iemand hoe het mogelijk is om van een $password de return terug te krijgen zoals die in de /etc/shadow staat te vergelijken?

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 20-07-2024

PommeFritz

...geen friet

offtopic:
[quote]Gerco schreef op dinsdag 18 januari 2005 @ 13:11:
@Erkens: Waarom zuigt PAM? Ik heb zelden zo'n configureerbare authentication library gezien. Het enige wat er enorm aan mist is een daemon zodat processen geen rechten nodig hebben op /etc/shadow (of wat voor backend je dan ook gebruikt) om een password te checken.[/quote]

:? Dan kun je toch net zo goed chmod a+r /etc/shadow doen?
Wat zou nou de reden zijn geweest dat shadow alleen leesbaar is voor root.

FireFox - neem het web in eigen hand


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Erhnam,

Kan je voortaan [code][/code] tags gebruiken? :) Dit verduidelijkt de boel in ieder geval voor iedereen.

Ik heb ze nu voor je toegevoegd :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Erhnam schreef op dinsdag 18 januari 2005 @ 20:26:
Okee.. Ik ben al iets verder en heb het een en ander gezocht. Weet iemand hoe het mogelijk is om van een $password de return terug te krijgen zoals die in de /etc/shadow staat te vergelijken?
Gebruikt je systeem misschien md5 passwords ? Weet je zeker dat je met hetzelfde algoritme crypt als /etc/shadow dat doet (crypt je eigen password en vergelijk).

offtopic:
Discussie over PAM graag hier voortzetten: [rml][ Alg] Waarom zuigt PAM?[/rml]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Gerco schreef op woensdag 19 januari 2005 @ 14:55:
[...]

Gebruikt je systeem misschien md5 passwords ? Weet je zeker dat je met hetzelfde algoritme crypt als /etc/shadow dat doet (crypt je eigen password en vergelijk).

offtopic:
Discussie over PAM graag hier voortzetten: [rml][ Alg] Waarom zuigt PAM?[/rml]
Ik heb net even getest wat jij zei.. En het vreemde is dat ik random outputs krijg:

$1$dc.cNxen$B7xUcH/RxAvJkBw5BABuz/
$1$rICJiYRz$frLxNIiD3ue7YP9BN2Wdr1
$1$FkqAPyXv$wue8h8D2B.vButyL/krXR0

Zijn een aantal voorbeelden. Ziet er iemand misschien waar de fout zit in het script?

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Erhnam schreef op woensdag 19 januari 2005 @ 15:23:
[...]


Ik heb net even getest wat jij zei.. En het vreemde is dat ik random outputs krijg:

$1$dc.cNxen$B7xUcH/RxAvJkBw5BABuz/
$1$rICJiYRz$frLxNIiD3ue7YP9BN2Wdr1
$1$FkqAPyXv$wue8h8D2B.vButyL/krXR0

Zijn een aantal voorbeelden. Ziet er iemand misschien waar de fout zit in het script?
Ik zou zeggen lees je eens in in het principe crypt; en zoek naar salt: [google=crypt salt] :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 21:36

Erhnam

het Hardware-Hondje :]

Topicstarter
Het is mij gelukt! YES!! :) Hier is de code:

HTML:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// md5 shadow check

<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="login.php">
Username: <input type="text" name="username" size="20">
Password: <input type="password" name="password" size="20">
<input type="submit" value="Submit" name="login">
</form>
</body>
</html>


PHP:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

$user = ($_POST['username']);
$pass = ($_POST['password']);
$autharray = file("/home/httpd/vhosts/xxx.nl/httpdocs/passwd.httpd");

for ($x = 0; $x < count($autharray); $x++)
  {
   if (eregi("^$user:", $autharray[$x]))
     {
       $passwd = explode(":", $autharray[$x]);
       $salt =  substr($passwd[1],0,11);
       $cryptpw = crypt($pass,$salt);
        if ($cryptpw == $passwd[1])
            {
              echo "Login ok";
            } else {
              echo "Error login failed";
                   }
        }
    }

?>

[ Voor 38% gewijzigd door Erhnam op 20-01-2005 09:10 ]

http://www.xbmcfreak.nl/

Pagina: 1