我有一个 Apache2 服务器无法访问 mod-security 日志:
[email protected]:~$ apachectl -V
AH00526: Syntax error on line 196 of /etc/modsecurity/modsecurity.conf:
ModSecurity: Failed to open the audit log file: /var/log/apache2/modsec_audit.log
Action '-V' failed.
The Apache error log may have more information.
[email protected]:~$ sudo ls -la /var/log/apache2/modsec_audit.log
-rw-rwxrwx 1 root www-data 101792 Oct 22 16:37 /var/log/apache2/modsec_audit.log
我有点困惑,因为每个人(所有者、群组、其他人)都有权打开日志文件。
编辑:
[email protected].:/var/log/unattended-upgrades$ sudo -u www-data touch /var/log/apache2/modsec_audit.log
touch: cannot touch '/var/log/apache2/modsec_audit.log': Permission denied
这变得更加奇怪了……
编辑2:
[email protected]:/var/log/unattended-upgrades$ sudo ls -la /var/log/apache2/
total 1015752
drw-r--r-- 2 root adm 12288 Oct 22 15:55 .
编辑3:
ls -la /var/log|grep apache
drw-r--r-- 2 root adm 12288 Oct 22 15:55 apache2
答案1
您不能触碰 modsec_audit.log,即
sudo -u www-data touch /var/log/apache2/modsec_audit.log
因为日志目录属于 root:adm。www-data 不是 root,也不属于组 adm。组和其他人只能读取您的日志目录。只有 root:adm 可以实际写入。
我在 CentOS 7 上遇到了同样的问题,其中主 httpd 进程以 root 身份启动,然后生成许多以 apache:apache 身份运行的子进程。在 Debian/Ubuntu 上,除了 apache 与 www-data 之间的差异外,情况一定相同。
在 CentOS 7 上,我只能以 root 身份运行 apachectl、httpd 等。否则,会出现相同的“语法错误”。此外,只有安装了 mod_security 才会发生这种情况。
这基本上是 apachectl/httpd/etc。以非特权用户身份调用 mod_security 来检查其配置是否存在语法错误,但 mod_security 显然非常重视安全性:) 并且无法代表没有权限的调用用户打开日志文件。
因此,只需运行
sudo apachectl -V
或者,你可以
- 将 prim 用户添加到 adm 组(假设日志文件归 root:adm 所有,并且允许组读取和/或写入)
- chown root:prim 你的日志文件(这是一个非常糟糕的主意,但在这里列出是为了证明这是一个基本文件权限问题)。