¿Cómo obtener el nombre de usuario (únicamente) de Apache?

¿Cómo obtener el nombre de usuario (únicamente) de Apache?

Estoy intentando escribir un script Bash para archivos chown'in automáticos para el usuario de Apache2. Pero antes necesito estar 100% seguro de cuál es el nombre de usuario. Sé que normalmente son www-data. Pero necesito estar seguro si, digamos, antes de que el nombre de usuario haya sido cambiado de alguna manera.

Estoy buscando una cadena que devuelva SÓLO el nombre de usuario de Apache2.

Lo sé # ps -aux | grep apache2y muchos otros, pero me devuelven una gran cantidad de datos y solo necesito un nombre de usuario.

¡Cualquier ayuda es muy apreciada!

Gracias.

Respuesta1

El nombre de usuario y el ID de grupo de Apache2 se establecen mediante una directiva en el archivo de configuración. Este se encuentra en el archivo /etc/apache2/envvars.

Puedes examinar ese archivo y notar que, de forma predeterminada, como sospechabas, es www-data. Además, como puede ver en el archivo, el grupo de usuarios está configurado de forma predeterminada con el mismo nombre.

Ahora que tienes el usuario efectivo, apachepuedes usar esto para cambiar los archivos a ese usuario:

$ sudo chown -R www-data:www-data myhtmldirectory

Eso cambiará el usuario y propietario del grupo de myhtmldirectory y todos los archivos y directorios debajo de él a www-data.

Si simplemente desea cambiar el propietario del usuario, elimine la :www-dataparte que es para el grupo.

Una forma muy segura de tener el usrID correcto es:

$ awk -F= '$1 == "export APACHE_RUN_USER" {print $2}' /etc/apache2/envvars

Esta línea analizará el archivo envvars de la sesión actual que se inició.

Respuesta2

Para encontrar los nombres del usuario efectivo de cualquier proceso que coincida apache2, utilice:

ps -o euser= -C apache2

La -oopción establece el formato de salida. En nuestro caso, solo solicitamos el nombre de usuario efectivo euser. El final =indica psque se suprima la línea de encabezado normal. De esta manera, el resultado consta únicamente de nombres de usuario que coincidan apache2.

No tengo apache2 ejecutándose, así que como ejemplo:

$ ps -o euser= -C mount.ntfs
root
$ ps -o euser= -C atd
daemon

Respuesta3

Encontré una gran solución fácil, que devuelve SÓLO el nombre de usuario de apache2:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

Gracias.

información relacionada