Foros del Web » Programando para Internet » PHP »

cambiar user y pass en linux en PHP

Estas en el tema de cambiar user y pass en linux en PHP en el foro de PHP en Foros del Web. hola foro , la verdad soy novato en linux y tengo que hacer una aplicacion que el cliente se conecte y cambie su user y ...
  #1 (permalink)  
Antiguo 03/01/2005, 10:30
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Pregunta cambiar user y pass en linux en PHP

hola foro , la verdad soy novato en linux y tengo que hacer una aplicacion que el cliente se conecte y cambie su user y pass de su l enlinux pues la verdad no tengo idea se que las sentencias useradd y paswd son para cambiar pero como los mando ?? desde aplicacion web he visto de un comando en php que se llama exe() pero la verdad no se como funciona creo que no manda parametros y nada mas executa al SO pues no sabran de algun script que exista para hacer esto

tambien me dijeron que cambiara el user y pass del mail creo qeu esta en POP3

la verdad no tengo idea de como empezar si me podrian orientar muchas gracias

??

Última edición por The_omars; 07/01/2005 a las 09:09
  #2 (permalink)  
Antiguo 03/01/2005, 10:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En Linux tienes una aplicación llamanda "sudo" para cambiar de usuario y así tomar los privilegios de alguien como un "root" o lo que necesites para ejecutar el resto de comandos que requieras.

sudo
http://www.courtesan.com/sudo/

Es decir .. desde PHP .. tienes que ejecutar un exec() o system() o funciones afines para ejecutar sudo y ahí cambiar de usuario al que requieras con la autentificación que necesite bajo los parámetros que ahí en "línea de comandos" indicaras.

Luego . .continuar con tus exec() que correspondan para ejecutar tus comandos.

Las funciones como exec() .. system() y demás que habrás visto .. no tienen parámetros para ejecutar tus comandos pues el "parámetro" de ejecución al S.O. es una cadena con lo "mismo" que escribirías si estubieses delante de tu "consola".

Ejemplo ...

Código PHP:
$ping="127.0.0.1";
exec("ping $ip"); 
De todas las funciones que veras en:
http://www.php.net/exec

hay algunas que pueden retornar lo que la "consola" arrojará como resultado tras la ejecución del comanto .. también puedes recoger un código de error de como se ejecutó el comando en sí de PHP (exec() o la función que corresponda) además de la salida del própio S.O. ante la ejecución de tu própio comando ...

Un saludo,
  #3 (permalink)  
Antiguo 03/01/2005, 10:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
tambien me dijeron que cambiara el user y pass del mail creo qeu esta en POP3
Hay muchos servidores POP que pueden trabajar con cuentas de usuarios que NO sean del S.O. .. por ejemplo gestionadas en una BD Mysql o similar .. así no tendrías problemas de permisos y sobre todo de "alto riesgo" si vas a trabajar como más arriba te indiqué cambiando a un usuario tipo "root" desde PHP .. date cuenta que tu "contraseña" de root va a estar en un script PHP "a la vista" de cualquiera que vea los archivos de ese servidor ..

Un saludo,
  #4 (permalink)  
Antiguo 03/01/2005, 11:11
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
ok buenos datos CLUSTER

primeramente gracias


a ver si entendi bien

Código PHP:

 $ping
="127.0.0.1";
 
