使用树莓派收集 sudo 会话录像

日志和会话录像可以帮助调试给定主机出现异常时的原因。在您的树莓派上尝试此设置。
3 位读者喜欢这篇文章。
Vector, generic Raspberry Pi board

我使用 sudo 命令已经很多年了,我最喜欢的功能之一是它如何在运行命令时保存终端中发生的所有事情的记录。此功能已存在十多年。但是,sudo 1.9 引入了中央会话录像收集,允许您在一个位置检查对网络上主机的所有管理访问,并像播放电影一样回放会话。

我在我的树莓派上使用此功能,并将其推荐给其他 Pi 用户。即使您完全信任您的用户,日志和会话录像也可以帮助调试给定主机出现异常时的原因:*哎呀,在 /etc 中删除了错误的文件*。

为什么使用 sudo?

Sudo 授予用户管理访问权限。 除非您将访问权限限制为一小部分命令,否则您实际上提供了对主机的完全访问权限。 pi 用户可以在树莓派操作系统上使用 sudo,甚至无需输入密码。 在其他操作系统上,默认配置授予 wheel 组的成员完全管理访问权限。

开始之前

新的 sudo_logsrvd 应用程序处理收集。 早期版本的树莓派操作系统只有 sudo 版本 1.8。 最新版本基于 Debian 11,并包含 sudo 版本 1.9.5。 您还需要第二个装有 sudo 1.9 的主机,该主机将录像发送到 sudo_logsrvd。

配置 sudo_logsrvd

对于生产环境,我建议使用 TLS 加密连接在 sudo 和 sudo_logsrvd 之间进行连接。 但是,为了简单地了解会话录像的工作原理,您可以不进行加密。 这也意味着除了创建存储目录并启动 sudo_logsrvd 之外,无需配置任何内容。

$ sudo mkdir /var/log/sudo-io
$ sudo chmod 700 /var/log/sudo-io
$ sudo sudo_logsrvd

sudo_logsrvd 现在正在等待连接。

配置 sudo

使用 visudo 在主机上配置 sudo 1.9,并将以下行附加到 sudoers 文件。 您需要将 IP 地址替换为您的树莓派的 IP 地址。 请注意,如果您没有第二个装有 sudo 1.9 的机器,则可以使用运行 sudo_logsrvd 的同一树莓派进行测试。

Defaults ignore_iolog_errors
Defaults log_servers = 172.16.167.129:30343
Defaults log_output

第一行是您在使用 sudo_logsrvd 进行实验时的逃生路线:它确保即使 sudo_logsrvd 不可访问,sudo 也能工作。 不建议在生产环境中使用此配置,因为用户可以在没有正确录像的情况下执行命令。

接下来的两行配置在哪里发送录像以及启用录像。

测试

对于测试,请执行一些您无法从 syslog 中的 sudo 日志中找出的内容:一个 shell 会话。 请注意,sudo 1.9.8 更改了这一点,但它尚未在 Linux 发行版中提供。 在这种情况下,日志仅显示 shell 已启动,但没有显示内部发生的事情

$ sudo -s

# id
uid=0(root) gid=0(root) groups=0(root),117(lpadmin)

# cd /root/

# ls -la
total 36
drwx------  5 root root 4096 Feb 16 12:27 .
drwxr-xr-x 18 root root 4096 Jan 28 04:22 ..
-rw-------  1 root root  827 Feb 16 12:49 .bash_history
-rw-r--r--  1 root root  571 Apr 10  2021 .bashrc
drwx------  3 root root 4096 Feb 16 10:54 .cache
-rw-------  1 root root   41 Feb 16 11:12 .lesshst
drwxr-xr-x  3 root root 4096 Feb 16 12:27 .local
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
drwx------  3 root root 4096 Jan 28 04:21 .vnc

# exit
$

即使日志没有显示任何有用的信息,您仍然可以使用 sudoreplay 命令来列出和回放录像

$ sudo sudoreplay -l
Feb 16 12:37:54 2022 : pi : TTY=/dev/pts/1 ; CWD=/home/pi ; USER=root ; HOST=raspberrypi ; TSID=000001 ; COMMAND=/usr/bin/ls -l /etc/ssl/private/
Feb 16 12:38:14 2022 : pi : TTY=/dev/pts/1 ; CWD=/home/pi ; USER=root ; HOST=raspberrypi ; TSID=000002 ; COMMAND=/usr/bin/ls -la /etc/ssl/private/
Feb 16 12:49:21 2022 : pi : TTY=/dev/pts/1 ; CWD=/home/pi ; USER=root ; HOST=raspberrypi ; TSID=000003 ; COMMAND=/bin/bash
Feb 16 12:50:03 2022 : pi : TTY=/dev/pts/1 ; CWD=/home/pi ; USER=root ; HOST=raspberrypi ; TSID=000004 ; COMMAND=/bin/bash
Feb 16 12:50:28 2022 : pi : TTY=/dev/pts/1 ; CWD=/home/pi ; USER=root ; HOST=raspberrypi ; TSID=000005 ; COMMAND=/usr/bin/sudoreplay -l

$ sudo sudoreplay 000004
Replaying sudo session: /bin/bash

# id
uid=0(root) gid=0(root) groups=0(root),117(lpadmin)
# cd /root/
# ls -la
total 36
drwx------  5 root root 4096 Feb 16 12:27 .
drwxr-xr-x 18 root root 4096 Jan 28 04:22 ..
-rw-------  1 root root  827 Feb 16 12:49 .bash_history
-rw-r--r--  1 root root  571 Apr 10  2021 .bashrc
drwx------  3 root root 4096 Feb 16 10:54 .cache
-rw-------  1 root root   41 Feb 16 11:12 .lesshst
drwxr-xr-x  3 root root 4096 Feb 16 12:27 .local
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
drwx------  3 root root 4096 Jan 28 04:21 .vnc

# exit
$

下一步是什么?

我希望您今天学到了一些新东西,并将在您自己的树莓派上尝试一下。 我在这里描述的设置足以进行测试。 对于生产用途,我建议为 sudo_logsrvd 创建一个启动脚本(Debian 包中缺少该脚本),并且您应该在 sudo 和 sudo_logsrvd 之间使用 TLS。 您可以从文档或我的博客中了解有关配置 TLS 加密的更多信息。 好处是您还可以在家庭或小型办公室的生产环境中使用树莓派上的 sudo_logsrvd。 除非您有数十个 sudo 客户端都在大量使用终端(例如 ls -laR /),否则即使是 Pi 的 SD 卡也不会成为瓶颈。

接下来阅读什么
Peter Czanik
Peter 是一位工程师,在 Balabit(一家 One Identity 公司,开发了 syslog-ng)担任开源布道师。 他协助发行版维护 syslog-ng 包,关注错误跟踪器,帮助用户并在会议(SCALE、All Things Open、FOSDEM、LOADays 等)上定期谈论 sudo 和 syslog-ng。

评论已关闭。

Creative Commons License本作品采用 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.