普通用户默认能读取/var/log日志因目录权限为755、日志文件权限为644且属组可读;加固需改目录为750、日志为640,创建专用logview组授权,配置journald限制及auditd/dmesg安全策略。

为什么普通用户默认能看 /var/log 下的日志
因为多数发行版(如 CentOS、Ubuntu)把 /var/log 目录权限设为 drwxr-xr-x,即 group 和 others 都有读权限;而日志文件如 /var/log/messages、/var/log/secure 通常属组 root 或 syslog,且权限是 -rw-r--r-- —— 这意味着任何用户都能用 cat 或 less 直接读取。
修改日志目录和文件的权限
直接收紧权限是最基础也最有效的手段,但要注意不能影响系统服务写入日志:
- 将
/var/log目录权限改为750:sudo chmod 750 /var/log(保留 group 可读,便于后续授权) - 批量修正关键日志文件权限:
sudo find /var/log -type f -name "*" -exec chmod 640 {} \; - 确保日志文件属主仍是
root,属组设为一个专用组(如logview),而非开放的syslog或adm
创建专用日志访问组并控制成员
不靠“禁止”,而是靠“只允许”——这是更安全、可审计的做法:
- 新建组:
sudo groupadd logview - 把需要查看日志的管理员加入该组:
sudo usermod -a -G logview adminuser - 把所有关键日志文件属组改为
logview:sudo chgrp -R logview /var/log/*.log /var/log/messages /var/log/secure - 确认 SELinux 策略允许该组访问(若启用):
sudo semanage fcontext -a -t var_log_t "/var/log(/.*)?",再sudo restorecon -Rv /var/log
systemd-journald 的额外限制
如果系统使用 journald(绝大多数现代发行版默认启用),仅改文件权限无效:journalctl 默认允许任意用户读取自己的服务日志,甚至部分系统日志。必须显式限制:
- 编辑
/etc/systemd/journald.conf,取消注释并设为:ReadKMsg=no(禁用非 root 用户调用journalctl --all)、ForwardToSyslog=no(避免日志被转发到 rsyslog 后绕过权限) - 设置
Storage=volatile或Storage=persistent并确保/var/log/journal目录权限为750、属组logview - 重启生效:
sudo systemctl restart systemd-journald
真正难处理的是 auditd 日志(/var/log/audit/)和内核环形缓冲区(dmesg 输出)——前者需 auditctl -e 2 关闭或通过 kernel.dmesg_restrict=1 限制,后者依赖 sysctl 设置。这些不是单纯改文件权限能解决的,容易漏掉。











