Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: eduardozo en 22 Marzo 2015, 16:03 pm



Título: [Consulta] Crear usuario local en Ubuntu PHP+MySQL
Publicado por: eduardozo en 22 Marzo 2015, 16:03 pm
Hola Comunidad

Estoy trabajando en un proyecto web, de momento tengo un formulario de registro y LogIn enlazado con una base de datos en MySQL, en decir, Inserto nuevos usuarios en la tabla USERS.

Este tema lo he abierto porque necesito ayuda o consejos de alguien experto como ustedes, bien el asunto es el siguiente:

Necesito que para cada registro nuevo que se almacene en la base de datos se cree un usuario local en ubuntu.

cada vez que el usuario inicie la sesión podrá acceder a su directorio personal, ejemplo: "/home/Usuario" y ver todo el contenido, por ejemplo imágenes.

La tabla de usuarios tiene:
iduser=1001
Nombre=John
Apellido=Dalton
Usuario=jdalton
Password=r.f23we
Email=@email
Path=/home/jdalton


Gracias!


Título: Re: [Consulta] Crear usuario local en Ubuntu PHP+MySQL
Publicado por: lastre en 24 Marzo 2015, 15:44 pm
en php puedes usar la función exec() con la que puedes ejecutar un script alojado en el servidor:
Código
  1. <?php
  2. $nombre_usuario = $_POST["usuario"];
  3. exec("crear_usuario.sh ".$nombre_usuario, $output); // Creo recordar que era algo asi
  4. ?>
  5.  

crear_usuario.sh:
Código
  1. useradd $1

NOTA:Tendrias que asegurarte de que la gente no pase valores raros ya que estas pasando lo que el usuario entra directamente al ordenador, asi que ojo.


Título: Re: [Consulta] Crear usuario local en Ubuntu PHP+MySQL
Publicado por: [u]nsigned en 24 Marzo 2015, 16:01 pm
Por lo que se, es preferible usar la funcion passthru (http://php.net/manual/es/function.passthru.php) que exec o system. Puedes probar algo asi:

Código
  1. <?php
  2.  
  3. $user_name = "unsigned";
  4. $user_pass = "noejecutesesto";
  5.  
  6. $ret_useradd = 0;
  7. $ret_passwd = 0;
  8.  
  9. passthru('useradd -m '.$user_name, $ret_useradd);
  10.  
  11. if ($ret_useradd) {
  12.        printf("No se pudo agregar usuario, codigo de salida: %d\n", $ret_useradd);
  13.        exit();
  14. }
  15.  
  16. passthru('echo "'.$user_name.':'.$user_pass.'" | chpasswd', $ret_passwd);
  17.  
  18. if ($ret_passwd) {
  19.        printf("No se pudo modificar password, codigo de salida: %d\n", $ret_passwd);
  20.        echo exec('userdel '.$user_name);
  21.        exit();
  22. }
  23.  
  24. printf("Usuario Agregado!\n");
  25.  
  26. ?>
  27.  

Y por ultimo, no se que nivel de programacion y especificamente de PHP dominas, pero NUNCA JAMAS pases valores de $_POST directamente a la aplicacion sin antes filtrarlos. Y sobre todo menos aun si es un sistema que ejecutara comandos de sistema en el servidor.


Título: Re: [Consulta] Crear usuario local en Ubuntu PHP+MySQL
Publicado por: eduardozo en 24 Marzo 2015, 17:50 pm
Muchas gracias por responder lastre, && unsigned
veo interesante las propuestas y voy hacer pruebas con ésta lógica y os comentaré que tal.

El código anterior ejemplifica la creación del nuevo usuario, pero como hacer la autenticación entre ubuntu(usuario local) y mysql

por ejemplo:
asumimos que el usuario esta creado con el script anterior.

la pregunta es: ¿cómo hacer el login?

secuencia:
form login(php) --> (consulta la tabla usuarios,user,pass)phpmyadmin -->[Duda...]  

recordar que necesito tener acceso al directorio personal para visualizar las imágenes de cada usuario que ha hecho login.
 


Título: Re: [Consulta] Crear usuario local en Ubuntu PHP+MySQL
Publicado por: #!drvy en 24 Marzo 2015, 18:29 pm
Citar
la pregunta es: ¿cómo hacer el login?

Sinceramente, creo que deberías replantearte toda la lógica de tu proyecto. Lo que estas intentando hacer es un controlador que haga de intermediario entre web y SO. Eso es ineficiente, inseguro y poco lógico en el 99% de los casos.

A no ser que estés creando un proyecto tipo Webmin o Cpanel realmente no veo el sentido a todo eso. Si necesitas que cada usuario tenga una carpeta personal puedes crearte tu propio CMS que maneje los directorios o utilizar rutas y registros en la BD.

Ten en cuenta que tu servidor HTTP ya se ejecuta bajo un usuario y tiene los privilegios de dicho. Hacer un 'login' mediante el sistema significaría tener que cambiar el usuario por cada login algo realmente ineficiente y no mencionar ni los posibles problemas de seguridad. Es que vamos, para mi no tiene sentido nada de esto..

Saludos