我在新的 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.log到644。
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 创建的所有文件都将具有适当的权限