AWStats:无法访问/var/log/apache2/access.log

我在我的新Ubuntu Lucid服务器上安装了awstats,但是当cron尝试以用户www-data运行它时,它抱怨cannot access /var/log/apache2/access.log: Permission denied

/usr/share/doc/awstats/README.Debian有这一段:

默认情况下,Apache存储(自1.3.22-1版本以来)使用uid = root和gid = adm的日志文件,因此您需要…

1)更改/etc/logrotate.d/apache中日志文件的权限,以便www-data至少具有读访问权限。

2)作为1)但更改为特定用户,并使用Apache的suEXECfunction作为同一用户运行(并且还要更改/ var / lib / awstats的权限或使用其他目录)。 这更复杂,但服务器通常无法访问日志(这可能是Apache默认的点)。

3)将awstats.pl更改为group adm(但请注意,您将冒险允许CGI脚本访问计算机上的管理员资料!)。

我会选择1,但建议的授权是什么?

如果你选择第1点并且它说www-data应该至少具有读取权限,那么推荐的是仅授予读取权限。

您可以更改该行(在logrotate文件中):

 create 640 root adm 

 create 644 root adm 

给所有用户(包括www数据)读取权限。

您需要更改/ var / log / apache2 /中的权限现有文件以匹配此设置

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

然后所有用户都可以读取所有文件,并且将来logrotate创建的所有文件都具有相应的权限

在大多数设置中:

  • awstats作为你的apache用户运行www-data ;
  • apache日志文件由root拥有:adm和have -rw -r —– (aka: chmod 640 )权限; 和
  • 所有权和权限设置可以在文件/etc/logrotate.d/apache2中找到,其内容是:

     /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 } 

最简单的解决方案是:

1)使用您喜欢的文本编辑器在/etc/logrotate.d/apache2中将“ create 640 root adm ”更改为“ create 644 root adm ”,或者如果您必须编写所有脚本:

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

2)将/var/log/apache2/access.log/var/log/apache2/error.log上的权限更改为644

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

3)重启apache。

 sudo apachectl -k graceful 

我见过人们将这些www数据添加到adm用户组作为解决方案。 对于www-data来说,这比我很熟悉的权限要多得多。

其他更安全的选项包括为awstats创建新用户和组,并使awstats作为这个新用户/组运行/执行。

Interesting Posts