Como obter o nome de usuário (apenas) do Apache?

Como obter o nome de usuário (apenas) do Apache?

Estou tentando escrever um script Bash para arquivos chown'in automáticos para o usuário Apache2. Mas preciso antes ter 100% de certeza de qual é o nome de usuário dele? Eu sei que geralmente são www-data. Mas preciso ter certeza se, digamos, antes o nome de usuário foi alterado de alguma forma.

Estou procurando uma string que retorne SOMENTE o nome de usuário do Apache2.

Eu conheço # ps -aux | grep apache2e muitos outros, mas eles retornam uma grande quantidade de dados e só preciso de um nome de usuário.

Qualquer ajuda é muito apreciada!

Obrigado.

Responder1

O nome de usuário e o ID do grupo do Apache2 são definidos por uma diretiva no arquivo de configuração. Ele está localizado no arquivo /etc/apache2/envvars.

Você pode examinar esse arquivo e perceber que, por padrão, como você suspeitava, ele é www-data. Além disso, como você pode ver no arquivo, o grupo de usuários é definido por padrão com o mesmo nome.

Agora que você tem o usuário efetivo, apachepode usar isto para alterar os arquivos para esse usuário:

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

Isso mudará o usuário e proprietário do grupo myhtmldirectory e todos os arquivos e diretórios abaixo dele para www-data.

Se você quiser apenas alterar o proprietário do usuário, elimine a :www-dataparte que é para grupo.

Uma maneira muito segura de ter o usrID correto é:

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

Esta linha analisará o arquivo envvars da sessão atual que foi iniciada.

Responder2

Para encontrar os nomes do usuário efetivo de qualquer correspondência de processo apache2, use:

ps -o euser= -C apache2

A -oopção define o formato de saída. No nosso caso, pedimos apenas o nome de usuário efetivo, euser. O final =informa pspara suprimir a linha normal do cabeçalho. Dessa forma, a saída consiste apenas em nomes de usuários correspondentes apache2.

Não tenho o apache2 em execução, por exemplo:

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

Responder3

Encontrei uma ótima solução fácil, que retorna SOMENTE o nome de usuário do Apache2:

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

Obrigado.

informação relacionada