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 apache2
y 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, apache
puedes 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-data
parte 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 -o
opción establece el formato de salida. En nuestro caso, solo solicitamos el nombre de usuario efectivo euser
. El final =
indica ps
que 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.