Foros del Web » Programando para Internet » PHP »

cambiar de usuario en tiempo de ejecución

Estas en el tema de cambiar de usuario en tiempo de ejecución en el foro de PHP en Foros del Web. Mi problema es el siguente... necesito poder crear usuarios de linux medante php, para lo cual tengo 2 vías... el uso de cgi y/o scripts ...
  #1 (permalink)  
Antiguo 11/03/2005, 05:21
 
Fecha de Ingreso: marzo-2005
Mensajes: 1
Antigüedad: 19 años, 1 mes
Puntos: 0
cambiar de usuario en tiempo de ejecución

Mi problema es el siguente...

necesito poder crear usuarios de linux medante php, para lo cual tengo 2 vías... el uso de cgi y/o scripts o el uso de sudo... (descarto la manipulación directa de los archivos por engorrosa )

me decanto por la opción de instalar sudo por la flexibilidad que me da... pero a la vez resulta un peligro en cuanto a seguridad que apache (+ bien el usuario de apache) tenga derechos para poder ejecutar instrucciones como useradd, usermod o userdel.

me gustaría pues que el usuario con estos derechos fuese distinto al de apache.

con lo cual el script quedaría algo así como:

<?php
$user_name="dummy";
$pass="dummy_pass";
change_the_user($user_name,$pass); // <-(existe esta función?)
exec("sudo mkdir $this->home_dir");
close_change_the_user();
?>




y la configuración del sudo (/etc/sudoers):

dummy ALL=NOPASSWD:/bin/chown



mi pregunta es... tiene php alguna función para poder cambiar de usuario en tiempo de ejecución?

módulos como el suPHP o el uso de suEXEC no son válidos tb por problemas con la seguridad.

Muchas gracias! un saludo!
  #2 (permalink)  
Antiguo 11/03/2005, 09:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No, PHP no puede gestionar "usuarios" del S.O. del servidor .. De hecho ya estás viendo que para hacer todo eso estás usando funciones de acceso al S.O. donde ejecutas ciertos comandos .. uno de ellos es el de cambiar al usuario que corre PHP en ese instante (que bajo una instalación como "módulo de Apache" será el usurio definido para PHP) a otro usuario (root por lo que vas hacer tal vez ..).

Ahora .. visto que PHP no puede ni tiene funciones directas para todo esto .. Podrías ver otras alternativas (si existen?) a nivel de comandos própios del S.O. que estás usando (Linux) o incluso trabajar PHP en instalación como CGI (no como módulo) .. así "levantas" un usuario definido para PHP como CGI (realmente no llego a estos temas de configuración particular) ... así restringes más que acciones pueda llegar hacer ..

De todas formas .. sea el usuario X como PHP bajo CGI que tenga o "Apache" (si lo usas bajo módulo) .. al final estás usando "sudo" para cambiarte de usuarios .. así que por ese momento ese "script" (en su ejecución) va a tener los permisos que ajuste sudo...

Otra cosa que también puedes ver es realmente plantearte para que necesitas crear usuarios?. Por ejemplo .. es típico crear un usuario del "sistema" para poder crear una cuenta de e-mail por ejemplo .. Pero, no sé si conoces que existen otras formas de autentificar y tener a tus usuarios para crearles cuentas de e-mail (en el MTA que uses ..) por ejemplo pueden hacerlo contra LDAP, o con sus própias Base de datos (Mysql ..otras) .. así que de esa forma no comprometes a "usuarios del sistema" sino que sería "usuarios del servicio" .. Lo mismo ocurre para FTP y otros servicios.


Un saludo,
  #3 (permalink)  
Antiguo 10/09/2006, 22:07
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Hola Cluster, justo este es mi problema.

Necesito correr un script.php con mi usuario y no con el nobody que puedo hacer diferente al tal SUDO ?

Algo tipo clase ?

Gracias.
  #4 (permalink)  
Antiguo 11/09/2006, 07:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anarko Ver Mensaje
Hola Cluster, justo este es mi problema.

Necesito correr un script.php con mi usuario y no con el nobody que puedo hacer diferente al tal SUDO ?

Algo tipo clase ?

