Executando o Apache como um usuário diferente

10

Quando executo o ps -efHcomando para listar todo o processo, vejo o Apache executando como roote parece ter subprocessos executando 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 o Apache e todos os subprocessos serem executados como usuários diferentes apache2d:apache2d? Se sim, como? Li em algum lugar que as configurações para isso podem ser encontradas, /etc/apache2/httpd.confmas esse arquivo parece estar vazio? Isso pode ser feito alterando o proprietário e o grupo do /etc/init.d/apache2script e configurando o sinalizador setuid nele?

Mridang Agarwalla
fonte

Respostas:

21

O Apache deve ser executado como raiz inicialmente para ligar a porta 80. Se você não o executa como raiz inicialmente, não pode ser ligado à porta 80. Se você deseja vincular a alguma porta acima de 1024, sim, é possível. Caso contrário, não se preocupe com a raiz. Esse é o processo pai do Apache e não atende a nenhuma solicitação. Ele gerará processos filhos e eliminará privilégios para lidar com solicitações.

Para alterar o usuário do Apache, defina os parâmetros Usere Groupna sua configuração do Apache.

bahamat
fonte
Bem, desculpe-me por discordar, mas noto que o haproxy pode ser executado como haproxy (não como root) e vincular a porta TCP 80. Como isso alcança? Alguma iluminação?
kiiwii
1
Não faz. Os processos só podem se vincular a portas abaixo de 1024 se tiver privilégios de superusuário. Portanto, o haproxy está começando como root e eliminando privilégios (provavelmente) ou root setuid (improvável).
7284 bahamat
Você não precisa executá-lo como root, apenas permite que o usuário 'apache' acesse portas restritas (ou seja, aquelas abaixo de 1024). Esta resposta explica como você pode usar o 'authbind' para fazer isso: superuser.com/questions/710253/…
Animal451 09/09/18
4

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

No curso da operação normal, o processo apache de propriedade da raiz não executará nenhuma operação real que não seja a escuta na porta 80 e o encaminhamento de conexões de entrada para seus www-datafilhos (com segurança não privilegiados, como o usuário).

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

Além disso, se você estiver configurando um sistema de hospedagem para web multiusuário, convém procurar no SuExec e no fcgid para que o processo apache de cada usuário da hospedagem seja executado como o mesmo usuário - para que, se um usuário negligencie sua segurança, outro os usuários não serão afetados.

Shadur
fonte
3

No Ubuntu, pelo menos, as configurações para isso estão em /etc/apache2/envvars. Ajustá-los, reinicie o apache e você estará pronto.

mlissner
fonte
Obrigado, isso me ajudou! Estou configurando uma caixa vagrant no ubuntu e, por algum motivo, o /etc/apache2/httpd.conf não estava sendo usado para carregar o usuário e o grupo. envares parece fazer o truque!
Greg
2

Além disso, confira o Apache2 ITK MPM .

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

Olli
fonte
Upvoting para mpm_itko que é uma melhoria significativa sobre suexec / fcgid
Shadur
0

Mac OS X:

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

/etc/apache2/httpd.conf

Neste arquivo, procurei Usuário ou Grupo

e esbarrou em:

User _www
Group _www

Eu mudei para o que sempre usuário / grupo que eu precisava (no meu caso, para o usuário / grupo que é o proprietário dos meus arquivos de aplicativos da web que você pode ver. E isso você pode verificar usando o simples 'ls -l' comando)

Mercúrio
fonte