[PHP] Linux wachtwoord verificatie

Pagina: 1
Acties:

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Topicstarter
Ik ben bezig met het maken van een script, waarmee gebruikers van mijn server zelf de files in hun homedirectory kunnen managen. Het script dat de door de users gegeven commando's moet processen moet uiteraard eerst controleren of de username en het password wel goed zijn, en ik heb het liefst dat daarvoor de normale username- en passwordinformatie wordt gebruikt, waarmee de user ook toegang heeft tot alle andere services, zoals FTP (proftpd) en de shells (sshd).

Het script zou dus in feite als volgt in mekaar zitten:
PHP:
1
2
3
4
5
6
7
<?
//Dit script krijgt de volgende variabelen uit z'n POST-info:
//$user, $pass, $file en gaat dus de betreffende file uit de user z'n homedir verwijderen.

$blaat = checkpassword($user,$pass);
if ($blaat == "true" ) { system("rm /home/$user/$file"); };
?>

Uiteraard ben ik op de hoogte van het feit dat users door als file ../../root/* schade kunnen aanrichten, maar het gaat hier alleen even om het principe.

Maar ik ben nu dus op zoek naar een functie als 'checkpassword', die TRUE of FALSE (of '1 of 0', of whatever) als uitput geeft, waarbij dus wordt gechecked of de normale linux-passwords van de users kloppen. Het gaat me dus niet om de passwords zoals die in .htpasswd staan. Searches bij Google en ook hier op GoT leverden me helaas niets op :(

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 09-09 15:29

MAZZA

Barbie is er weer!

Op zaterdag 03 november 2001 12:52 schreef bramvrzt het volgende:
Uiteraard ben ik op de hoogte van het feit dat users door als file ../../root/* schade kunnen aanrichten, maar het gaat hier alleen even om het principe.
Nah dat kan in principe niet tenzij jij ook daadwerkelijke de gebruiker root bent.

Wat ik me ook een beetje afvraag is hoe je dit gaat aanpakken :? Want je bent naar ik weet altijd de user waaronder de httpd draait toch?
Op zaterdag 03 november 2001 12:52 schreef bramvrzt verder:
Maar ik ben nu dus op zoek naar een functie als 'checkpassword', die TRUE of FALSE (of '1 of 0', of whatever) als uitput geeft, waarbij dus wordt gechecked of de normale linux-passwords van de users kloppen. Het gaat me dus niet om de passwords zoals die in .htpasswd staan. Searches bij Google en ook hier op GoT leverden me helaas niets op :(
Sja die wachtwoorden ook in een databeestje (zwaarrrrr encrypted) zetten :? Ik kan alleen niet zeggen dat dit een veilige oplossing wordt. Ik bedoel je geeft je systeem wel een open deur zo heb ik het idee.

Verwijderd

*Als* met mogelijk is, dan zal dat met een omweg via php moeten. Omdat php niet als root draait kan je niet bij de "shadow passwords" komen en ze dus ook niet via crypt() checken.

Opslaan in een db zou kunnen (zie post hierboven), maar dan moet je alle veranderingen/toevoegingen van de passwords via die db doen en ik denk niet dat je dat wilt.

Je zou het misschien met een setuid cgi-progje kunnen doen (perlscriptje?), maar ik weet niet of dat wel runt onder apache.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Ik heb een soort gelijk iets gedaan. En ik heb een tweetal scripts gemaakt.
Script 1: User doet een req. voor een wijziging van het systeem in mijn geval kon dat zijn (aanmaken user, del eigen account, pop3 pw wijziging, email adress wijzing, forward to email/fax etc) Nadat een req. was gemaakt werd dat in een tabel gezet.

Script 2: Stond in de cron tab en draaide op ander niveau en had rechten om andere users te wijzigen cq aanmaken. En haalde alle data die hij nodig had uit de db. Deze gegevens werden dan nogmaals gecontroleerd op gekke dingen (zoals verboden usernames (root, postmaster etc. ) En daarna werden er vaste systeem commando's uit gevoerd.

De beveiliging van script 1 was een eigen user beveiliging. En script 2 was NOOIT te benaderen vanaf buiten. Draaide ook niet via een webserver maar via een aparte PHP-CGI in de crontab. Doordat script 2 niet te benaderen is, is het heel moeilijk voor hacker(lees jokers :( ) om buiten de standaard toegestaande commando te komen. Jij blijft dan beter controle houden over wat de user doet.

Verder adviseer ik om http://nl.php.net/manual/en/ref.exec.php goed door te lezen en helemaal http://nl.php.net/manual/en/function.escapeshellcmd.php

Programmer - an organism that turns coffee into software.