普通用户默认无权查看系统级 journal 日志,需通过精准授权控制访问:限制 systemd-journal/adm 组成员资格、用 Polkit 细粒度管控 journalctl 操作、关闭持久化与 syslog 转发以减少敏感数据暴露。

普通用户默认不能查看系统级 journal 日志,这是 systemd 的安全设计。要限制其访问敏感日志,核心不是“禁止”,而是“精准授权”——只开放必要范围,避免直接改权限或开全局 sudo。
明确日志访问边界
systemd-journald 默认将日志分为三类:
- 系统日志(/var/log/journal/):含内核、服务、登录等全局信息,需 systemd-journal 组权限
- 用户会话日志(~/.local/share/systemd/journal/):仅当前用户进程,普通用户天然可读
- 转发到 syslog 的副本(如 /var/log/syslog):由 rsyslog 控制,归属 syslog 或 adm 组
限制的关键是:不让用户获得 systemd-journal 或 adm 组成员身份,也不让其通过 sudo 执行 journalctl --all。
禁用组权限是最直接的限制方式
若某用户不应查系统日志,就不要将其加入特权组。检查并清理现有授权:
- 运行
getent group systemd-journal和getent group adm查看哪些用户在组内 - 用
sudo usermod -G "" username清空用户次要组(注意保留主组),或用sudo gpasswd -d username systemd-journal逐个移除 - 确认用户已退出所有会话——新组权限需重新登录才生效,
su -不继承组变更
用 Polkit 实现细粒度控制
比 sudoers 更灵活,可按操作类型限制。例如,只允许用户查本机服务状态,但禁止读内核日志或历史启动记录:
- 新建规则文件
/etc/polkit-1/rules.d/40-restrict-journal.rules - 写入以下内容(拒绝非授权行为):
if (subject.isInGroup("wheel") === false &&
(action.id == "org.freedesktop.journal.read" ||
action.id == "org.freedesktop.journal.export")) {
return polkit.Result.NO;
}
});
保存后无需重启,Polkit 会自动加载。该规则阻止非 wheel 组用户调用 journal 读取或导出接口。
关闭日志持久化与转发来收窄暴露面
如果业务不需要长期存档或跨工具分析,可从源头减少敏感数据落地:
- 编辑
/etc/systemd/journald.conf,设Storage=volatile(日志仅存于 /run/log/journal/,重启即清空) - 注释或删掉
ForwardToSyslog=yes,避免 journal 内容被复制进 /var/log/syslog 等传统路径 - 设
MaxRetentionSec=1week限制最大保留时长,防止历史敏感日志堆积
改完运行 sudo systemctl kill --signal=SIGUSR1 systemd-journald 重载配置,不需重启服务。

















