Executando o Apache como um usuário diferente

8

Quando executo o comando ps -efH para listar todo o processo, posso ver o Apache sendo executado como root e parece ter subprocessos em execução como www-data . Aqui está o trecho:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Posso fazer com que o Apache e todos os subprocessos sejam executados como usuário diferente apache2d:apache2d ? Se sim como? Eu li em algum lugar que as configurações para isso podem ser encontradas em /etc/apache2/httpd.conf , mas esse arquivo parece estar vazio? Isso pode ser feito alterando o proprietário e o grupo do script /etc/init.d/apache2 e, em seguida, configurando o sinalizador setuid nele?

    
por Mridang Agarwalla 29.07.2011 / 17:37

5 respostas

18

O Apache deve ser executado como root inicialmente para vincular à porta 80. Se você não o executar como root inicialmente, não será possível vincular à porta 80. Se você deseja vincular a alguma porta acima de 1024, então sim, você posso. Caso contrário, não se preocupe com root. Esse é o processo pai do Apache e não atende a nenhum pedido. Ele gerará processos filhos e descartará privilégios para manipular solicitações.

Para alterar o usuário do Apache, defina os parâmetros User e Group em sua configuração do Apache.

    
por 29.07.2011 / 18:01
4

@bahamat explica isso muito bem, mas vou acrescentar um pouco mais de detalhes.

Durante a operação normal, o processo apache de propriedade da raiz não executará nenhuma operação real além de escutar na porta 80 e encaminhar conexões de entrada para seus filhos (com segurança sem privilégios, como www-data user).

A localização do arquivo de configuração principal depende das opções de tempo de compilação e varia por distribuição, mas /etc/apache2/apache2.conf é um bom palpite inicial.

Além disso, se você estiver configurando um sistema de webhosting para vários usuários, talvez seja melhor pesquisar SuExec e fcgid para que o processo apache de cada usuário de webhosting individual seja executado como dito usuário - de modo que se um usuário for negligente com sua segurança, outros usuários ganharão ser afetado.

    
por 31.07.2011 / 16:59
2

Além disso, confira o Apache2 ITK MPM .

Ele bifurca um thread do Apache com o uid / gid atribuído. Isso permite que você continue usando mod_php . Não mais chmod / chown etc.

    
por 23.08.2013 / 10:21
2

No Ubuntu, pelo menos, as configurações para isso estão em /etc/apache2/envvars . Tweak aqueles, reinicie o apache e você está fora e funcionando.

    
por 30.09.2014 / 21:49
0

Mac OSX:

O que funcionou para mim é entrar no arquivo de configuração do apache:

/etc/apache2/httpd.conf

Neste arquivo, pesquisei Usuário ou Grupo

e esbarrou em:

User _www
Group _www

Eu mudei para o usuário / grupo que eu precisei (no meu caso, para o usuário / grupo que é o dono dos arquivos do meu aplicativo da web que você pode ver. E isso você pode verificar usando o simples 'ls -l 'comando)

    
por 19.10.2016 / 21:40