À l'aide de shell_exec('passwd') pour changer un mot de passe utilisateur
J'ai besoin d'être en mesure de changer les utilisateurs d'un mot de passe par le biais d'une page web (dans un environnement contrôlé).
Donc, pour cela, je suis en utilisant ce code:
<?php
$output = shell_exec("sudo -u dummy passwd testUser testUserPassword");
$output2 = shell_exec("dummyPassword");
echo $output;
echo $output2;
echo "done";
?>
Mon problème est que ce script n'est pas de changer le mot de passe pour l'utilisateur "testUser".
Ce que je fais mal?
Grâce
Autres que l'accès au shell d'une méthode de mal, comme toutes les réponses essayer de résoudre, la commande passwd est faux. Au moins dans mon livre, vous ne pouvez pas il suffit d'écrire le nouveau mot de passe comme ça sur la ligne de commande.
OriginalL'auteur RSilva | 2008-09-24
Vous devez vous connecter pour publier un commentaire.
Une autre option est d'avoir un script shell, disons appelé passwd_change.sh quelque part, qui ressemble à ceci:
Ensuite dans votre code php n':
Aussi, ce script échoue parce que lors de l'appel de
passwd
à l'aide deroot
, il ne demande pas laroot
de l'utilisateur pour l'utilisateur, mot de passe actuel.Cette méthode fonctionne néanmoins, malgré le code de mal. Ubuntu au moins ne sera pas accepter l'ancien mot de passe pour le nouveau, un changement qui n'a aucun sens de toute façon. Modifier le script un peu, et ça fonctionne.
OriginalL'auteur bmdhacks
Je ne suis pas assez familier avec PHP pour vous dire comment résoudre le problème, mais le problème est que les deux
shell_exec
commandes sont entièrement distinctes. Il semble que vous essayez d'utiliser la deuxième tube de commande d'entrée à la première, mais ce n'est pas possible. La première commande ne devrait pas revenir jusqu'à ce qu'après que le processus est exécuté, lorsque vous exécutez le second, il tentera d'exécuter le programmedummyPassword
, que nous pouvons sans doute s'attendre à l'échec.OriginalL'auteur Jeremy
Utilisation chpasswd:
Méfiez-vous! Si quelqu'un va prendre le contrôle sur $username alors il peut changer de mot de passe sur un système.
OriginalL'auteur Tometzky
Utilisation proc_open, qui vous permettra d'interagir avec le processus de stdin.
Voir ce commentaire en particulier le manuel de: http://www.php.net/manual/en/function.proc-open.php#58044
OriginalL'auteur Jonathan Arkell
La première réponse est correcte. Vous voudrez probablement utiliser
popen()
ou une autre fonction qui retourne une pipe, vous pouvez écrire à juste comme un fichier ouvert avecfopen()
oufile()
.Je n'ai pas testé, mais c'est l'idée générale de ce que vous semblez être aller pour. Vous remarquerez que cette installation ne fournit pas pour la sortie des commandes exécutées. Pour cela, vous aurez besoin d'utiliser
proc_open()
qui est un peu plus difficile à travailler, mais ne fournissent bi-directionnel de soutien.OriginalL'auteur Jeremy DeGroot
Vous devez utiliser le crypt() fonction pour crypter le mot de passe. Ensuite, vous pouvez appeler la
usermod
programme de ce genreusermod --password username encryptedpassword
.La façon la plus commune pour chiffrer un UNIX mot de passe de connexion est comme ceci:
(
Where salt1234
est un huit lettre de sel)OriginalL'auteur voldern
Facile je sais et qui fonctionne (au moins pour Debian 4.0r5) est:
Juste s'adapter à cela le script php et il devrait fonctionner correctement.
OriginalL'auteur
Je l'ai il est trop tard, mais c'est pour les gens toujours à la recherche de réponses. C'est ce que nous utilisons. Extrêmement simple.
OriginalL'auteur Cem Kalyoncu
Je préfère utiliser 2 processus distincts: http://sylnsr.blogspot.com/2012/09/keep-unix-password-in-sync-with.html
OriginalL'auteur MikeM