AWStats: não é possível acessar /var/log/apache2/access.log

14

Instalei o awstats no meu novo servidor Ubuntu Lucid, mas quando o cron tenta executá-lo como usuário www-data, ele reclama disso cannot access /var/log/apache2/access.log: Permission denied.

Em /usr/share/doc/awstats/README.Debianhá este parágrafo:

Por padrão, o Apache armazena (desde a versão 1.3.22-1) os arquivos de log com uid = root e gid = adm, portanto, você ...

1) Altere os direitos dos arquivos de log em /etc/logrotate.d/apache para que www-data tenha pelo menos acesso de leitura.

2) Como 1), mas mude para um usuário específico e use o recurso suEXEC do Apache para executar o mesmo usuário (e altere o direito de / var / lib / awstats também ou use outro diretório). Isso é mais complicado, mas os logs geralmente não são acessíveis ao servidor (que provavelmente era o ponto do padrão do Apache).

3) Altere awstats.pl para agrupar adm (mas cuidado para que você corra o risco de permitir que um script CGI acesse as coisas de administrador na máquina!).

Eu usaria 1, mas quais são as permissões recomendadas para conceder?

Joril
fonte
Tente isso, não posso prometer se funcionará: chown www-data:www-data <yourFile>e então chmod 655 <yourFile>.
theTuxRacer
1
Bem, para fazer o awstats funcionar, basta chmod 755 /var/log/apache2e chmod 644 access.log, mas eu gostaria de uma resposta "essa é a melhor prática" :) Obrigado por comentar!
Joril
Eu acho que você está certo em usar o número 1 (apenas com acesso de leitura, a menos que exista algo que o awstats precise). Isso dá acesso a uma conta de usuário limitada e não concede novo acesso a nada além disso.
22411 Belacqua

Respostas:

8

Se você optar pelo ponto 1 e indicar que os dados www devem ter pelo menos permissão de leitura, o recomendado é conceder apenas leitura.

Você pode alterar a linha (no arquivo logrotate):

create 640 root adm

para

create 644 root adm

Para dar a todos os usuários (www-dados incluídos) permissão de leitura.

Você precisará alterar os arquivos existentes das permissões em / var / log / apache2 / para corresponder a essa configuração

chmod a+r /var/log/apache2/* #or whatever your path is

Todos os arquivos poderão ser lidos por todos os usuários e todos os arquivos que a rotação de log criar no futuro terão as permissões necessárias.

teísta
fonte
2
E para "todos os usuários" para ser capaz de olhar em "/ var / log / apache2 /" fazer Adicionalmente: a + x / var / log chmod / apache2 /
alfonx
6

Na maioria das configurações:

  • O awstats é executado como seu usuário apache www-data ;
  • os arquivos de log do apache são de propriedade de root: adm e têm permissões -rw-r ----- (aka: chmod 640 ); e
  • as configurações de propriedade e permissões podem ser encontradas no arquivo /etc/logrotate.d/apache2 , cujo conteúdo é:

    /var/log/apache2/*.log {
        daily
        missingok
        rotate 60
        compress
        delaycompress
        notifempty
        dateext
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript }
    

A solução mais simples é:

1) Altere " create 640 root adm " para " create 644 root adm " em /etc/logrotate.d/apache2 usando seu editor de texto favorito ou, se você precisar criar um script para tudo:

sudo sed -i 's/create 640 root adm/create 644 root adm/g' /etc/logrotate.d/apache2

2) Altere as permissões em /var/log/apache2/access.log e /var/log/apache2/error.log para 644 .

sudo chmod 644 /var/log/apache2/access.log /var/log/apache2/error.log

3) Reinicie o apache.

sudo apachectl -k graceful

Já vi pessoas adicionando os dados www ao grupo de usuários adm como solução. São muito mais permissões para os dados www do que eu me sinto confortável.

Outras opções mais seguras envolvem a criação de um novo usuário e grupos para o awstats e a execução / execução do awstats como esse novo usuário / grupo.

roberthernandez
fonte
Outra solução seria alterar o grupo de /var/log/apache2e tudo sob ele para www-datatornar os arquivos legíveis por grupo. Isso é um pouco menos permissivo do que torná-los legíveis pelo mundo.
Posto Reinier