普通用户不能直接读取系统日志,但可通过sudo授权安全使用less、tail、journalctl等命令;推荐配置/etc/sudoers白名单规则或封装viewlog脚本,结合systemd-journal组实现最小权限访问。

普通用户不能直接读取系统日志(如 /var/log/syslog、/var/log/auth.log),但可通过 sudo 授权其安全、有限地使用日志查看命令(如 less、tail、journalctl),无需开放整个日志文件的读权限,也不需给用户 sudo 全权限。
配置专用日志查看命令别名(推荐)
在 /etc/sudoers 中为用户或组添加只允许运行特定日志查看命令的规则,避免暴露 shell 或任意命令执行风险。
- 用
sudo visudo编辑配置,添加类似行(以用户devuser为例):
devuser ALL=(root) NOPASSWD: /usr/bin/journalctl -u nginx*, /usr/bin/journalctl -u ssh*, /usr/bin/tail -n 100 /var/log/syslog, /usr/bin/less /var/log/auth.log
- 支持通配符(如
nginx*)和固定参数,防止参数注入;禁止带-o、--all等敏感选项; - 用户执行时需显式加
sudo,例如:sudo journalctl -u nginx.service; - 若想免密,保留
NOPASSWD:;如需密码,去掉该字段即可。
封装成自定义脚本并授权(更安全可控)
把常用日志操作封装为受限脚本,再通过 sudo 授权调用,便于统一管理与审计。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 新建脚本
/usr/local/bin/viewlog:
#!/bin/bash
case "$1" in
nginx) exec /usr/bin/journalctl -u nginx --no-pager -n 50 ;;
ssh) exec /usr/bin/journalctl -u ssh --no-pager -n 50 ;;
auth) exec /usr/bin/less /var/log/auth.log ;;
syslog) exec /usr/bin/tail -n 100 /var/log/syslog ;;
*) echo "Usage: $0 {nginx|ssh|auth|syslog}" >&2; exit 1 ;;
esac- 设置权限:
sudo chmod 755 /usr/local/bin/viewlog; - 在
/etc/sudoers中授权:devuser ALL=(root) NOPASSWD: /usr/local/bin/viewlog *; - 用户只需运行
sudo viewlog nginx,既简洁又杜绝越权可能。
配合 systemd-journald 的细粒度访问控制(仅限 journal 日志)
若主要查看 journalctl 日志,可启用 RestrictAddressFamilies 和 StandardOutput=journal 等服务级控制,并利用 systemd-journal 用户组实现轻量级共享。
- 将用户加入
systemd-journal组:sudo usermod -aG systemd-journal devuser; - 该组默认可读本机 journal(非全部,受
~/.local/share/journal和/run/log/journal权限限制); - 如需跨用户或持久化日志,还需确保
/var/log/journal存在且组可读(sudo mkdir -p /var/log/journal; sudo systemd-tmpfiles --create --prefix /var/log/journal); - 此时用户可直接运行
journalctl --user-unit=xxx或journalctl -u nginx(无需 sudo),但仅限本机已启用 persistent logging 的场景。
验证与最小权限原则提醒
每次配置后务必验证效果,并坚持最小授权原则。
- 测试命令是否按预期运行:
sudo -l -U devuser查看该用户被允许的 sudo 命令; - 尝试非法参数(如
sudo journalctl -o json)应被拒绝; - 避免写入类操作(如
sudo cat /var/log/auth.log > /tmp/x)——这会绕过白名单,应禁用 shell 通配与重定向,方法是在 sudoers 中启用env_reset并禁用setenv; - 生产环境建议搭配
auditd或sudo日志(/var/log/auth.log或/var/log/sudo.log)做行为审计。










