在 Linux 中,日志文件的权限设置通常取决于谁需要读取、写入或管理日志,以及安全性、审计和合规性要求。下面从常见场景出发,系统说明如何设置日志权限。
| 类型 | 文件权限 | 说明 |
|---|---|---|
系统日志(如 /var/log/messages) |
640 |
root 可读写,特定组可读 |
| 应用日志 | 640 或 644 |
视是否允许普通用户读取 |
日志目录(如 /var/log/nginx) |
750 |
防止未授权访问 |
-rw-r----- 1 root root 12345 /var/log/messages
drwxr-x--- 2 root adm 4096 /var/log/nginx
| 用户 | 组 | 说明 |
|---|---|---|
root |
root |
系统管理员 |
syslog |
adm |
系统日志 |
nginx |
nginx |
Nginx |
www-data |
www-data |
Apache / PHP |
# 系统日志
chown root:adm /var/log/syslog
# 应用日志
chown nginx:nginx /var/log/nginx/access.log
chmod 640 /var/log/app.log
chmod 750 /var/log/app
chown appuser:appgroup /var/log/app.log
chown -R appuser:appgroup /var/log/app
chmod -R 640 /var/log/app
⚠️ 注意:目录需要执行权限才能进入
chmod 750 /var/log/app
logrotate 会自动创建新日志文件,权限由它控制。
/etc/logrotate.d/nginx/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
create 0640 nginx nginx
compress
sharedscripts
postrotate
systemctl reload nginx
endscript
}
✅ create 0640 nginx nginx 非常关键
如果启用了 SELinux,权限设置可能仍无法访问。
ls -Z /var/log/nginx
semanage fcontext -a -t httpd_log_t "/var/log/nginx(/.*)?"
restorecon -Rv /var/log/nginx
tail -f /var/log/messages
# Permission denied
✅ 检查:
✅ 最佳实践
640750logrotate 管理新文件权限777 或 666如果你有具体场景(如 Docker / Kubernetes / Java / Nginx / 自建服务),我可以给你更精确的权限配置方案。