PHP adiciona o host virtual dinamicamente

1

Estou desenvolvendo um aplicativo da Web em PHP que, entre outras coisas, precisa permitir que o usuário adicione, edite e exclua entradas do host virtual do Apache. (Estou incluindo um arquivo de configuração web-writable no meu Apache2.conf). Qual é a melhor maneira de reiniciar o Apache ou reconhecer essas alterações no arquivo vhost? A única maneira que vejo é de alguma forma escalar o PHP para privilégios de root e chamar "apachectl gracioso" quando o arquivo é atualizado, existe uma maneira melhor? Eu prefiro que as mudanças entrem em vigor imediatamente, em vez de esperar que um crontab seja executado ...

    
por Chris 05.02.2012 / 20:29

2 respostas

6

De uma perspectiva de segurança, não se pode imaginar muitas ideias piores. As pessoas fazem o seu caminho usando o chroot e outros mecanismos para tentar remover os privilégios do processo / usuário efetivo do servidor web. Independentemente de conceder ou não privilégios escalonados ao usuário da Web, você está concedendo ao processo da Web a capacidade de definir o que é executável por qual tipo de script em quais diretórios, permitindo que ele reescreva o arquivo de configuração. Ideia horrível e horrível.

Eu sugeriria criar um conjunto de ações muito limitadas que o servidor da Web poderia executar, talvez escrevendo o nome e os diretórios iniciais dos hosts virtuais necessários em um arquivo de texto na raiz da web. Algum outro processo com as permissões necessárias pode então verificar a sintaxe e transformá-la nas mudanças necessárias. Ou envie os comandos diretamente por uma conexão TCP para uma porta na mesma máquina, conforme descrito abaixo.

Para limitar o escalonamento de privilégios a somente tomar essa ação, você poderia gravar um servidor TCP escutando em uma porta especial para a qual o serviço da Web poderia enviar uma mensagem de reinicialização; Escrevi esses servidores TCP de finalidade especial (apenas algumas centenas de linhas de C, grande parte disponível como modelo) para permitir que um processo de servidor Web isolado chroot tivesse acesso a algum outro serviço que normalmente estaria indisponível sem conceder a ele carte enfraquecer o acesso ao sistema de arquivos e binários.

    
por 05.02.2012 / 22:06
1

Se você realmente quer fazer isso, e faça isso com o Apache, leia sobre mod_vhost_alias - sem alterações no httpd.conf, não reinicia

    
por 06.02.2012 / 00:46