在 CentOS 上设置 Apache(httpd)日志文件的权限,通常是为了安全、日志可写、以及方便排查问题。下面按常见场景给你说明。
CentOS 下 Apache(httpd)日志一般在:
/var/log/httpd/
常见文件:
access_logerror_logApache 在 CentOS 上通常以 apache 用户 运行:
ps aux | grep httpd
典型结果:
apache 12345 ... /usr/sbin/httpd
所以日志目录和文件通常应为:
owner: root 或 apache
group: apache
chown root:apache /var/log/httpd
chmod 750 /var/log/httpd
chown apache:apache /var/log/httpd/*.log
chmod 640 /var/log/httpd/*.log
说明:
640:属主可读写,组只读,其他无权限(安全)apache 用户需要写权限CentOS 默认开启 SELinux,日志必须有正确 context:
ls -Z /var/log/httpd
正确应为:
system_u:object_r:httpd_log_t:s0
如果错了,修复:
restorecon -Rv /var/log/httpd
CentOS 用 logrotate 管理 Apache 日志:
/etc/logrotate.d/httpd
轮转后权限可能被重置,确保其中有:
create 640 apache apache
示例片段:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd > /dev/null 2>&1 || true
endscript
create 640 apache apache
}
修改后测试:
logrotate -d /etc/logrotate.d/httpd
Permission denied: AH00091: httpd: could not open error log
原因:
解决:
chown apache:apache /var/log/httpd/error_log
chmod 640 /var/log/httpd/error_log
restorecon -v /var/log/httpd/error_log
例如:
CustomLog /data/logs/apache/access.log combined
要做:
mkdir -p /data/logs/apache
chown apache:apache /data/logs/apache
chmod 750 /data/logs/apache
并打 SELinux 标签:
semanage fcontext -a -t httpd_log_t "/data/logs/apache(/.*)?"
restorecon -Rv /data/logs/apache
如果你能告诉我:
我可以给你更精确的命令。