根本原因是权限与属组严格控制:/var/log/messages和syslog默认为root:syslog、640权限,非root且非syslog组成员无法读取;需通过usermod加组而非chmod放行,并确保logrotate含create 640 root syslog以维持轮转后权限。

普通用户默认不能读 /var/log/messages 和 /var/log/syslog,根本原因不是“被禁止”,而是文件权限和属组控制得严——root:syslog + 640 权限下,非 root、非 syslog 组成员自然进不去。防读的关键不是加锁或改配置,而是守住这个权限模型不被绕过。
确认当前日志权限与归属是否已生效
先验证问题根源是不是权限本身没设对:
- 运行
ls -l /var/log/messages /var/log/syslog,输出应类似-rw-r----- 1 root syslog 123456 Oct 1 10:00 /var/log/messages;若权限是644或属组不是syslog,说明管控已失效 - 检查用户是否意外在
syslog组里:groups或getent group syslog,避免“以为没加组,其实早被脚本加了” - Debian/Ubuntu 系统注意:rsyslog 默认可能未启用
syslog组访问,需确认/etc/rsyslog.conf中未注释$FileGroup syslog且$FileCreateMode 0640生效
别用 chmod 临时放行,必须靠组权限隔离
直接 chmod 644 /var/log/syslog 是典型错误操作:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 多数发行版(如 Ubuntu 22.04+、RHEL 8+)的 rsyslog 在重启或 logrotate 后会重置权限,导致策略失效
- 一旦开放 world-readable,任何本地用户(包括恶意进程)都能读取
auth.log、secure等敏感日志片段 - 真正安全的做法是:确保目标用户**不在**
syslog组,且不给sudo journalctl权限;需要查日志时走审计流程,而非开放读权限
配合 logrotate 保证轮转后权限不漂移
logrotate 不只是清理工具,更是权限守门员:
- 在
/etc/logrotate.d/rsyslog中必须包含create 640 root syslog,否则轮转后新文件可能是600或644 - 若日志启用了
chattr +a(追加属性),logrotate 的prerotate段需加chattr -a /var/log/messages,否则写入失败导致日志中断 - 测试配置是否真生效:
logrotate -d /etc/logrotate.d/rsyslog(dry-run)看输出里是否含create mode = 0640
警惕 systemd-journald 和 rsyslog 混合场景下的漏网路径
只盯 /var/log/ 下的文件还不够,journald 可能成为旁路:
- 如果
/var/log/journal/存在且非空,普通用户执行journalctl --no-pager仍可能看到部分系统日志——只要他属于systemd-journal组 - Debian/Ubuntu 默认禁用
systemd-journal组访问,但若管理员手动启用了Storage=persistent却忘了关ReadKMsg=yes,就等于开了后门 - 验证方式:
journalctl --list-boots若能列出启动记录,说明 journald 日志已可读;此时需同步检查usermod -aG systemd-journal是否误执行过
最易被忽略的一点:权限模型依赖的是“组成员身份 + 文件权限 + 服务配置”三者咬合,缺一不可。单独改一个环节(比如只加组、不配 logrotate create、或忽略 journald 的 Seal=yes 设置),都可能让防护形同虚设。

















