Informa ao Apache para criar error.log / access.log como usuário diferente

5

Se você disser ao Apache para usar arquivos CustomLog, o Apache2 criará esses arquivos na inicialização. E isso sempre dá ao usuário root: root. Como posso alterar o comportamento ?

Plano de fundo

O Apache é executado com

SuexecUserGroup www-data www-data

e, ao mesmo tempo, eu uso um CustomLog que canaliza a saída para um script. O script remove dois bytes do IP e, em seguida, redireciona para o arquivo de log. Como você não pode dizer ao Apache para omitir o IP do error.log, este resultado é importante (em relação à lei de privacidade alemã).

O script não pode acessar meu log personalizado se isso não pertencer a www-data .

Se eu mudar de proprietário, tudo funcionará bem.

Eu também sei como alterar o proprietário do arquivo quando logrotate renomeia e recria o arquivo de log.

No entanto, se eu parar o processo do Apache, excluir os arquivos de log e, em seguida, reiniciar o processo do Apache, novos arquivos pertencentes a root: root serão criados.

Como posso dizer ao Apache para criar os novos arquivos nulos como / para www-data na inicialização?

    
por BurninLeo 14.06.2013 / 15:57

2 respostas

2

Esta frase:

The script cannot access my custom log if this does not belong to www-data.

Está em contradição direta com o link :

Piped log processes are spawned by the parent Apache httpd process, and inherit the userid of that process. This means that piped log programs usually run as root. It is therefore very important to keep the programs simple and secure.

Se o cenário descrito for de alguma forma correto, você ainda pode contornar o problema

  1. Ignorando o nome do arquivo de log fornecido no arquivo de configuração
  2. Como criar seu próprio nome de arquivo de log no script
  3. Redirecionando o stdout para o arquivo de sua escolha como em (2)
por 14.06.2013 / 16:20
-1

Eu encontrei o mesmo problema, mas sendo incapaz de alterar o script que escreve o log, eu poderia alterar o script que o interpretou.

Mais preciso mudei o cron que chamava o script interpretador pois o cron pertencia ao root e assim antes de chamar o intérprete (como usuário diferente) eu corro:

chown www-data:www-data /var/log/apache2/*.log

Não é a melhor solução e definitivamente não é o que você gostaria em um servidor ocupado, mas em uma pequena instalação é bom o suficiente.

    
por 30.12.2017 / 11:04