普通用户默认仅能查看自身日志,系统日志需加入systemd-journal组、adm/wheel组或使用sudo提权;日志按_uid自动过滤,存储于~/.local/share/systemd/journal/;精细控制可通过组权限与字段过滤组合实现。

普通用户默认只能查看自己的日志条目,系统日志和他人日志需明确授权才能访问。权限控制不是靠密码或单独配置文件开关,而是由 systemd 的组成员身份和内核级访问策略共同决定。
用户日志的默认可见范围
每个用户启动的进程(如通过 user session 启动的服务、命令行工具)产生的日志会自动标记 _UID 字段。journalctl 读取时会根据当前登录用户的 UID 自动过滤,仅显示匹配的日志。这意味着:
- 普通用户执行
journalctl不加参数,看到的是自己本次登录以来的命令、桌面服务、用户级 unit 等日志 -
journalctl _UID=1001这类显式过滤,普通用户也能用,但只能查到自己账户的记录(即使指定其他 UID,无权限时返回空) - 用户日志默认存于
~/.local/share/systemd/journal/,不依赖 root 权限即可读取
授予系统日志查看权限的三种方式
让非 root 用户查看完整系统日志(包括内核、systemd、其他用户服务),有以下可靠路径:
-
加入 systemd-journal 组:运行
sudo usermod -aG systemd-journal username,用户下次登录后即可执行journalctl查看全部日志 - 加入 adm 或 wheel 组(部分发行版等效):这些组在多数 systemd 配置中被赋予同等 journal 访问权,例如 Ubuntu 默认将 adm 组映射为 journal 读取权限
-
使用 sudo 执行:临时提权,如
sudo journalctl -u sshd。注意:需在/etc/sudoers中允许该用户执行 journalctl(推荐限定为只读命令)
按用户或服务精细隔离日志访问
单纯放开全部日志可能不符合安全要求。可通过组合过滤与权限分组实现最小化暴露:
- 给运维人员分配
systemd-journal组,但禁止其执行sudo systemctl,做到“可查不可控” - 为监控脚本创建专用服务账户,并用
_SYSTEMD_UNIT=monitor-app.service+_UID=998双重约束,限制脚本只能读自身日志 - 避免直接开放
journalctl --all或-o json-pretty给低权限用户,因这些模式可能暴露敏感字段(如环境变量、命令行参数)
验证权限是否生效
用户获得权限后,可用以下命令快速确认效果:
-
journalctl --list-boots—— 能列出所有启动记录,说明已获得系统级日志索引访问权 -
journalctl -k -n 5—— 成功显示最近 5 条内核消息,代表可读 kernel transport 日志 -
journalctl _UID=0 -n 1—— 显示一条 root 进程日志(如 systemd),即表示跨用户日志可读










