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

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 的 suEXEC 功能以相同用户身份运行(也可以更改 /var/lib/awstats 的权限或使用其他目录)。这更复杂,但服务器通常无法访问日志(这可能是 Apache 默认设置的目的)。

3) 将 awstats.pl 更改为组 adm(但请注意,您将面临允许 CGI 脚本访问机器上的管理员内容的风险!)。

我会选择 1,但是建议授予哪些权限?

答案1

在大多数设置中:

  • awstats 以你的 apache 用户身份运行www-数据
  • Apache 日志文件归根:管理员并且有 -rw-r-----(又名: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)修改“创建 640 root 管理员“ 到 ”创建 644 root 管理员“ 在/etc/logrotate.d/apache2使用您最喜欢的文本编辑器,或者,如果您必须编写脚本来编写所有内容:

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.log644

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

3)重新启动apache。

sudo apachectl -k graceful

我见过有人将 www-data 添加到 adm 用户组作为解决方案。这为www-数据比我感觉舒服的程度还要高。

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

答案2

如果您选择第 1 点,并且它说 www-data 至少应该具有读取权限,那么建议仅授予读取权限。

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

create 640 root adm

create 644 root adm

赋予所有用户(包括www-data)读取权限。

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

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

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

相关内容