如何在无Root权限下读取Linux日志(权限指南)

如何在无Root权限下读取Linux日志(权限指南)

SOC Prime Team
SOC Prime Team linkedin icon 关注

在大多数发行版本中,两个组成员资格几乎涵盖了分析员所需的一切:adm 用于 Debian 和 Ubuntu 上的 /var/log 中的文本日志,systemd-journal 用于完整的系统日志。用 sudo usermod -aG adm,systemd-journal <user> 添加账户并开始一个新的登录会话。少数日志由于设计原因保留为仅 root 访问,特别是在 Red Hat 系列系统上的 /var/log/secure 和 /var/log/messages 以及 /var/log/audit 下的所有内容。对于这些文件,请使用范围狭窄的 sudo,而不是 root shell。

仅仅为了让某人读取日志而给予他们 root 权限是那种在下次审计或下一次事件中会出现的捷径。本指南涵盖了最小权限的方法,以及使“只需将其添加到一个组”比听起来更复杂的陷阱。

免费开始

谁可以阅读什么

LogDebian / UbuntuRHEL / Rocky / Alma
/var/log/auth.log / /var/log/secureroot 和 adm仅 root
/var/log/syslog / /var/log/messagesroot 和 adm仅 root
Web 服务器日志root 和 adm仅 root (httpd 日志目录被锁定)
系统日志 (journalctl)root, systemd-journal, admroot, systemd-journal, wheel
/var/log/audit/audit.log仅 root仅 root

确切的所有权因发行版和版本而异,因此请在设备上自行检查:

id
ls -l /var/log/auth.log /var/log/secure 2>/dev/null
getfacl /var/log/journal 2>/dev/null

选项 1:组成员资格

sudo usermod -aG adm,systemd-journal analyst

两个细节很重要。-a 不是可选的:如果没有它,usermod -G 会替换 用户的组,而不是添加到其中。而且组更改仅适用于新会话。退出并重新登录,或启动一个新的登录 shell,然后再进行测试。“我已添加了组,但它仍然显示权限被拒绝”几乎总是一个旧会话。

在 Red Hat 系列系统上,adm 无法解锁 /var/log/secure 或 /var/log/messages。这些文件在那里的 root-only。使用选项 2 或 3。

选项 2:针对 root-only 日志的狭窄 sudo

授予特定命令,而不是 shell。使用 visudo -f 创建 /etc/sudoers.d/log-readers:

%logreaders ALL=(root) NOPASSWD: /usr/sbin/ausearch, /usr/local/bin/read-secure-log

read-secure-log 是一个小型 root 拥有的脚本(模式 0755,root 拥有),它只做一件事情:

#!/bin/sh
exec /usr/bin/zcat -f /var/log/secure /var/log/secure-*

为什么使用包装器而不是在 sudoers 中使用 cat /var/log/secure*?因为在 sudoers 参数中,* 匹配任何内容,包括空格。cat /var/log/secure /etc/shadow 匹配 cat /var/log/secure*.没有参数的包装器没有这样的漏洞。

不要通过 sudo 授予 journalctl 。它打开一个分页器 (less),并且 !sh 在 less 内给你一个 root shell。要访问日志,请使用 systemd-journal 组。 选项 3:可在轮换中保持的组所有权

Option 3: Group ownership that survives rotation

直接设置 ACL 的方法直到下一次轮换时才有效:sudo setfacl -m g:logreaders:r /var/log/secure。然后文件被重新创建,ACL 消失。为了使访问保持,首先以正确的组创建新文件,在创建它们的两个位置:

  • logrotate,在文件的定义中:create 0640 root logreaders
  • rsyslog,在将其写入的动作上:action(type=”omfile” file=”/var/log/secure” fileGroup=”logreaders” fileCreateMode=”0640″)

在非生产环境中用 logrotate -f 进行测试,然后再部署。

容器

不要仅仅为了读取容器日志而将分析员添加到 docker 组。docker 中的成员身份等同于该主机上的 root。从日志收集器或 SIEM 获取容器日志,或者请求平台团队给予只读访问权限。

出错时

症状可能原因Fix
usermod 后仍然权限被拒绝旧会话退出并重新登录
用户丢失了其他组usermod -G 未使用 -a重新添加它们;始终使用 -aG
journalctl 仅显示用户自己的日志不在 systemd-journal(或 adm / wheel)中添加该组;新会话
昨天访问有效,今天无效日志轮换时 ACL 丢失使用选项 3
adm 对 /var/log/secure 无济于事Red Hat 系列文件为仅 root使用选项 2 或 3
加入 SOC Prime 的 Detection as Code 平台 以提高对与您的业务最相关的威胁的可见性。为了帮助您开始并带来即时价值,现在与 SOC Prime 专家预约会议。