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

Jor*_*ril 14 server permissions apache2 logging

我在新的 Ubuntu Lucid 服务器上安装了 awstats,但是当 cron 尝试以 user 身份运行它时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 更改为 group adm(但请注意,您将冒着允许 CGI 脚本访问机器上的管理内容的风险!)。

我会选择 1,但是推荐的授予权限是什么?

the*_*ist 8

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

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

create 640 root adm
Run Code Online (Sandbox Code Playgroud)

create 644 root adm
Run Code Online (Sandbox Code Playgroud)

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

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

chmod a+r /var/log/apache2/* #or whatever your path is
Run Code Online (Sandbox Code Playgroud)

那么所有文件都可以被所有用户读取,所有logrotate以后创建的文件都将拥有足够的权限

  • 对于“所有用户”能够查看“/var/log/apache2/”的附加操作: chmod a+x /var/log/apache2/ (3认同)

小智 7

在大多数设置中:

  • awstats 以您的 apache 用户www-data 运行
  • apache 日志文件归root:adm所有,并具有 -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 }
    
    Run Code Online (Sandbox Code Playgroud)

最简单的解决方案是:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

3)重启apache。

sudo apachectl -k graceful
Run Code Online (Sandbox Code Playgroud)

我已经看到人们将 www-data 添加到 adm 用户组作为解决方案。这对于www-data 的权限比我所接受的要多得多。

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