Desarrollo y Tecnología > Linux > Server Admin > ¿ Cómo saber el usuario que ejecuta apache desde PHP ?

¿ Cómo saber el usuario que ejecuta apache desde PHP ?

Cuando estamos ejecutando nuestra web puede que nos encontremos en más de una ocasión con problemas de permisos para ejecutar los archivos o simplemente acceder a ello. En muchos de estos casos la solución es bastante sencilla, y es que el usuario que ejecuta el servicio web ( en mi caso apache ) no tiene privilegios de ejecución, lectura o escritura del archivo con problemas.

Para solucionarlo existen varias formas, solo comentaremos 3 de ellas.

La primera y más sencilla, es crear un archivo php e incluir la función de phpinfo() para ver las variables de entorno y revisar cual es el usuario que las ejecuta.

echo phpinfo();

En la página resultante revisamos las variables de entorno y buscamos el usuario y su grupo que ejecutan el servicio.

Enviroment Variables PHP
Enviroment Variables PHP

En este caso, tanto el usuario como el grupo es www-data, que es lo normal si apache se ejecuta en modo seguro.

También existe una forma de acceder directamente a las variables de entorno del servidor, por lo que podemos ejecutarlas de manera directa.

$user = getenv('APACHE_RUN_USER');
$group = getenv('APACHE_RUN_GROUP');
echo $user.":";
echo $group."
";

El código anterior nos da como resultado el usuario “dos puntos ” y el grupo. En mi caso “www-data:www-data”.

Por último, y solo disponible para linux, es preguntarle directamente al sistema operativo quién lo está ejecutando. Igual lo haremos dentro de un archivo php.

echo exec('whoami');

Lo cual nos retorna el usuario que lo ejecuta, en mi caso también “www-data”.

Bueno, y esas son 3 formas de saber cual es el usuario que está ejecutando el servicio web.

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

¡MANTENGÁMONOS EN CONTACTO!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

