Por que é ruim ter arquivos de gravação raiz em um diretório não pertencente ao root?

27

Isso surgiu em um comentário para outra pergunta e eu adoraria se alguém pudesse explicar as razões disso para mim.

Eu sugeri que o Apache registrasse os erros de um determinado VHost no diretório pessoal de um usuário. Isto foi abatido porque era inseguro. Por quê?

Pedi esclarecimentos em um comentário de resposta, mas tudo que consegui foi que é inseguro ter a redação em uma pasta que não é de propriedade do root. Mais uma vez, alguém poderia explicar?

Obrigado,

Bart.

    
por Bart B 22.09.2009 / 15:40

2 respostas

31

Porque um usuário malvado pode tentar apontar maliciosamente o arquivo root está gravando em um local diferente . Isso não é tão simples, mas é realmente possível.

Como exemplo, se um usuário encontrar o caminho para fazer um symlink a partir do suposto registro do Apache para, digamos, / etc / shadow você terá de repente um sistema inutilizável. O Apache ( root ) sobrescreveria as credenciais de seus usuários, tornando o sistema defeituoso.

ln -s /etc/shadow /home/eviluser/access.log

Se o arquivo access.log não for gravável pelo usuário, pode ser difícil sequestrá-lo, mas evitar a possibilidade é melhor!

Uma possibilidade poderia ser usar o logrotate para fazer o trabalho , criando o link para um arquivo que ainda não existe, mas que logrotate irá sobrescrever assim que os logs crescerem :

ln -s /etc/shadow /home/eviluser/access.log.1

Observação :

O método symlink é apenas um dos possíveis ataques, dados como prova de conceito.

A segurança tem que ser feita com uma mente da Lista Branca , não colocando na lista negra o que sabemos ser um problema.

    
por 11.08.2010 / 20:48
1

O princípio geral de não ter processos escritos em um diretório que eles não possuem ou confiam é bom. Mas neste caso em particular, é razoável confiar que o código do Apache abre o log com O_NOFOLLOW etc: fazer login no diretório inicial de um usuário é uma configuração comum.

    
por 22.11.2010 / 08:43