Eu não concordo com a resposta existente (e uma centena de respostas pela Internet).
É possível executar o Apache2 como algo diferente de root.
Não é assim, por padrão, o comportamento padrão do Ubuntu que está dificultando bastante as coisas para você. Todos os seus scripts e configurações esperam usar o modelo root-then-drop-privileges.
Vou apenas abordar as coisas comumente citadas como "definitivamente precisando de root" (acima e em outros lugares):
-
Porta 80 . Esqueça por um minuto que você pode querer correr em uma porta sem privilégios (algumas pessoas fazem, eu costumava rodar o Apache assim atrás do Nginx) ... Você pode ainda vincula portas baixas como não-raiz usando a estrutura de capacidades do Linux (desde
2.6.24
); dando ao Apache os direitos de vincular a qualquer porta que ele goste, independentemente do usuário:sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
Ou você pode usar o iptables para redirecionar a porta 80 para uma porta sem privilégios.
-
Lendo arquivos de configuração e certificados . Por padrão, a configuração pode ser lida por qualquer usuário. Se você bloquear
www-data
(ou qualquer usuário que esteja executando o Apache) de ler configurações ou certificados - o que você pode - você quebrará o servidor.Algumas pessoas falam sobre o processo raiz inicial como se ele pudesse ser usado para obter privilégios após inicialização. Esse não é o caso. Isso seria terrivelmente inseguro. Ele apenas controla processos filho sem privilégios.
A verdade é que você pode quebrar as coisas para fazer este trabalho. Não faça isso. Pelo menos não até você ler o post inteiro.
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
sudo /etc/init.d/apache2 stop
sudo chown -R www-data: /var/{log,run}/apache2/
sudo -u www-data apache2ctl start
E aí está você. Executando o Apache como um badass como www-data
.
Mas eu não faria isso em produção. Meu código acima não tem um script de inicialização, então você precisaria substituir ou "corrigir" /etc/init.d/apache2
para parar um root. execute a versão que está sendo executada e inicie sua versão www-data. Isso não é um empreendimento pequeno; olhe o roteiro.
Mais do que tudo, o modelo de privilégio de escalação que o Apache vem usando é testado em batalha. Por anos. Outros servidores também fazem isso. Não é mal .
Se seus administradores entrarem em contato com o que você está executando, você tem algumas opções:
-
Faça isso em uma VM (como eu fiz para testar essa resposta).
lxc
,docker
, etc, etc, etc. Configuração mínima, luz bonita e limpa e pode funcionar como um usuário "normal" por fora, parecendo um metal nu por dentro. -
Use um httpd que não precise de root. O Apache tem um ecossistema inteiro em torno dele que espera certas coisas, então não é uma boa escolha. Mas o que você escolher, você provavelmente terá que lutar contra seus scripts de inicialização.
-
Se você precisa apenas de coisas super básicas em uma porta não priv, você pode executar:
python -m SimpleHTTPServer 8000