16 thoughts on “¿ Cómo saber el usuario que ejecuta apache desde PHP ?”

  1. Hola:
    He estado probando y no me funciona, puede que esto sea un post antiguo. Te cuento:
    Método phpinfo. No me da esa info, lo más parecido está en “Configuration apache2handler” donde en un campo llamado “User/Group” me devuelve “apache(48)/48”

    Método php: No devuelve absolutamente nada.

    Método 3 (preguntar al sistema): Me devuelve “apache”, un sola palabra por lo que no sé si es grupo o usuario.

    Si creo una carpeta con permisos 777 y por ejemplo creo algo dentro con php, se sign al usuario apache, grupo apache, por lo que entiendo que aunque no funcionen los anteriores comandos por alguna razón, apache es el propietario y el grupo también es apache.

    Problema que tengo y no entiendo:
    Si creo una carpeta no dando permisosa otros, pero sí todos los permiso “lectura, escritura y ejecución” tanto a propietario como a grupos, o sea, un 770. No puedo escribir con php dentro de es carpeta ¿Será que php usa un usurio distinto a apache y no tiene grupo asignado?. Repito, si le doy permisos 777, todo va perfecto.

    Nota: Todas las pruebas las efectúo con SElinux desactivado.

    Gracias por tu ayuda: Luis.

    Reply
    • Interesante …. mira, php no se ejecuta solo, en general lo hace apache. En muchos servers el usuario de consola es distinto al web, y este sería el caso si usas 777 y funciona.

      Si quieres corroborar los usuarios de apache y los grupos puedes ver el archivo /etc/groups

      Reply
      • Gracias por tu rápida respuesta:
        Primeramente quiero disculparme por mi escritura anterior, lo hice rápido y no vi forma de editarlo.

        Yo tengo un VPS gestionado por mí con centos. Por tanto en ssh puedo usar root o lo que mejor me vaya, eso no es problema. En cuanto al problema en si, ya lo he arreglado, pero a medias. El usuario web es apache y el grupo también, de eso estoy seguro, pero por alguna razón, ese grupo es “especial” y no se comporta como un grupo normal, o al menos eso parece. La solución adoptada a sido agregarlo a otro grupo secundario, en este caso he usado ftp y así voy más seguro, ya que casi todo lo que tengo en las webs lo “firmo” con ftp.
        En realidad es una solución a medias, porque me obliga a darle derechos de escritura para grupos a archivos y directorios que deban ser modificados por alguna de mis aplicaciones (cachés, imágenes, incluso el propio .htaccess) este último el motivo es que harto de tantos bots, programé un script que después de determinados comportamientos repetitivos, son puestos en lista negra. Esto cuando tenía un vps gestionado por el proveedor no pasaba, sin permisos de escritura a grupos funcionaba. El problema es que esto me crea inseguridad, no de intrusismo, sino en mí, la duda de si habré olvidado algo y fallará.
        La única manera que se me ocurre de evitar esas dudas sería cambiar el propietario de ftp a apache, pero esto a su vez me crearía el problema de limitar mis acciones desde ftp. En fin, todo un dilema que seguro tiene truco y yo lo desconozco.
        La solución perfecta sería que linux permitiese asignar más de un propietario a un archivo o directorio, pero creo que esto no se ha inventado aún.

        Pd: no había leído bien y no vi que por comandos sólo obtenías el usuario y por eso dije ante que sólo me devolvía un valor.

        Reply
        • Y obviamente estás seguro que “El dueño” del archivo corresponde no ? Conoces el comando chown ?

          Reply
          • Sï lo conozco. He hecho un ls -ld y sin d cache y me da el usuario que tengo en mi ftp y el grupo ftp, esto es así porque lo subí por ftp. Lo que ya es raro de narices es que los archivos de caché que se alojan dentro muchos los firma apache (que es lo lógico) y otros los firma root que ya es más raro. En cualquier caso no tiene que ver con mi problema inicial. Estas pruebas las realizo sobre una mediawiki, pero supongo que tanto da.
            De todos todos lo raro es que el grupo apache no tenga los mismos derechos que el grupo ftp, aunque eso como ya te dije lo he solucionado. En realidad lo que me pasa ahora es lógico, pero estoy seguro de que tiene que haber algún truco que no sé.

    • Creo que ya paso tiempo, y a lo mejor ya lo solucionaste el problema, como dices tienes un problema lógico muy grande, lo que no entiendo es porque el dueño es ftp, no importa que lo hallas subido por ftp. Ahora cuando visualizas un archivo desde internet (el navegador) en realidad quien esta viendo el archivo es el usuario “www-data” o a veces wwwdata ese usuario depende del sistema operativo que manejes (la version de apache que manejes no siempre trabaja con el mismo usuario), cuando tu generas una archivo y tiene permisos, en realidad son 777, Dueño-Grupo-Otros, el dueño como viste en tu caso era root o era ftp, el grupo era igual a veces root a veces ftp, ¿esto porque?, Cuando creas un usuario en linux, en realidad creas 2 cosas un usuario y un grupo, un usuario y un grupo con el mismo nombre donde el unico integrante es el usuario con el mismo nombre, ¡asi es se cran los 2!, cuando creas un archivo de cualquier forma por defecto el dueño de dicho archivo va a ser el usuario que lo creo y el grupo es el grupo que contiene dicho usuario solamente, los permisos para el resto de los usuarios esta en otros.

      En tu caso www-data esta en otros entonces el permiso que importa es el ultimo incluso puedes ponerle chown 007 y va a accesar igual que el 777, si tu vas crear contenido dentro de dicha carpeta mediante php debe de tener permiso 7, no hay de otra (en realidad www-data o apache en tu caso, porque quien accesa es el navegador al final apache es el que accesa a dicho archivo). el donde pones el 7 depende de ti si haces que el dueño de la carpeta sea tu usuario de apache entonces los permisos pueden ser 700, porque el dueño seria www-data, si www-data lo metes en un grupo y quieres que el grupo tenga los permisos 070, o simplemente dejas a www-data en “otros” le pones 007, en donde este el usuario no importa, de eso te encargas tu.

      Que un usuario tenga 2 dueños es raro e incongruente, para eso existen los grupos, pero aun asi tu puedes manejar todos los usuarios con los 3 permisos 777, solo es que sepas como hacerlo y no te enredes tanto, una carpeta para darle acceso y no se cree en el necesita permisos 5 y un archivo para accesar a el necesitas 4, el 7 solo es cuando el programa va a crear archivos dentro de esa carpeta, por cuestion de seguridad va fuera de tu dominio pero eso es otra historia.

      Tu problema es que no sabes como se manejan los permisos de forma efectiva, y el 777 o 007 no importa como lo tengas pero en tu caso que es cache, es obligatorio la seguridad seria en la ubicación de dicha carpeta no tanto en el permiso.

      ¡Espero sirva, tarde pero sin sueño!

      Reply
  2. Hola:
    He estado probando y no me funciona, puede que esto sea un post antiguo. Te cuento:
    Método phpinfo. No me da esa info, lo más parecido está en “Configuration apache2handler” donde en un campo llamado “User/Group” me devuelve “apache(48)/48”

    Método php: No devuelve absolutamente nada.

    Método 3 (preguntar al sistema): Me devuelve “apache”, un sola palabra por lo que no sé si es grupo o usuario.

    Si creo una carpeta con permisos 777 y por ejemplo creo algo dentro con php, se sign al usuario apache, grupo apache, por lo que entiendo que aunque no funcionen los anteriores comandos por alguna razón, apache es el propietario y el grupo también es apache.

    Problema que tengo y no entiendo:
    Si creo una carpeta no dando permisosa otros, pero sí todos los permiso “lectura, escritura y ejecución” tanto a propietario como a grupos, o sea, un 770. No puedo escribir con php dentro de es carpeta ¿Será que php usa un usurio distinto a apache y no tiene grupo asignado?. Repito, si le doy permisos 777, todo va perfecto.

    Nota: Todas las pruebas las efectúo con SElinux desactivado.

    Gracias por tu ayuda: Luis.

    Reply
    • Interesante …. mira, php no se ejecuta solo, en general lo hace apache. En muchos servers el usuario de consola es distinto al web, y este sería el caso si usas 777 y funciona.

      Si quieres corroborar los usuarios de apache y los grupos puedes ver el archivo /etc/groups

      Reply
      • Gracias por tu rápida respuesta:
        Primeramente quiero disculparme por mi escritura anterior, lo hice rápido y no vi forma de editarlo.

        Yo tengo un VPS gestionado por mí con centos. Por tanto en ssh puedo usar root o lo que mejor me vaya, eso no es problema. En cuanto al problema en si, ya lo he arreglado, pero a medias. El usuario web es apache y el grupo también, de eso estoy seguro, pero por alguna razón, ese grupo es “especial” y no se comporta como un grupo normal, o al menos eso parece. La solución adoptada a sido agregarlo a otro grupo secundario, en este caso he usado ftp y así voy más seguro, ya que casi todo lo que tengo en las webs lo “firmo” con ftp.
        En realidad es una solución a medias, porque me obliga a darle derechos de escritura para grupos a archivos y directorios que deban ser modificados por alguna de mis aplicaciones (cachés, imágenes, incluso el propio .htaccess) este último el motivo es que harto de tantos bots, programé un script que después de determinados comportamientos repetitivos, son puestos en lista negra. Esto cuando tenía un vps gestionado por el proveedor no pasaba, sin permisos de escritura a grupos funcionaba. El problema es que esto me crea inseguridad, no de intrusismo, sino en mí, la duda de si habré olvidado algo y fallará.
        La única manera que se me ocurre de evitar esas dudas sería cambiar el propietario de ftp a apache, pero esto a su vez me crearía el problema de limitar mis acciones desde ftp. En fin, todo un dilema que seguro tiene truco y yo lo desconozco.
        La solución perfecta sería que linux permitiese asignar más de un propietario a un archivo o directorio, pero creo que esto no se ha inventado aún.

        Pd: no había leído bien y no vi que por comandos sólo obtenías el usuario y por eso dije ante que sólo me devolvía un valor.

        Reply
        • Y obviamente estás seguro que “El dueño” del archivo corresponde no ? Conoces el comando chown ?

          Reply
          • Sï lo conozco. He hecho un ls -ld y sin d cache y me da el usuario que tengo en mi ftp y el grupo ftp, esto es así porque lo subí por ftp. Lo que ya es raro de narices es que los archivos de caché que se alojan dentro muchos los firma apache (que es lo lógico) y otros los firma root que ya es más raro. En cualquier caso no tiene que ver con mi problema inicial. Estas pruebas las realizo sobre una mediawiki, pero supongo que tanto da.
            De todos todos lo raro es que el grupo apache no tenga los mismos derechos que el grupo ftp, aunque eso como ya te dije lo he solucionado. En realidad lo que me pasa ahora es lógico, pero estoy seguro de que tiene que haber algún truco que no sé.

    • Creo que ya paso tiempo, y a lo mejor ya lo solucionaste el problema, como dices tienes un problema lógico muy grande, lo que no entiendo es porque el dueño es ftp, no importa que lo hallas subido por ftp. Ahora cuando visualizas un archivo desde internet (el navegador) en realidad quien esta viendo el archivo es el usuario “www-data” o a veces wwwdata ese usuario depende del sistema operativo que manejes (la version de apache que manejes no siempre trabaja con el mismo usuario), cuando tu generas una archivo y tiene permisos, en realidad son 777, Dueño-Grupo-Otros, el dueño como viste en tu caso era root o era ftp, el grupo era igual a veces root a veces ftp, ¿esto porque?, Cuando creas un usuario en linux, en realidad creas 2 cosas un usuario y un grupo, un usuario y un grupo con el mismo nombre donde el unico integrante es el usuario con el mismo nombre, ¡asi es se cran los 2!, cuando creas un archivo de cualquier forma por defecto el dueño de dicho archivo va a ser el usuario que lo creo y el grupo es el grupo que contiene dicho usuario solamente, los permisos para el resto de los usuarios esta en otros.

      En tu caso www-data esta en otros entonces el permiso que importa es el ultimo incluso puedes ponerle chown 007 y va a accesar igual que el 777, si tu vas crear contenido dentro de dicha carpeta mediante php debe de tener permiso 7, no hay de otra (en realidad www-data o apache en tu caso, porque quien accesa es el navegador al final apache es el que accesa a dicho archivo). el donde pones el 7 depende de ti si haces que el dueño de la carpeta sea tu usuario de apache entonces los permisos pueden ser 700, porque el dueño seria www-data, si www-data lo metes en un grupo y quieres que el grupo tenga los permisos 070, o simplemente dejas a www-data en “otros” le pones 007, en donde este el usuario no importa, de eso te encargas tu.

      Que un usuario tenga 2 dueños es raro e incongruente, para eso existen los grupos, pero aun asi tu puedes manejar todos los usuarios con los 3 permisos 777, solo es que sepas como hacerlo y no te enredes tanto, una carpeta para darle acceso y no se cree en el necesita permisos 5 y un archivo para accesar a el necesitas 4, el 7 solo es cuando el programa va a crear archivos dentro de esa carpeta, por cuestion de seguridad va fuera de tu dominio pero eso es otra historia.

      Tu problema es que no sabes como se manejan los permisos de forma efectiva, y el 777 o 007 no importa como lo tengas pero en tu caso que es cache, es obligatorio la seguridad seria en la ubicación de dicha carpeta no tanto en el permiso.

      ¡Espero sirva, tarde pero sin sueño!

      Reply
  3. Hola quiero saber porque phpinfo() me muestra que tengo php7.1 y en la terminal php -v me muestra php7.2 quisiera modificar apache2 para que me leyera php7.2 y desintalar php7.1 Gracias

    Reply
    • En general dependiendo del server puedes tener multiples instancias de PHP andando. Dependiendo de la versión puedes usar “update alternatives” para la versión de php-cli

      Reply
  4. Hola quiero saber porque phpinfo() me muestra que tengo php7.1 y en la terminal php -v me muestra php7.2 quisiera modificar apache2 para que me leyera php7.2 y desintalar php7.1 Gracias

    Reply
    • En general dependiendo del server puedes tener multiples instancias de PHP andando. Dependiendo de la versión puedes usar “update alternatives” para la versión de php-cli

      Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Share to...