Gracias.
Nada tipo "classe" por qué el problema no es de "código" sino de como funciona PHP y como se comporta cuando "sale" al S.O. a ejecutar comandos como los que tu necesitas que tienen que ser ejecutados por cierto usuario.

No sé por qué necesitas crear usuarios (o con que fin concreto). Hoy en día la mayoría de servicios básicos tipo e-mail, FTP y otros pueden manejar usuarios "virtuales" donde el usuario de estos servicios NO es un usuario del S.O. físico sino que lo mantiene de una BBDD o similar.

Por ejemplo yo uso en una pequeña intranet un servidor de correo (Postfix bajo Linux), ... tuve el mismo problema: como gestionar sus usuarios/cuentas en forma cómoda y bajo PHP .. al final lo que hice es configurar dicho servidor de correo para uso de cuetas "virutales" (bajo Mysql) .. ahora uso una interface "PHP" para administrar el Servidor de correo (usuarios/dominios virtuales) fácilmente. (La aplicación es:PostfixAdmin)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 11/09/2006, 11:50
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Maestro no necesito crear usuario alguno, ya existe el condenado, pero solo me corre el script con ESE USUARIO, luego, cuando hago un whoami desde PHP, me devuelve nobody

Aqui comento, pero no veo como resolverlo:

http://www.forosdelweb.com/f18/cambiar-usuario-apache-352378/

Si me toca con SEDO, pos ni modo, ya que acabo de ver que SEDO esta instalado, pero requeriria correrlo desde HTTP://

Ayudame plis.
  #6 (permalink)  
Antiguo 11/09/2006, 16:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Anarko Ver Mensaje
Maestro no necesito crear usuario alguno, ya existe el condenado, pero solo me corre el script con ESE USUARIO, luego, cuando hago un whoami desde PHP, me devuelve nobody

Aqui comento, pero no veo como resolverlo:

http://www.forosdelweb.com/showthread.php?t=352378

Si me toca con SEDO, pos ni modo, ya que acabo de ver que SEDO esta instalado, pero requeriria correrlo desde HTTP://

Ayudame plis.
Pues .. es lo que hay.

O con SUDO o cualquier otro comando/aplicación cambias a PHP de usuario o no podrás ejecutar tu comando. No hay más vueltas.

En su defecto, NO USES PHP para este fin . .usa Perl u otros lenguajes (se usa mucho Perl para estos cometidos. No sólo debes pensar en desarrollar una aplicación en -un lenguaje- .. a veces hay que usar vários y lo mejor de cada uno para cada caso).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 13/09/2006, 03:26
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 2 meses
Puntos: 22
Cluster, ya lo he intentado con PERL, puedes vre lo que corro:

#!/usr/bin/perl
exec("/home/user/www/file.exe");

Donde file.exe no es mas que un BASH con chmod 777

Pero el condenado me da error, en cambio si abro my putty, y escribo EXACTAMENTE:
Código PHP:
/home/user/www/file.exe 
Esto va como una seda...

Tu me podrias decir como cambiar de user por PHP con SUDO ?
Que instruccion corro para ello ?

Es dcir,mi file.php se conecta como sam, como DESDE PHP y CON SUDO o lo que sea, hago que cambie de usuario ?

Gracias.
  #8 (permalink)  
Antiguo 13/09/2006, 07:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
(Aclaración: No he usado SUDO desde PHP).

Según todas las referencias al respecto, tienes que configurar primero SUDO para dar permisos a PHP (al usuario que use PHP) y que no requieras autentificación para llamarlo (para poder pedirlo por exec() y afines desde PHP). A todo esto, configuras también en SUDO el comando a ejecutar que dejas ejecutar (por seguridad).

Algunos tutoriales al respecto:
http://www.linuxparatodos.net/geeklo...omo-sudo-linux

Podría ser algo tipo:

El la configuración de SUDO:
usuario_PHP ALL=(root) NOPASSWD: /ruta/comando a ejecutar/comando

Y en PHP ejecutas tu comando tipo:
exec ('/usr/local/bin/sudo /ruta/comando a ejecutar/comando');

(Insisto que no lo he probado ni uso SUDO .. verifica estos puntos con más tutoriales).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 13:05.