在 CentOS 上配置 Apache 日志文件的权限,核心目标是:
Apache 能写日志,系统安全,日志不被随意篡改。
下面按常见场景说明。
CentOS 上 Apache(httpd)默认用户通常是:
apacheapacheapacheapache查看方式:
grep -E '^User|^Group' /etc/httpd/conf/httpd.conf
默认日志目录:
/var/log/httpd/
常见日志:
access_logerror_log默认权限通常类似:
-rw-r--r-- root apache access_log
-rw-r--r-- root apache error_log
✅ 推荐权限原则:
chown root:apache /var/log/httpd
chmod 750 /var/log/httpd
chown root:apache /var/log/httpd/*.log
chmod 640 /var/log/httpd/*.log
说明:
640:root 可写,apache 可读,其他用户不可访问Apache 在 启动阶段(root) 打开日志文件,
运行阶段(apache 用户)继续写入。
所以:
✅ 目录权限至少:
chmod 750 /var/log/httpd
如果 Apache 无法写日志,常见原因:
CentOS 默认开启 SELinux,日志必须带正确类型:
查看:
ls -Z /var/log/httpd
正确类型应为:
httpd_log_t
如果是错误类型,修复:
restorecon -Rv /var/log/httpd
如果你在 httpd.conf 或 vhost 中自定义了日志:
CustomLog /data/logs/www/access.log combined
步骤:
mkdir -p /data/logs/www
chown root:apache /data/logs/www
chmod 750 /data/logs/www
touch /data/logs/www/access.log
chown root:apache /data/logs/www/access.log
chmod 640 /data/logs/www/access.log
并打 SELinux 标签:
semanage fcontext -a -t httpd_log_t "/data/logs/www(/.*)?"
restorecon -Rv /data/logs/www
CentOS 使用:
/etc/logrotate.d/httpd
轮转后权限由 logrotate 控制,建议检查:
create 640 root apache
示例:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
create 640 root apache
postrotate
/bin/systemctl reload httpd > /dev/null 2>&1 || true
endscript
}
✅ 最佳实践
目录:root:apache 750
日志:root:apache 640
SELinux:httpd_log_t
logrotate:create 640 root apache
如果你愿意,可以告诉我:
我可以给你一套可直接复制执行的命令。