Debian 下 Nginx 日志(access.log / error.log)权限 通常不需要“手动乱改”,只要按 Debian 的默认规范来,就不会出问题。下面给你一个标准、安全、可维护的做法。
Debian 默认:
www-data/var/log/nginxdrwxr-x----rw-r-----root:adm示例:
ls -ld /var/log/nginx
# drwxr-x--- 1 root adm 4096 ...
ls -l /var/log/nginx/access.log
# -rw-r----- 1 root adm 0 ...
✅ 这是 Debian 推荐配置,不要随意改成 777 或 www-data 属主
sudo chown root:adm /var/log/nginx
sudo chmod 750 /var/log/nginx
sudo chown root:adm /var/log/nginx/*.log
sudo chmod 640 /var/log/nginx/*.log
adm组用于日志查看权限(如运维、logrotate)
| 用户 | 用途 |
|---|---|
root |
创建日志文件(Nginx master 进程) |
www-data |
Nginx worker 进程(写日志) |
adm |
允许系统管理员查看日志 |
✅ Nginx worker 以 www-data 运行,但能写日志,是因为:
others 可能不可读Debian 自带:
/etc/logrotate.d/nginx
内容示例(简化):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx
endscript
}
✅ 新日志文件权限由 logrotate 的 create 决定
open() "/var/log/nginx/access.log" failed (13: Permission denied)
✅ 解决:
sudo chown root:adm /var/log/nginx
sudo chmod 750 /var/log/nginx
sudo chown www-data:www-data /var/log/nginx
❌ 不推荐
✅ 正确方式:改 logrotate 的 create 行
例如:
access_log /data/logs/nginx/access.log;
必须:
sudo mkdir -p /data/logs/nginx
sudo chown root:adm /data/logs/nginx
sudo chmod 750 /data/logs/nginx
并确保 www-data 能写:
sudo setfacl -m u:www-data:rwx /data/logs/nginx
(或让 Nginx master 创建文件)
ps aux | grep nginx # 确认 www-data
ls -ld /var/log/nginx
ls -l /var/log/nginx/*.log
cat /etc/logrotate.d/nginx
Debian 下 Nginx 日志权限:目录
root:adm 750,文件root:adm 640,不要改成 www-data;logrotate 才是关键。
如果你愿意,可以把你的 Nginx 报错日志 / 自定义路径贴出来,我可以直接帮你改到最优。