exec("ping $ip"); . 
la variable $ping ( se conecta al servidor linux?

exec("ping $ip"); executa el sudo ? la variable $ip ?

y entonces como lo entiendo me manda directamente a la interfaz (sudo) para cambiar el user y pass y no es necesario de madar variables.

ahora seria seguro?


perdon por la novates en esto de linux



y de las funciones que señalas que regresan error de como se ejecutó el comando en sí de PHP? cual sera la que me recomiendas?

Última edición por The_omars; 03/01/2005 a las 11:15
  #5 (permalink)  
Antiguo 03/01/2005, 11:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Todo lo que va entre "" en exec() es un comando para el S.O. de tu servidor.

"Ping" es un comando (eso era un ejemplo) .. y $ip es una variable de PHP para demostrar como "pasar" parámetros desde PHP a la ejecución del comando en el S.O.

"sudo" tiene sus própios parámetros que debes revisar y sobre toco constatar que vas a poder usarlo en tu servidor.

En el ejemplo que puse ahí no hay nada sobre "sudo" .. En definitiva . .primero debes saber que comandos debes ejecutar en "línea de comandos" de tu S.O. Linux para luego "ejecutarlos" desde PHP.

La función que mejor te vendría bien sería system() tal vez o passthru() .. revisa en la documentación de PHP cual te entrega más información.

Un saludo,
  #6 (permalink)  
Antiguo 03/01/2005, 12:07
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
otra duda

otra duda

el archivo .php para debera executarse en el servidor linux?

(o deberia conectarme al servidor?)

o lo puedo probar desde mi maquina que no es el servidor ( que esta en windows xp corriedo el archivo en easy PHp) ?

estoy perdido en este tema nunca lo habia echo



( cuando executo el system(useradd $user) me tendria que aparecer alguna pantalla o algo asi? )

Última edición por The_omars; 03/01/2005 a las 12:33
  #7 (permalink)  
Antiguo 03/01/2005, 13:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El "exec()" o el "system()" o la función que uses debe ejecutarse en el servidor "linux" .. si tu haces tus pruebas en un servidor windows .. los comandos no serán los mismos .. de hecho en linux (salvo XP pro, Windows Server 2000, 2003 y poco mas) no gestionana usuarios y permisos ...

------

Fijate bien como se usa system() (www.php.net/sytem)

Su sintax es:
string system ( string command [, int &return_var])

y ejemplos tienes ahí mismo ...


Un saludo,
  #8 (permalink)  
Antiguo 03/01/2005, 16:50
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Okl yap pero otra pregunta

ya cambie todo pero una pregunta sobre system()

como puedo controlar lo que me manda por ejemplo

echo $user=$_POST["user"];
echo "<br>";
echo $pass=$_POST["pass"];

system('useradd',$user);
system('passwd',$user);

system('$pass');

como puedo tomar valores que me manda desde system

Última edición por The_omars; 03/01/2005 a las 17:24
  #9 (permalink)  
Antiguo 04/01/2005, 05:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No .. no es así como se usa dicha función (no sé si entiendes una sintax descrita en el manual ..pero ahí no dice nada de "parametro","valor" .. Debes comprender como se "lee" una sintax descrita en el manual .. sino, no podrás "probar" nada).

Código PHP:
<?
$user
=$_POST["user"];
$salida=system("useradd $user",$respuesta);
// etc comandos ... vía system ...


echo "La última salida de la ejecución del comando es: ".$salida;
echo 
"La respuesta del S.O. tras ejecutar el comando es: ".$respuesta;
?>
Esto tampoco es muy comun hacerlo .. de hecho NO deberias hacerlo así:
echo $user=$_POST["user"];
echo "<br>";

sino
$user=$_POST["user"];
echo $user;

Pero fuera que ese es el uso de dicha función .. en tu caso particular ya te he comentado que debes usar otras herramientas (programas/comandos) para poder hacer eso mismo .. NO vas a tener suficientes permisos para ejecutar dicho comando .. PHP no corre bajo un usuario "root" o con permisos suficientes para hacer eso. Debes usar "sudo" (el link ya te lo dejé; ahí veras su sintax de uso!)

A su vez .. tienes que tener presente y SABER como se usa tal comando de Linux en tu caso .. por mi parte no sé como se le pasa un parámetro a "passwd" .. ya sé que si tu lo ejecutas en línea de comandos te lanza el "prompt" y te pide dicho password .. pero aquí se trata de buscar el comando que acepte por "parámetro" el valor que corresponda ... no sé si de la forma que pretendes usarlo te va a funcionar. (Pero esto ya no es PHP sino conocimiento de "Linux" o el Sistema operativo que uses ..).

Un saludo,
  #10 (permalink)  
Antiguo 04/01/2005, 10:48
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Ok entendido gracias por las respuestas cluster voy intentar hacer esto a ver que pasa y despues dejo el script ya terminado aqui en foros , pues si mas gente del foro me puede orientar a pag con scripts parecidos al que quiero hacer me ayudarian mucho amigos.
  #11 (permalink)  
Antiguo 06/01/2005, 09:20
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Entendido Cluster

OK CLUSTER entendido perdon por eso buen pues aqui posteo otra ves esto

ok pero, aun poniendole la ruta completa no me manda ninguna respuesta ya que necesito que me mande si la contraseña fue correcta pues me mande una confrimacion pero nop

asigno variables y no obtengo resutado.

por ejemplo

$fd=popen("/bin/login $user","w");

fputs($fd,"$pass");

echo $fd;

pclose($fd);


solo obtengo

Resource id #3 esto
  #12 (permalink)  
Antiguo 06/01/2005, 10:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. con fopen() estás escribiendo un archivo .. y lo que necesitas es usar el comando del S.O. que corresponda . .a todo esto todavía no aclaras si ya usas SUDO para que PHP tome el usuario que corresponde para ejecutar esas acciones .. ¿seguro que /bin/login .. lo puede abrir cualquier usuario .. o sólo el root?

Por lo demás .. el uso de fopen() no vas a obtener más resultado que el que ves .. un "resource id" ... para eso tienes las funciones fread() para leer de algún archivo abierto. Pero no sé que esperas haciendo eso .. fread() leería un archivo .. no una respuesta del S.O. .. en tal caso será la función fopen() la que arrojará algún error si no es posible abrir tal archivo ... de hecho ese /login $user .. no es un nombre de archivo válido

En su defecto deberías abrir un "socket"? .. pero para eso que quieres hacer? ..

-------------------


Parece que lo que tienes que hacer para crear un usuario es (usando SUDO):



Código PHP:
<?php
// usa SUDO para cambiar de usuario!!. al usuario root!.

$semilla substr($nombre_usuario02);
$password_encriptada crypt($nombre_usuario$semilla);
$comando "adduser ".$nombre_usuario." -p ".$password_encriptada;
exec($comando);
?>

Otro detalle es que las contraseñas son encriptadas ... El parámetro -p es para indicar tu password y que no haga el "prompt" para pedirtela .. (revisa el manual oficial de adduser de Linux, yo no domino Linux).

Recuerda que la función exec() .. o system() o la que uses puede retornar la "salida" y el estado de la ejecución de dicha función . .usalo.

Un saludo,

Última edición por Cluster; 06/01/2005 a las 10:24
  #13 (permalink)  
Antiguo 06/01/2005, 11:36
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Cita:
Iniciado por Cluster
// usa SUDO para cambiar de usuario!!. al usuario root!.

$semilla = substr($nombre_usuario, 0, 2);
$password_encriptada = crypt($nombre_usuario, $semilla);
$comando = "adduser ".$nombre_usuario." -p ".$password_encriptada;
exec($comando);
estoy un poco confundido el system tengo entendido que regresa

Cita:
Devuelve la última línea de la salida del comando en caso de éxito, y FALSE si se presenta algún fallo. (manual de php)

intente algo parecido a lo que tu pusiste CLUSTER para probarlo



Código PHP:
$user=$_POST["user"];
$pass=$_POST["pass"];

$password=crypt($pass);
$comando="adduser".$user." -p".$pass;

system($comando); 
pero a lo mejor estoy confundido pero pretendo recibir un parametro o algo asi que me indique que entro o que la contraseña que dio el usuario no es correcta,

al momento que corro que mando los datos pues al momento de imprimir el resultado

system($comando,$salida);

pues me arroja 3 numero que no se interpretar y lo que yo espero pues es algo asi como sale en la interfaz de linux:

interfas de linux

login: hola
password: hola

[hola@pruebas hola]$

bueno pues algo asi que me arrogara para saber si entro o no , o si su password fue el coorecto.
  #14 (permalink)  
Antiguo 06/01/2005, 14:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Las funciones de PHP tipo exec() .. system() y afines sólo te ponene a tu disposición una forma de ejecutar comandos en tu "consola" .. No estás llamando a tal función del "Sistema operativo" que devuelva un "true/false" .. sino que sólo dan una salida .. Esa "salida" .. la tendrás que interpretar tu .. pero antes debes "recoger esa salida" y eso lo hace la ejecución de las funciones tipo system() ... Si al ejecutarse un comando TAL .. no dá ninguna salida . pues tu veras como lo interpretas .. tal vez si hay "error" dé un mensaje pero no lo da si no hay error (eso ya no lo sé yo).

Y .. lo que nunca vas a ver es:

[hola@pruebas hola]$
que es el "prompt" de tu consola .. sólo la "salida" que ocasionen la ejecución de tus comandos ...

También puedes usar: shell_exec() ... y otras funciones (y sintax) .. Revisa la documentación oficial de PHP al respecto.

Otro detalle que deberías probar es a forzar a ver más mensajes de error con:
error_reporting (E_ALL);

por si hay algún error que no estés viendo .. Y ojo con las sintax de los comandos . .si dice que va un espacio .. respetalo ...


Un saludo,
  #15 (permalink)  
Antiguo 07/01/2005, 09:41
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
hola de nuevo y molestando otra vez

he estado haciendo pruebas de este script para lo que yaa les comentaba..

ahora habia puesto varias cosas como ejecutar el

Código PHP:
system('passd'); 
solamante pues me aparecio :

Changing password for user apache. Changing password for apache

me imagino que al momento de correr la aplicacion web, estoy entrando como apache? (user).

bueno pues eso solo era un comentario

ahora hice varios intentos para recoger errores pero como ya le comentana a CLUSTER que me mada numeros que la verdad no se interpretar ejemplo:


Código PHP:
<?php
$user
=$_POST["user"];
$pass=$_POST["pass"];


$password=crypt($pass);

$comando="adduser ".$user." -p ".$pass;  

system($comando);  


$eerror_reporting(E_ALL); 

echo 
$e;

// el resultado del "error, que no se si sea error? es :  2039"
e visto varios comando como shell_exec() pero todos me arrojan el mismo resultado, ahora se que este no es un foro de linux por lo mismo ya e echo un post parecido al respecto en el foro de linux.

pues la verdad muchas gracias cluster yo se que a lo mejor casi nadie ha hecho esto que quiero hacer y por eso es mas dificil encontrar respuestas o mas bien soluciones, pero en verdad agradezco toooda la informacion que me a otorgado CLUSTER.

hora pues ha encontrar la solucion y en cuanto y tenga este script pues con gusto lo compartire con el foro.
  #16 (permalink)  
Antiguo 07/01/2005, 09:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
me imagino que al momento de correr la aplicacion web, estoy entrando como apache? (user).
Si, así es .. y todos estos mensajes te lo he estado mencionando .. de hecho ya te comenté que deberías usar SUDO para cambiar de usuario (al root o al que necesites). Por qué tendrás problemas de privilegios si usas tu usuario "Apache".

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:51.