Mit shell_exec('passwd') zum ändern des Kennworts eines Benutzers
Ich muss in der Lage sein, ändern Sie das Benutzer-Kennwort über eine web-Seite (in einer kontrollierten Umgebung).
Also, ich bin mit diesem code:
<?php
$output = shell_exec("sudo -u dummy passwd testUser testUserPassword");
$output2 = shell_exec("dummyPassword");
echo $output;
echo $output2;
echo "done";
?>
Mein problem ist, dass dieses Skript nicht ändern das Passwort für den Benutzer "testUser".
Was mache ich falsch?
Dank
Andere als die shell-access-Methode als falsch, wie alle Antworten, die versuchen, zu lösen, die passwd-Befehl ist falsch. Zumindest in meinem Buch, das man nicht einfach schreiben das neue Kennwort wie das auf der commandline.
InformationsquelleAutor RSilva | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weitere option ist, um ein shell-Skript, sagen, genannt passwd_change.sh irgendwo sieht wie folgt aus:
Dann in deinem php-code tun:
Auch dieses Skript schlägt fehl, da beim Aufruf
passwd
mitroot
es nicht Fragen, dieroot
Benutzer für den Benutzer das aktuelle Kennwort.Diese Methode funktioniert trotzdem, obwohl der code falsch. Ubuntu zumindest nicht akzeptieren, wird das alte Passwort, das neue, eine Veränderung, die keinen Sinn macht, sowieso. Ändern Sie das Skript ein bisschen und es funktioniert.
InformationsquelleAutor bmdhacks
Ich bin nicht vertraut genug mit PHP aus um Ihnen zu sagen wie man es beheben, aber dein problem ist, dass die beiden
shell_exec
- Befehle sind vollständig getrennt. Es scheint, als ob Sie versuchen, verwenden Sie den zweiten Befehl, um die pipe-Eingabe für die erste, aber das ist nicht möglich. Der erste Befehl sollte nicht zurückkehren, bis nach, dass der Prozess ausgeführt wurde, wenn Sie führen Sie die zweite und es wird versuchen, führen Sie das ProgrammdummyPassword
, die können wir wohl erwarten, zu scheitern.InformationsquelleAutor Jeremy
Verwenden chpasswd:
Achtung! Wenn jemand in den Griff bekommen, auf $username, dann kann er jederzeit zu ändern-Passwort auf einem system.
InformationsquelleAutor Tometzky
Verwenden proc_open, mit denen Sie interagieren mit dem Prozess stdin.
Finden Sie in diesem Kommentar insbesondere auf das Handbuch: http://www.php.net/manual/en/function.proc-open.php#58044
InformationsquelleAutor Jonathan Arkell
Die erste Antwort korrekt ist. Sie wollen wahrscheinlich verwenden
popen()
oder eine andere Funktion zurückgeben, ein Rohr, das können Sie schreiben, nur wie eine Datei geöffnet mitfopen()
oderfile()
.Habe ich noch nicht getestet, aber es ist die Allgemeine Vorstellung von dem, was Sie zu sein scheinen. Sie werden bemerken, dass dieses setup nicht für die Ausgabe der Kommandos, die ausgeführt werden. Für die, die Sie verwenden müssen
proc_open()
das ist ein wenig schwieriger, mit zu arbeiten, aber bietet bi-direktionale Unterstützung.InformationsquelleAutor Jeremy DeGroot
Sollten Sie die crypt() Funktion um das Kennwort zu verschlüsseln. Dann können Sie die
usermod
Programm wie diesesusermod --password username encryptedpassword
.Die gängigste Methode zum verschlüsseln eines UNIX-login-Passwort ist so:
(
Where salt1234
ist ein acht Buchstaben Salz)InformationsquelleAutor voldern
Einfache, die ich kenne und die funktioniert auch (zumindest für Debian 4.0r5):
Nur passen diese an das php-script und es sollte funktionieren.
InformationsquelleAutor
Ich ist es zu spät, aber das ist für Menschen, die noch auf der Suche Antwort. Dies ist, was wir verwenden. Äußerst einfach.
InformationsquelleAutor Cem Kalyoncu
Ich lieber mit 2 separaten Prozessen: http://sylnsr.blogspot.com/2012/09/keep-unix-password-in-sync-with.html
InformationsquelleAutor MikeM