passwd und php

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

passwd und php

Beitrag von HELLinG3R » 22.02.2005 09:05:28

Hallo!
ich möchte für meine User ein kleines Admintool schreiben, mit dem sie ihre Passwörter ändern können.
Als erstes loggen sich die User mit ihrem FTP-Account ein;
die FTP-Accounts sind normale Systemuser (wegen quotaverwaltung des Speicherplatzes)
Danach sollen sie die Möglichkeit haben, ihre Emaildaten zu verwalten (ich biete optional Emailadressen) und ihr FTP-Passwort zu ändern.

Ich habe einen apach2 mit php4 als suPHP am laufen; d.h. die scripte laufen nicht unter der Webserverkennung sondern unter der Kennung des scripteigentümers. (ich könnte also definieren, dass nur dieses eine script in die shadow schreiben darf)

Jetzt die Fragen:
wie setze ich das am besten um, ohne ein Sicherheitsloch (jeder user kann anderer user Passwörter ändern) zu erzeugen?
Ich müsste ja das Script die shadowdatei schreiben lassen, was mir ehrlichgesagt nicht sonderlich behagt, andere Alternativen kenne ich aber leider nicht...

DeletedUserReAsG

Beitrag von DeletedUserReAsG » 22.02.2005 11:21:06

Vorschlag: Das PHP-Script legt die Eingaben in eine Datei (oder in eine Datenbank) und ein anderes Script, welches von cron angestoßen wird, liest die Datei, prüft sie noch einmal und schreibt dann die Daten in die shadow, bzw. nutzt die dafür vorgesehenen Programme (passwd).

cu

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Beitrag von HELLinG3R » 22.02.2005 12:31:12

sehr gute idee!
allerdings kennt doch passwd keinen "non-interactive"-mode, oder täusche ich mich da?
gibt es eine Möglichkeit passwörter ohne Usereingabe zu ändern?

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Beitrag von HELLinG3R » 22.02.2005 17:04:15

ich habe etwas herumexperimentiert; allerdings gelingt es mir nicht, die selben strings herzustellen wie in der /etc/shadow!
diese sollte ja MD5 hashwerte enthalten; wenn ich allerdings mit
"echo foo|md5sum" foo hashe, dann bekomme ich einen anderen string als das passwort "foo" in der shadow ergibt.

Das führt dann dazu, dass user sich anch dem change nicht mehr einloggen können.
Ich habe allerdings herausgefunden, dass man eine ausgabe an "passwd [username]" pipen kann, allerdings klappt da was nicht so ganz, vielleicht weiss jemand eine lösung:

Code: Alles auswählen

hellforge:~# echo "foo" | passwd test
Enter new UNIX password: Retype new UNIX password: Sorry, passwords do not match
passwd: Authentication information cannot be recovered
hellforge:~#
Ich müsste also auch die zweite ausgabe korrekt an passwd pipen...

[edit]ich habe ein bisschen mit mkfifo experimentiert.
ich erzeuge eine Datei (=bla), die zwei zeilen enthält, die gleich sind
1. Zeile: foobartest
2. Zeile foobartest

nun mache ich folgendes:

Code: Alles auswählen

hellforge:~# rm testpipe
rm: remove fifo `testpipe'? y
hellforge:~# mkfifo testpipe
hellforge:~# passwd test < testpipe &
[1] 6367
hellforge:~# cat bla > testpipe
hellforge:~# Enter new UNIX password: Retype new UNIX password: No password supplied
Enter new UNIX password: Retype new UNIX password: No password supplied
Enter new UNIX password: Retype new UNIX password: No password supplied
passwd: Authentication token manipulation error
allerdings:

Code: Alles auswählen

hellforge:~# cat < testpipe &
[1] 7829
hellforge:~# cat bla > testpipe
hellforge:~# foobartest
foobartest
liegt das evtl daran, dass passwd nicht aus dateien lesen kann? ich muss doch irgendwie eine eingabe "faken" können...
Zuletzt geändert von HELLinG3R am 22.02.2005 17:27:13, insgesamt 1-mal geändert.

DeletedUserReAsG

Beitrag von DeletedUserReAsG » 23.02.2005 10:20:27

Suche halt mal nach Expect. Ist eine Art TCL-Erweiterung und wurde zu eben diesem Zweck entwickelt, die Syntax ist zudem sehr einfach gehalten.

cu

srolle
Beiträge: 325
Registriert: 09.09.2003 10:08:13
Wohnort: Zeitz (bei Leipzig)

Beitrag von srolle » 23.02.2005 10:28:39

usermod kann das Passwort als Argument im Klartext erhalten, z.B.

Code: Alles auswählen

usermod -l test -p foo
Dadurch braucht man passwd nicht aufzurufen. usermod kann aber nur als root oder mit sudo aufgerufen werden.

In dies shadow musst Du gar nichts schreiben. Wenn Du das Passwort geaendert hast, so wird die shadow durch

Code: Alles auswählen

pwconf
erzeugt bzw. aktualisiert.

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Beitrag von HELLinG3R » 23.02.2005 13:07:28

hm, ich habe das jetzt mal gestestet, allerdings wird das passwort in der shadow nicht verschlüsselt...

Code: Alles auswählen

test:foobartest:12837:0:99999:7:::

Antworten