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 apache2
e 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, apache
pode 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-data
parte 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 -o
opção define o formato de saída. No nosso caso, pedimos apenas o nome de usuário efetivo, euser
. O final =
informa ps
para 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.