usuarios usuario shell_exec saber listar esta ejemplos crear consola como comandos bloqueado administracion php sudo shell-exec passwd

php - saber - Usar shell_exec(''passwd'') para cambiar la contraseña de un usuario



listar usuarios linux consola (9)

No estoy lo suficientemente familiarizado con PHP para decirte cómo solucionarlo, pero tu problema es que los dos comandos shell_exec están completamente separados. Parece como si estuvieras tratando de usar el segundo comando para canalizar la entrada al primero, pero eso no es posible. El primer comando no debe regresar hasta que se haya ejecutado ese proceso, cuando ejecute el segundo, intentará ejecutar el programa dummyPassword , del cual probablemente podamos esperar fallar.

Necesito poder cambiar la contraseña de los usuarios a través de una página web (en un entorno controlado). Entonces, para eso, estoy usando este código:

<?php $output = shell_exec("sudo -u dummy passwd testUser testUserPassword"); $output2 = shell_exec("dummyPassword"); echo $output; echo $output2; echo "done"; ?>

Mi problema es que este script no cambia la contraseña del usuario "testUser". ¿Qué estoy haciendo mal?

Gracias


Otra opción es tener un script de shell, digamos llamado passwd_change.sh en alguna parte que se vea así:

#!/usr/bin/expect -f set username [lindex $argv 0] set password [lindex $argv 1] spawn passwd $username expect "(current) UNIX password: " send "$password/r" expect "Enter new UNIX password: " send "$password/r" expect "Retype new UNIX password: " send "$password/r" expect eof

Luego, en tu código php haz:

<?php shell_exec("sudo -u root /path/to/passwd_change.sh testUser testUserPass"); ?>


Use chpasswd:

$tmpfname = tempnam(''/tmp/'', ''chpasswd''); $handle = fopen($tmpfname, "w"); fwrite($handle, "$username:".crypt($password)."/n"); fclose($handle); shell_exec("sudo sh -c /"chpasswd -e < $tmpfname/"");

¡Tener cuidado! Si alguien obtiene el control de $ nombre de usuario, entonces puede cambiar cualquier contraseña en un sistema.


Debe usar la función crypt () para encriptar la contraseña. Luego puede llamar al programa usermod como este usermod --password username encryptedpassword .

La forma más común de cifrar una contraseña de inicio de sesión de UNIX es la siguiente:

crypt (''contraseña'', ''$ 1 $ salt1234 $'')

( Where salt1234 es una sal de ocho letras)


Un fácil que sé y que funciona (al menos para Debian 4.0r5) es:

#!/bin/bash USER="root" NEWPASS="bullsheit123" echo $USER:$NEWPASS | chpasswd echo $?

Simplemente adapte esto al script php y debería funcionar bien.



Ya es demasiado tarde, pero esto es para las personas que siguen buscando respuesta. Esto es lo que usamos. Extremadamente simple.

file_put_contents("passd", "$pass/n$pass/n"); echo "$uname: $pass/n"; `passwd $uname --stdin < passd`; `rm -rf passd`;



La primera respuesta es correcta. Probablemente desee utilizar popen() o alguna otra función que devolverá un conducto, que puede escribir como un archivo abierto con fopen() o file() .

<?php $pipe = popen("sudo -u dummy passwd testUser testUserPassword", ''r''); fwrite($pipe, "dummyPasswd/r/n"); pclose($pipe); echo "done"; ?>

No lo he probado, pero es la idea general de lo que parece estar buscando. Notará que esta configuración no proporciona la salida de los comandos que ejecutó. Para eso, necesitarás usar proc_open() que es un poco más difícil de trabajar pero brinda soporte bidireccional.