Como os encadeamentos do apache, sendo executados como não-raiz, manipulam chaves privadas (usadas para o certificado SSL)?

1

Como os filhos do apache, que estão sendo executados como um usuário não-root, podem acessar a chave privada (usada com o certificado SSL) à qual somente o root deve ter acesso?

De fato, quando o Apache está iniciando, apenas o processo principal ainda está sendo executado como root. Os segmentos estão sendo executados como um usuário não raiz. Normalmente, ao seguir os guias de segurança, o proprietário da sua chave privada é root e suas permissões são 600.

Então, como essas crianças podem estabelecer uma conexão SSL? Existe memória compartilhada entre o processo principal e os filhos, existe um arquivo temporário sendo utilizado ou o principal processo responsável pelo estabelecimento da conexão SSL?

Também (isso é um pouco fora do tópico, mas ainda é interessante) isso significa que ser capaz de comprometer um servidor web significa ser capaz de comprometer a chave privada? Por exemplo, digamos que somos capazes de obter acesso a um webshell PHP (como PHP e Apache geralmente compartilham o mesmo usuário), isso significa que poderíamos recuperar (de um jeito ou de outro) as chaves privadas?

Obrigado.

    
por Pierre 15.09.2014 / 13:55

2 respostas

2

Os direitos de root também são necessários para se vincular às portas TCP privilegiadas 80 e 443, abrindo os arquivos de log, e não apenas para o direito de ler os arquivos de configuração, incluindo as chaves públicas e privadas.

Do manual do Apache :

... it is necessary to have root privileges in order to start apache, so that it can bind to this privileged port. Once the server has started and performed a few preliminary activities such as opening its log files, it will launch several child processes which do the work of listening for and answering requests from clients. The main httpd process continues to run as the root user, but the child processes run as a less privileged user. This is controlled by the selected Multi-Processing Module.

Com relação aos arquivos de chave pública e privada SSL, o AFAIK só é lido na inicialização, após o qual eles ficam na memória e permanecem disponíveis enquanto o servidor permanece em execução. (Veja esta questão )

Por isso, depois de heartbleed , que expôs pedaços aleatórios de memória do servidor web, você também precisou gerar novos certificados SSL e simplesmente corrigir não foi o suficiente. Com tempo e um pouco de sorte, o heartbleed poderia ter exposto os fragmentos de memória contendo sua chave privada SSL.

    
por 15.09.2014 / 14:27
0

IMHO as crianças não lidam com eles em tudo. Como o processo raiz está tomando todas as conexões TCP - e encaminhando a solicitação e voltando para o filho desde o tratamento - a criança nunca precisa lidar com o certificado. Tudo o que tem a fazer é lidar com os dados canalizados do processo pai - e refazer a saída.

Ele nunca estabelece uma conexão SSL para começar.

    
por 15.09.2014 / 14:05